ERC-20
Overview
Max Total Supply
1,000,000,000 MFC
Holders
1,862
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
222,848.7499 MFCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MarshallFightingChampionship
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED /** * MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMX0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNXKKKKKXXNMMMMMMMMMMMMMMMMMMM MMMMMMk';kNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0l.oWMMMMMMMMMMMMW0l:::;::;;::::::::::::::::::::l0MMMMMMMMMMMMMMMMMMMMMMWKOdl:,'........';cox0NMMMMMMMMMMMMM MMMMMMk. ;kNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0l. lWMMMMMMMMMMMMMWO:. .xMMMMMMMMMMMMMMMMMMMXOl,. .':xKWMMMMMMMMM MMMMMMk. ;kNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0l. lWMMMMMMMMMMMMMMMWO:. .kMMMMMMMMMMMMMMMMMMNd. .;xNMMMMMMM MMMMMMk. ;kNMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0l. lWMMMMMMMMMMMMMMMMMWO:. .kMMMMMMMMMMMMMMMMMMMNk; 'xNMMMMM MMMMMMk. ;kNMMMMMMMMMMMMMMMMMMMMMMMMW0c. lWMMMMMMMMMMMMMMMMMMMWO:.....................,OMMMMMMMMMMMMMMMMMMMMMNk; .,;:cc::,.. 'xNMMMMM MMMMMMO. ;kNMMMMMMMMMMMMMMMMMMMMW0c. lWMMMMMMMMMMMMMMMMMMMMMWNXXXXXXXXXXXXXXXXXXXXXWMMMMMMMMMMMWKXMMMMMMMMMNk:cx0XWMMMMMMWNKkl, ,xNMMMMMMM MMMMMMWO:. ;kNMMMMMMMMMMMMMMMMW0c. lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWx..oXWMMMMMMMMMMMMMMMMMMMMMMMMMNOc.,xNMMMMMMMMM MMMMMMMMWO:. ;kNMMMMMMMMMMMMW0c. lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMk. .oKMMMMMMMMMMMMMMMMMMMMMMMMMMWXNMMMMMMMMMMM MMMMMMMMMMWO:. ;kNMMMMMMMMW0c. lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMK; .oKWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMWO:. ;kNMMMMW0c. lWMMMMMMMMMMMMXkddddddddddddddddddddddddddddKMMMMMMMMMMMx. ,KMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMWO:. ;kNW0c. lWMMMMMMMMMMMMk. oMMMMMMMMMMWl ;XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMWO:. ,:. ,xl. lWMMMMMMMMMMMMk. oMMMMMMMMMMN: cWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMKd0WMMMMMMMMWO:. ,xNMd lWMMMMMMMMMMMMk. oMMMMMMMMMMN: cWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMk..c0WMMMMMMMMWO:. ,xNMMMd lWMMMMMMMMMMMMk. .dMMMMMMMMMMWo ,KMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMk. .c0WMMMMMMMMWO:. ,xNMMMMMd lWMMMMMMMMMMMMk. .,oOOOOOOOOOOOOOOOOOXMMMMMMMMMMMk. oWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMk. .c0WMMMMMMMMWO:. ,xNMMMMMMMd lWMMMMMMMMMMMMk. .cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNc .oNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMk. .c0WMMMMMMMMWO:. ,xNMMMMMMMMMd lWMMMMMMMMMMMMk. .cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMK, ;OWMMMMMMMMMMMMMMMMMMWKdkNMMMMMMMMMM MMMMMMk. cNMMMMMMMMMMWOc;xNMMMMMMMMMMMd lWMMMMMMMMMMMMk. .cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM0, .:xXWMMMMMMMMMMMMMNOc. ,xNMMMMMMMM MMMMMMk. :NMMMMMMMMMMMMWWMMMMMMMMMMMMMd lWMMMMMMMMMMMMk. .cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXc. .;lxO0KKKK0Oxo:' ,xNMMMMMM MMMMMMk. :NMMMMMMMMMMMMMMMMMMMMMMMMMMMd lWMMMMMMMMMMMMk. .cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNk, ...... lXMMMMM MMMMMMk. :NMMMMMMMMMMMMMMMMMMMMMMMMMMMd lWMMMMMMMMMMMMk. .cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNx;. .oKWMMMMM MMMMMMk. :NMMMMMMMMMMMMMMMMMMMMMMMMMMMd lWMMMMMMMMMMMMk. .cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0o,. .:xXMMMMMMMM MMMMMMk. :NMMMMMMMMMMMMMMMMMMMMMMMMMMMd. lWMMMMMMMMMMMMk. .cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0dc,. ..;lkXWMMMMMMMMMM MMMMMMXOxxxxxxxx0WMMMMMMMMMMMMMMMMMMMMMMMMMMMXkxxxxxxxxKMMMMMMMMMMMMMXkxxxxxxxxOKNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXOxdolc::::clodk0NWMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM Telegram: https://t.me/MFCworld Website: https://mfc.com */ pragma solidity 0.8.18; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol"; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; } interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); 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 ); } contract MarshallFightingChampionship is IERC20, Ownable { ////////////////////////// address ////////////////////////// address[] private _excluded; // addresses excluded from rewards address public lpPair; address public constant DEAD = 0x000000000000000000000000000000000000dEaD; ////////////////////////// uint ////////////////////////// uint256 private constant _tTotal = 1_000_000_000 * 10**_decimals; uint256 private constant MAX = ~uint256(0); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 constant taxDivisor = 1000; uint256 public swapThreshold; uint256 public launchedAt; uint256 public deadBlocks; uint256 private _tokensForLiquidity; uint256 private _tokensForMarketing; uint256 private _tokensForStaking; ////////////////////////// mappings ////////////////////////// mapping(address => uint256) public _rOwned; // balance of holders getting reflections mapping(address => uint256) _tOwned; // tokens owned if excluded from rewards mapping(address => bool) private lpPairs; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _liquidityProviders; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedFromRewards; mapping(address => bool) private _isExcludedFromLimits; mapping(address => bool) private isPresaler; ////////////////////////// bool ////////////////////////// bool private inSwap; bool public swapAndLiquifyEnabled = false; bool public tradingStarted = false; bool public _hasLiqBeenAdded = false; bool public allowPresaleExclusion = true; ////////////////////////// token info ////////////////////////// string private constant _name = "Marshall Fighting Championship"; string private constant _symbol = "MFC"; uint8 private constant _decimals = 18; ////////////////////////// router ////////////////////////// IUniswapV2Router02 public uniswapRouter; ////////////////////////// struct ////////////////////////// struct Fees { uint16 buyTotalFee; uint16 sellTotalFee; uint16 reflectionBuy; uint16 marketingBuy; uint16 liquidityBuy; uint16 stakingBuy; uint16 reflectionSell; uint16 marketingSell; uint16 liquiditySell; uint16 stakingSell; } // max wallet and max txs are in % of total supply struct Limits { uint16 buyLimit; uint16 sellLimit; uint16 maxWallet; } // Extra values for the transfer function struct ExtraValues { uint256 tTransferAmount; uint256 tFee; uint256 tSwap; uint256 rTransferAmount; uint256 rAmount; uint256 rFee; uint256 currentRate; } // receiver addresses for fees struct FeeReceivers { address payable marketing; address payable staking; } Fees public _taxRates = Fees({ buyTotalFee: 60, sellTotalFee: 60, reflectionBuy: 10, marketingBuy: 30, liquidityBuy: 10, stakingBuy: 10, reflectionSell: 10, marketingSell: 30, liquiditySell: 10, stakingSell: 10 }); FeeReceivers public _FeeReceivers = FeeReceivers({marketing: payable(DEAD), staking: payable(DEAD)}); Limits public limits = Limits({buyLimit: 50, sellLimit: 100, maxWallet: 50}); ////////////////////////// errors ////////////////////////// error InvalidContractSwapSettings(string error); error TradingNotActive(string error); error StartTradingError(string error); error InvalidRatioSettings(string error); error InvalidFeesSettings(string error); error InvalidLimitsSettings(string error); error InvalidFeeReceivers(string error); error MaxTxExceeded(string error); error MaxWalletExceeded(string error); ////////////////////////// events ////////////////////////// event AutoLiquify(uint256 amountCurrency, uint256 amountTokens); event TradingStarted(bool tradingStarted); event LpPairsUpdated(address lpPair, bool isLpPair); event TaxesUpdated( uint16 buyTotalFee, uint16 sellTotalFee, uint16 reflectionBuy, uint16 marketingBuy, uint16 liquidityBuy, uint16 stakingBuy, uint16 reflectionSell, uint16 marketingSell, uint16 liquiditySell, uint16 stakingSell ); event SwapAndLiquify( uint256 tokensSwapped, uint256 liquidityBalance, uint256 marketingBalance ); event AutoLiquidityAdd(uint256 tokenAmount, uint256 currencyAmount); event ContractSwapSettingsUpdated(bool enabled, uint256 swapThreshold); event FeeReceiversUpdated( address payable marketing, address payable staking ); event LimitsUpdated(uint16 buyLimit, uint16 sellLimit, uint16 maxWallet); event ExcludedFromRewardUpdated(address account, bool isExcluded); event ExcludedFromFeesUpdated(address account, bool isExcluded); event ExcludedFromLimitsUpdated(address account, bool isExcluded); event PresaleSet(address presale); event TokensSentToNFTStaking(address nftStakingPool, uint256 amount); modifier inSwapFlag() { inSwap = true; _; inSwap = false; } constructor() payable { // Set the owner. _rOwned[owner()] = _rTotal; emit Transfer(address(0), owner(), _tTotal); uniswapRouter = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); lpPair = IUniswapV2Factory(uniswapRouter.factory()).createPair( uniswapRouter.WETH(), address(this) ); lpPairs[lpPair] = true; _approve(owner(), address(uniswapRouter), type(uint256).max); _allowances[address(this)][address(uniswapRouter)] = type(uint256).max; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[DEAD] = true; _isExcludedFromLimits[owner()] = true; _isExcludedFromLimits[address(this)] = true; _isExcludedFromLimits[DEAD] = true; _isExcludedFromLimits[address(uniswapRouter)] = true; _liquidityProviders[owner()] = true; } receive() external payable {} ////////////////////////// trading functions ////////////////////////// /** * @dev Transfer tokens to a specified address. * @param recipient The address to transfer to. * @param amount The amount of tokens to be transferred. */ function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } /** * @dev Overrides the ERC20 approve function tokens to a specified address. * @param spender Address of the spender allowed to spend the tokens. * @param amount The amount of tokens to be approved. */ function approve(address spender, uint256 amount) external override returns (bool) { _approve(msg.sender, spender, amount); return true; } /** * @dev Overrides the ERC20 transferFrom function to transfer tokens from one address to another. * @param sender The address which you want to send tokens from. * @param recipient The address which you want to transfer to. * @param amount The amount of tokens to be transferred. */ function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { if (_allowances[sender][msg.sender] != type(uint256).max) { _allowances[sender][msg.sender] -= amount; } return _transfer(sender, recipient, amount); } ////////////////////////// internal functions ////////////////////////// /** * @dev Internal function to transfer tokens from one address to another. * This includes any fee or swap logic. * @param from The address which you want to send tokens from. * @param to The address which you want to transfer to. * @param amount The amount of tokens to be transferred. * @return A boolean that indicates if the operation was successful. */ function _transfer( address from, address to, uint256 amount ) internal returns (bool) { require(from != address(0), "ERC20: transfer from the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); bool buy = false; bool sell = false; bool other = false; if (lpPairs[from]) { buy = true; if (!_isExcludedFromLimits[to]) { if (amount > _tTotal / limits.buyLimit) revert MaxTxExceeded("Max buy amount exceeded."); if (balanceOf(to) + amount > _tTotal / limits.maxWallet) { revert MaxWalletExceeded("Max wallet amount exceeded."); } } } else if (lpPairs[to]) { sell = true; if ( !_isExcludedFromLimits[from] && amount > _tTotal / limits.sellLimit ) { revert MaxTxExceeded("Max sell amount exceeded."); } } else { if ( balanceOf(to) + amount > _tTotal / limits.maxWallet && !_isExcludedFromLimits[to] ) { revert MaxWalletExceeded("Max wallet amount exceeded."); } other = true; } if (_isLimited(from, to)) { if (!tradingStarted) { revert TradingNotActive("Trading not enabled!"); } } if (sell) { if (!inSwap) { if (swapAndLiquifyEnabled) { if ( balanceOf(address(this)) >= swapThreshold && (_tokensForLiquidity + _tokensForMarketing) >= swapThreshold ) { swapAndLiquify(swapThreshold); } } } } return finalizeTransfer(from, to, amount, buy, sell, other); } /** * @dev Internal function, called during a transfer, to check wether liquidity has been added. * @param from The address which you want to send tokens from. * @param to The address which you want to transfer to. */ function _checkLiquidityAdd(address from, address to) internal { require(!_hasLiqBeenAdded, "Liquidity already added and marked."); if (!_isLimited(from, to) && to == lpPair) { _liquidityProviders[from] = true; _isExcludedFromFees[from] = true; _hasLiqBeenAdded = true; } } /** * @dev Internal function, called during a transfer, to check wether the sender or the recipient is limited. * @param from The address which you want to send tokens from. * @param to The address which you want to transfer to. */ function _isLimited(address from, address to) internal view returns (bool) { return from != owner() && to != owner() && tx.origin != owner() && !_liquidityProviders[to] && !_liquidityProviders[from] && to != DEAD && to != address(0) && !isPresaler[from] && !isPresaler[to] && from != address(this); } /** * @dev Internal function, called during a sell transaction to activate a contract swap if the swapThreshold has been reached. * @param tokensToSwap amount of tokens to be swapped * emits SwapAndLiquify event */ function swapAndLiquify(uint256 tokensToSwap) internal inSwapFlag { uint256 totalTokens = _tokensForLiquidity + _tokensForMarketing; if (tokensToSwap == 0 || totalTokens == 0) { return; } // portion of _tokensForLiquidity that must be paired up with eth uint256 amountToLiquify = ((tokensToSwap * _tokensForLiquidity) / totalTokens) / 2; //portion of tokens that must be swapped for eth uint256 amountToSwapForETH = tokensToSwap - amountToLiquify; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapRouter.WETH(); uint256 beforeContractBalance = address(this).balance; try uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwapForETH, 0, path, address(this), block.timestamp ) {} catch { return; } bool success; // subtract eth previously present in the contract uint256 amtBalance = address(this).balance - beforeContractBalance; // calculate eth for marketing and liquidity uint256 marketingBalance = (amtBalance * _tokensForMarketing) / totalTokens; uint256 liquidityBalance = (amtBalance * _tokensForLiquidity) / totalTokens; // decreate the amount of tokens for liquidity and marketing based on the sold amount _tokensForLiquidity -= (tokensToSwap * _tokensForLiquidity) / totalTokens; _tokensForMarketing -= (tokensToSwap * _tokensForMarketing) / totalTokens; if (liquidityBalance > 0) { try uniswapRouter.addLiquidityETH{value: liquidityBalance}( address(this), amountToLiquify, 0, 0, owner(), block.timestamp ) { emit AutoLiquidityAdd(amountToLiquify, liquidityBalance); } catch {} } if ( _FeeReceivers.marketing == address(0) || _FeeReceivers.marketing == DEAD || _FeeReceivers.staking == address(0) || _FeeReceivers.staking == DEAD ) { revert(); } if (address(this).balance > 0) { (success, ) = _FeeReceivers.marketing.call{ value: address(this).balance, gas: 35000 }(""); } emit SwapAndLiquify(tokensToSwap, liquidityBalance, marketingBalance); } /** * @dev Internal function, called to approve an address to spend tokens on behalf of the sender. * emits Approval event */ function _approve( address sender, address spender, uint256 amount ) internal { require(sender != address(0), "ERC20: Zero Address"); require(spender != address(0), "ERC20: Zero Address"); _allowances[sender][spender] = amount; emit Approval(sender, spender, amount); } /** * @dev Internal function, called during a transfer, to update the amount of reflections owned by each address and finalize the transfer. * @param from The address which you want to send tokens from. * @param to The address which you want to transfer to. * @param tAmount The amount of tokens to be transferred. * @param buy Boolean to check if the transaction is a buy. * @param sell Boolean to check if the transaction is a sell. * @param other Boolean to check if the transaction is a wallet-to-wallet transfer. * emits Transfer event */ function finalizeTransfer( address from, address to, uint256 tAmount, bool buy, bool sell, bool other ) internal returns (bool) { bool takeFee = true; if ( _isExcludedFromFees[from] || _isExcludedFromFees[to] || other == true ) { takeFee = false; } ExtraValues memory values = takeTaxes( from, tAmount, takeFee, buy, sell ); _rOwned[from] -= values.rAmount; _rOwned[to] += values.rTransferAmount; if (_isExcludedFromRewards[from]) { _tOwned[from] = _tOwned[from] - tAmount; } if (_isExcludedFromRewards[to]) { _tOwned[to] = _tOwned[to] + values.tTransferAmount; } if (values.rFee > 0 || values.tFee > 0) { _rTotal -= values.rFee; } emit Transfer(from, to, values.tTransferAmount); if (!_hasLiqBeenAdded) { _checkLiquidityAdd(from, to); if (!_hasLiqBeenAdded && _isLimited(from, to) && !other) { revert TradingNotActive("Pre-liquidity transfer protection."); } } return true; } /** * @dev Internal function, called during a transfer, to calculate the amount of tokens to be transferred, and the amount of tokens to be taxed. * @param from The address which you want to send tokens from. * @param tAmount The amount of tokens to be transferred. * @param takeFee Boolean to check if the transaction is a wallet-to-wallet transfer. * @param buy Boolean to check if the transaction is a buy. * @param sell Boolean to check if the transaction is a sell. * @return values Struct containing the amount of tokens to be transferred, * the amount of tokens to be taxed, * the amount of reflections to be transferred, * the amount of reflections to be taxed, * the current rate, * and the amount of reflections to be added to the total supply. * emits Transfer event */ function takeTaxes( address from, uint256 tAmount, bool takeFee, bool buy, bool sell ) internal returns (ExtraValues memory) { ExtraValues memory values; Fees memory fees = _taxRates; values.currentRate = _getRate(); values.rAmount = tAmount * values.currentRate; if (takeFee) { uint256 feeAmount; if (buy && fees.buyTotalFee > 0) { if (launchedAt + deadBlocks >= block.number) { // antiSnipe fee : 99% if sniped in the first deadBlocks feeAmount = (tAmount * 99) / 100; } else { feeAmount = (tAmount * fees.buyTotalFee) / taxDivisor; } // track the number tokens collected in the contract _tokensForLiquidity += (feeAmount * fees.liquidityBuy) / fees.buyTotalFee; _tokensForMarketing += (feeAmount * fees.marketingBuy) / fees.buyTotalFee; _tokensForStaking += (feeAmount * fees.stakingBuy) / fees.buyTotalFee; values.tFee = (feeAmount * fees.reflectionBuy) / fees.buyTotalFee; } else if (sell && fees.sellTotalFee > 0) { feeAmount = (tAmount * fees.sellTotalFee) / taxDivisor; values.tFee = (feeAmount * fees.reflectionSell) / fees.sellTotalFee; // track the number tokens collected in the contract _tokensForLiquidity += (feeAmount * fees.liquiditySell) / fees.sellTotalFee; _tokensForMarketing += (feeAmount * fees.marketingSell) / fees.sellTotalFee; _tokensForStaking += (feeAmount * fees.stakingSell) / fees.sellTotalFee; } values.tSwap = feeAmount - values.tFee; // if zero tax tTransfer = tAmount values.tTransferAmount = tAmount - (values.tFee + values.tSwap); values.rFee = values.tFee * values.currentRate; } else { values.tTransferAmount = tAmount; } if (values.tSwap > 0) { _rOwned[address(this)] += values.tSwap * values.currentRate; if (_isExcludedFromRewards[address(this)]) { _tOwned[address(this)] += values.tSwap; } emit Transfer(from, address(this), values.tSwap); } values.rTransferAmount = values.rAmount - (values.rFee + (values.tSwap * values.currentRate)); return values; } /** * @dev Internal function returns the current rate of reflections to total tokens supply. */ function _getRate() internal view returns (uint256) { uint256 rTotal = _rTotal; uint256 tTotal = _tTotal; uint256 rSupply = rTotal; uint256 tSupply = tTotal; if (_isExcludedFromRewards[lpPair]) { // Get the reflection and token amounts of the lpPair uint256 rLPOwned = _rOwned[lpPair]; uint256 tLPOwned = _tOwned[lpPair]; if (rLPOwned > rSupply || tLPOwned > tSupply) return rTotal / tTotal; rSupply -= rLPOwned; tSupply -= tLPOwned; } if (_excluded.length > 0) { for (uint8 i = 0; i < _excluded.length; i++) { uint256 rOwned = _rOwned[_excluded[i]]; uint256 tOwned = _tOwned[_excluded[i]]; if (rOwned > rSupply || tOwned > tSupply) return rTotal / tTotal; rSupply = rSupply - rOwned; tSupply = tSupply - tOwned; } } if (rSupply < rTotal / tTotal) return rTotal / tTotal; return rSupply / tSupply; } ////////////////////////// external functions ////////////////////////// /** * @dev Start trading if liquidity has been already added. * @notice This function can only be called by the contract owner, once. */ function startTrading(uint256 _deadBlocks) external onlyOwner { if (tradingStarted) revert StartTradingError("Trading already enabled!"); if (!_hasLiqBeenAdded) revert StartTradingError("Liquidity must be added."); if (_deadBlocks < 5) { deadBlocks = _deadBlocks; } else { revert StartTradingError("Dead blocks must be less than 5."); } swapAndLiquifyEnabled = true; tradingStarted = true; swapThreshold = (balanceOf(lpPair) * 10) / 1000; launchedAt = block.number; allowPresaleExclusion = false; emit TradingStarted(tradingStarted); } /** * @dev Transfer tokens stucked inside the contract to the marketing wallet. * @param amount : amount of tokens being transfered from the contract * @param token: contract of the token being transfered from the contract */ function sweepTokens(uint256 amount, address token) external onlyOwner { IERC20 tokenContract = IERC20(token); if ( _FeeReceivers.marketing == address(0) || _FeeReceivers.marketing == DEAD ) revert(); if (tokenContract.balanceOf(address(this)) < amount) revert(); // if transfering MFC tokens if (token == address(this)) { uint256 contractTokens = _tokensForLiquidity + _tokensForMarketing + _tokensForStaking; if (balanceOf(address(this)) > contractTokens) { tokenContract.transfer( _FeeReceivers.marketing, balanceOf(address(this)) - contractTokens ); } } else { tokenContract.transfer(_FeeReceivers.marketing, amount); } } /** * @dev Transfer ETH stucked inside the contract to the marketing wallet. */ function sweep() external onlyOwner { uint256 balance = address(this).balance; if ( _FeeReceivers.marketing == address(0) || _FeeReceivers.marketing == DEAD ) revert(); _FeeReceivers.marketing.transfer(balance); } ////////////////////////// external setters ////////////////////////// /** * @dev Set the new uniswap router address. * @notice This function can only be called by the contract owner. * @param newRouter The address of the new uniswap router. */ function setNewRouter(address newRouter) external onlyOwner { IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter); address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair( address(this), _newRouter.WETH() ); if (get_pair == address(0)) { lpPair = IUniswapV2Factory(_newRouter.factory()).createPair( address(this), _newRouter.WETH() ); } else { lpPair = get_pair; } uniswapRouter = _newRouter; _approve(address(this), address(uniswapRouter), type(uint256).max); } /** * @dev Set a new Liquidity pool Pair * @notice This function can only be called by the contract owner. * @param pair The address of the new pair. * @param enabled True if the pair is enabled, false otherwise. * emits LpPairsUpdated. */ function setLpPair(address pair, bool enabled) external onlyOwner { lpPairs[pair] = enabled; emit LpPairsUpdated(pair, enabled); } /** * @dev Set the fee exclusion for an holder. * @notice This function can only be called by the contract owner. * @param account The address of the holder. * @param enabled True if the holder is excluded, false otherwise. * emits ExcludedFromFeesUpdated. */ function setExcludedFromFees(address account, bool enabled) external onlyOwner { _isExcludedFromFees[account] = enabled; emit ExcludedFromFeesUpdated(account, enabled); } /** * @dev Set the max wallets and max transaciton limits. * @notice This function can only be called by the contract owner. * @param maxBuy The max buy limit divisor. * @param maxSell The max sell limit divisor. * @param maxWallet The max wallet limit divisor. * emits LimitsUpdated. */ function setLimits( uint16 maxBuy, uint16 maxSell, uint16 maxWallet ) external onlyOwner { if ( maxSell > 200 || maxSell < 100 || maxBuy > 200 || maxBuy < 50 || maxWallet > 200 || maxWallet < 50 ) revert InvalidLimitsSettings( "Cannot exceed 2% or be lower than 0.5%" ); limits.buyLimit = maxBuy; limits.sellLimit = maxSell; limits.maxWallet = maxWallet; emit LimitsUpdated(maxBuy, maxSell, maxWallet); } /** * @dev Set the presale address * @notice This function can only be called by the contract owner. * @param presale The address of the presale contract. * emit PresaleSet. */ function setPresale(address presale) external onlyOwner { if (!allowPresaleExclusion) { revert(); } _liquidityProviders[presale] = true; isPresaler[presale] = true; _isExcludedFromFees[presale] = true; _isExcludedFromLimits[presale] = true; setExcludedFromReward(presale, true); isPresaler[address(uniswapRouter)] = true; setExcludedFromReward(address(uniswapRouter), true); emit PresaleSet(presale); } /** * @dev exclude a wallet from max wallet limits * @notice This function can only be called by the contract owner. * @param account The address of the wallet. * @param isExcluded True if the wallet is excluded, false otherwise. * emits ExcludedFromLimitsUpdated. */ function excludeFromLimits(address account, bool isExcluded) external onlyOwner { _isExcludedFromLimits[account] = isExcluded; emit ExcludedFromLimitsUpdated(account, isExcluded); } /** * @dev Set the fees for buy and sell transactions. * @notice This function can only be called by the contract owner. * @param reflectionBuy The reflection fee for buy transactions. * @param liquidityBuy The liquidity fee for buy transactions. * @param stakingBuy The staking fee for buy transactions. * @param marketingBuy The marketing fee for buy transactions. * @param reflectionSell The reflection fee for sell transactions. * @param liquiditySell The liquidity fee for sell transactions. * @param stakingSell The staking fee for sell transactions. * @param marketingSell The marketing fee for sell transactions. * emits TaxesUpdated event. */ function setFees( uint16 reflectionBuy, uint16 liquidityBuy, uint16 stakingBuy, uint16 marketingBuy, uint16 reflectionSell, uint16 liquiditySell, uint16 stakingSell, uint16 marketingSell ) external onlyOwner { _taxRates.reflectionBuy = reflectionBuy; _taxRates.marketingBuy = marketingBuy; _taxRates.liquidityBuy = liquidityBuy; _taxRates.stakingBuy = stakingBuy; _taxRates.reflectionSell = reflectionSell; _taxRates.marketingSell = marketingSell; _taxRates.liquiditySell = liquiditySell; _taxRates.stakingSell = stakingSell; _taxRates.buyTotalFee = liquidityBuy + marketingBuy + stakingBuy; _taxRates.sellTotalFee = liquiditySell + marketingSell + stakingSell; if (_taxRates.buyTotalFee > 80 || _taxRates.sellTotalFee > 80) revert InvalidFeesSettings("Fees cannot exceed 8%."); emit TaxesUpdated( _taxRates.buyTotalFee, _taxRates.sellTotalFee, reflectionBuy, liquidityBuy, stakingBuy, marketingBuy, reflectionSell, liquiditySell, stakingSell, marketingSell ); } /** * @dev Set the fee receivers. * @dev The marketing and staking addresses cannot be the zero address. * @notice This function can only be called by the contract owner. * @param marketing The address of the marketing wallet. * @param staking The address of the staking wallet. * emits FeeReceiversUpdated event. */ function setFeeReceivers(address payable marketing, address payable staking) external onlyOwner { if ( marketing == address(0) || staking == address(0) || marketing == DEAD || staking == DEAD ) revert InvalidFeeReceivers("Fee receivers cannot be zero address."); _FeeReceivers.marketing = payable(marketing); _FeeReceivers.staking = payable(staking); emit FeeReceiversUpdated(marketing, staking); } /** * @dev Set the contract swap settings. * @notice This function can only be called by the contract owner. * @param _swapAndLiquifyEnabled True if the contract is allowed to swap and add liquidity, false otherwise. * @param thresholdPercent The percentage of the total supply that triggers the swap. * @param thresholdDivisor The divisor of the total supply that triggers the swap. * emits ContractSwapSettingsUpdated event. */ function setContractSwapSettings( bool _swapAndLiquifyEnabled, uint256 thresholdPercent, uint256 thresholdDivisor ) external onlyOwner { swapAndLiquifyEnabled = _swapAndLiquifyEnabled; if (_swapAndLiquifyEnabled) { swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor; if ( swapThreshold < _tTotal / 100_000 || swapThreshold > _tTotal / 100 ) revert InvalidContractSwapSettings( "SwapThreshold must be between 0.0001% and 1% of total supply." ); } emit ContractSwapSettingsUpdated(_swapAndLiquifyEnabled, swapThreshold); } /** * @dev Set the reward exclusion for an holder. * @notice This function can only be called by the contract owner. * @param account The address of the holder. * @param enabled True if the holder is excluded, false otherwise. */ function setExcludedFromReward(address account, bool enabled) public onlyOwner { if (enabled) { require( !_isExcludedFromRewards[account], "Account is already excluded." ); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcludedFromRewards[account] = true; if (account != lpPair) { _excluded.push(account); } } else if (!enabled) { require( _isExcludedFromRewards[account], "Account is already included." ); if (account == lpPair) { _rOwned[account] = _tOwned[account] * _getRate(); _tOwned[account] = 0; _isExcludedFromRewards[account] = false; } else if (_excluded.length == 1) { _rOwned[account] = _tOwned[account] * _getRate(); _tOwned[account] = 0; _isExcludedFromRewards[account] = false; _excluded.pop(); } else { for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _rOwned[account] = _tOwned[account] * _getRate(); _tOwned[account] = 0; _isExcludedFromRewards[account] = false; _excluded.pop(); break; } } } } emit ExcludedFromRewardUpdated(account, enabled); } /** * @dev Distribute the tokens collected from fees to the nft staking pool. * @notice This function can only be called by the contract owner. */ function sendNFTStakingRewards() external onlyOwner { if ( _FeeReceivers.staking == address(0) || _FeeReceivers.staking == DEAD ) revert(); if ( _tokensForStaking > 0 && _tokensForStaking <= balanceOf(address(this)) ) { bool success = _transfer( address(this), _FeeReceivers.staking, _tokensForStaking ); if (success) _tokensForStaking = 0; emit TokensSentToNFTStaking( _FeeReceivers.staking, _tokensForStaking ); } } ////////////////////////////////// External getters /////////////////////////////////////// /** * @dev Check whether the holder is excluded from rewards. * @param account The holder address. */ function isExcludedFromReward(address account) external view returns (bool) { return _isExcludedFromRewards[account]; } /** * @dev Check whether the holder is excluded from free. * @param account The holder address. */ function isExcludedFromFees(address account) external view returns (bool) { return _isExcludedFromFees[account]; } /** * @dev Check whether the holder is excluded from limits. * @param account The holder address. */ function isExcludedFromLimits(address account) external view returns (bool) { return _isExcludedFromLimits[account]; } /** * @dev Returns the maximum amount of tokens that can be bought, sold or held by a wallet. */ function getLimits() external view returns ( uint256 maxBuy, uint256 maxSell, uint256 maxWallet ) { return ( _tTotal / limits.buyLimit, _tTotal / limits.sellLimit, _tTotal / limits.maxWallet ); } /** * @dev Returns if the fees struct. */ function getFees() external view returns (Fees memory) { return _taxRates; } /** * @dev Returns the amount of contarct tokens allocated to liquidity, marketing, staking */ function getContractTokens() external view returns ( uint256 tokensForLiqudity, uint256 tokensForMarketing, uint256 tokensForStaking, uint256 totalTokens ) { return ( _tokensForLiquidity, _tokensForMarketing, _tokensForStaking, _tokensForLiquidity + _tokensForMarketing + _tokensForStaking ); } ////////////////////////// public functions ////////////////////////// /** * @dev Returns the total circulating supply. */ function getCirculatingSupply() public view returns (uint256) { return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0)))); } /** * @dev Returns the amount token plus the reflection collected. * @param rAmount The holder balance */ function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount / currentRate; } ///////////////////////////////// ERC20 utility functions ///////////////////////////////// /** * @dev Returns the token total supply. */ function totalSupply() external pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; } /** * @dev Returns the token number of decimals. */ function decimals() external pure override returns (uint8) { if (_tTotal == 0) { revert(); } return _decimals; } /** * @dev Returns the token symbol. */ function symbol() external pure override returns (string memory) { return _symbol; } /** * @dev Returns the token name. */ function name() external pure override returns (string memory) { return _name; } /** * @dev Returns the allowance of the spender for the holder. * @param holder The address of the holder. * @param spender The address of the spender. */ function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } /** * @dev Returns the token balance of the holder. * @param account The address of the holder. */ function balanceOf(address account) public view override returns (uint256) { if (_isExcludedFromRewards[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// 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; } }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"string","name":"error","type":"string"}],"name":"InvalidContractSwapSettings","type":"error"},{"inputs":[{"internalType":"string","name":"error","type":"string"}],"name":"InvalidFeeReceivers","type":"error"},{"inputs":[{"internalType":"string","name":"error","type":"string"}],"name":"InvalidFeesSettings","type":"error"},{"inputs":[{"internalType":"string","name":"error","type":"string"}],"name":"InvalidLimitsSettings","type":"error"},{"inputs":[{"internalType":"string","name":"error","type":"string"}],"name":"InvalidRatioSettings","type":"error"},{"inputs":[{"internalType":"string","name":"error","type":"string"}],"name":"MaxTxExceeded","type":"error"},{"inputs":[{"internalType":"string","name":"error","type":"string"}],"name":"MaxWalletExceeded","type":"error"},{"inputs":[{"internalType":"string","name":"error","type":"string"}],"name":"StartTradingError","type":"error"},{"inputs":[{"internalType":"string","name":"error","type":"string"}],"name":"TradingNotActive","type":"error"},{"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":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currencyAmount","type":"uint256"}],"name":"AutoLiquidityAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapThreshold","type":"uint256"}],"name":"ContractSwapSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromLimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromRewardUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address payable","name":"marketing","type":"address"},{"indexed":false,"internalType":"address payable","name":"staking","type":"address"}],"name":"FeeReceiversUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"buyLimit","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"sellLimit","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"maxWallet","type":"uint16"}],"name":"LimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lpPair","type":"address"},{"indexed":false,"internalType":"bool","name":"isLpPair","type":"bool"}],"name":"LpPairsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"presale","type":"address"}],"name":"PresaleSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingBalance","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"buyTotalFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"sellTotalFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"reflectionBuy","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"marketingBuy","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"liquidityBuy","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"stakingBuy","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"reflectionSell","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"marketingSell","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"liquiditySell","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"stakingSell","type":"uint16"}],"name":"TaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nftStakingPool","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensSentToNFTStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"tradingStarted","type":"bool"}],"name":"TradingStarted","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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_FeeReceivers","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"staking","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyTotalFee","type":"uint16"},{"internalType":"uint16","name":"sellTotalFee","type":"uint16"},{"internalType":"uint16","name":"reflectionBuy","type":"uint16"},{"internalType":"uint16","name":"marketingBuy","type":"uint16"},{"internalType":"uint16","name":"liquidityBuy","type":"uint16"},{"internalType":"uint16","name":"stakingBuy","type":"uint16"},{"internalType":"uint16","name":"reflectionSell","type":"uint16"},{"internalType":"uint16","name":"marketingSell","type":"uint16"},{"internalType":"uint16","name":"liquiditySell","type":"uint16"},{"internalType":"uint16","name":"stakingSell","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowPresaleExclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractTokens","outputs":[{"internalType":"uint256","name":"tokensForLiqudity","type":"uint256"},{"internalType":"uint256","name":"tokensForMarketing","type":"uint256"},{"internalType":"uint256","name":"tokensForStaking","type":"uint256"},{"internalType":"uint256","name":"totalTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"components":[{"internalType":"uint16","name":"buyTotalFee","type":"uint16"},{"internalType":"uint16","name":"sellTotalFee","type":"uint16"},{"internalType":"uint16","name":"reflectionBuy","type":"uint16"},{"internalType":"uint16","name":"marketingBuy","type":"uint16"},{"internalType":"uint16","name":"liquidityBuy","type":"uint16"},{"internalType":"uint16","name":"stakingBuy","type":"uint16"},{"internalType":"uint16","name":"reflectionSell","type":"uint16"},{"internalType":"uint16","name":"marketingSell","type":"uint16"},{"internalType":"uint16","name":"liquiditySell","type":"uint16"},{"internalType":"uint16","name":"stakingSell","type":"uint16"}],"internalType":"struct MarshallFightingChampionship.Fees","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limits","outputs":[{"internalType":"uint16","name":"buyLimit","type":"uint16"},{"internalType":"uint16","name":"sellLimit","type":"uint16"},{"internalType":"uint16","name":"maxWallet","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendNFTStakingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapAndLiquifyEnabled","type":"bool"},{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"setContractSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"staking","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflectionBuy","type":"uint16"},{"internalType":"uint16","name":"liquidityBuy","type":"uint16"},{"internalType":"uint16","name":"stakingBuy","type":"uint16"},{"internalType":"uint16","name":"marketingBuy","type":"uint16"},{"internalType":"uint16","name":"reflectionSell","type":"uint16"},{"internalType":"uint16","name":"liquiditySell","type":"uint16"},{"internalType":"uint16","name":"stakingSell","type":"uint16"},{"internalType":"uint16","name":"marketingSell","type":"uint16"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxBuy","type":"uint16"},{"internalType":"uint16","name":"maxSell","type":"uint16"},{"internalType":"uint16","name":"maxWallet","type":"uint16"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presale","type":"address"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"sweepTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126012600a620007e3565b6200002290633b9aca00620007fb565b620000309060001962000815565b6200003e9060001962000838565b6003556013805464ffffffff0019166401000000001790556040805161014081018252603c808252602080830191909152600a828401819052601e60608085018290526080850183905260a0850183905260c0850183905260e085019190915261010084018290526101209093015260148054720a000a001e000a000a000a001e000a003c003c6001600160a01b0319918216179091558351808501855261dead80825290830181905260158054831682179055601680549092161790558251918201835260328083526064918301919091529101526017805464320064003265ffffffffffff1990911617905562000137336200057d565b600354600a6000620001516000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556200017e6000546001600160a01b031690565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001b86012600a620007e3565b620001c890633b9aca00620007fb565b60405190815260200160405180910390a360138054787a250d5630b4cf539739df2c5dacb4c659f2488d0000000000600160281b600160c81b031990911617908190556040805163c45a015560e01b81529051650100000000009092046001600160a01b03169163c45a0155916004808201926020929091908290030181865afa1580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028191906200084e565b6001600160a01b031663c9c65396601360059054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030991906200084e565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000356573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037c91906200084e565b600280546001600160a01b0319166001600160a01b039283169081179091556000908152600c60205260408120805460ff1916600117905554620003d991166013546501000000000090046001600160a01b0316600019620005cd565b306000908152600d602090815260408083206013546501000000000090046001600160a01b0316845290915281206000199055600190600f90620004256000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600f909252812080548316600190811790915561dead82527f99629f56119585bf27511b6b7d295dffb54757453fcc3dabcf51d92028301f1080549093168117909255601190620004ad6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260119093528183208054851660019081179091557f97847ee99463795296047093514439c3127772df3715e628aa85601cf85417168054861682179055601354650100000000009004909116835290822080549093168117909255600e906200054f6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000879565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166200061f5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200066d5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000616565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000725578160001904821115620007095762000709620006ce565b808516156200071757918102915b93841c9390800290620006e9565b509250929050565b6000826200073e57506001620007dd565b816200074d57506000620007dd565b8160018114620007665760028114620007715762000791565b6001915050620007dd565b60ff841115620007855762000785620006ce565b50506001821b620007dd565b5060208310610133831016604e8410600b8410161715620007b6575081810a620007dd565b620007c28383620006e4565b8060001904821115620007d957620007d9620006ce565b0290505b92915050565b6000620007f460ff8416836200072d565b9392505050565b8082028115828204841417620007dd57620007dd620006ce565b6000826200083357634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620007dd57620007dd620006ce565b6000602082840312156200086157600080fd5b81516001600160a01b0381168114620007f457600080fd5b6140f280620008896000396000f3fe6080604052600436106102975760003560e01c80636d651d2c1161015a578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e14610a41578063e10b9db714610a87578063eafb5a3c14610aa7578063f2fde38b14610ac7578063f562c60014610ae7578063fabb0b4f14610b0757600080fd5b8063a9059cbb1461088c578063bf56b371146108ac578063c0a904a2146108c2578063c3ffb884146108e2578063d5fcc7b614610917578063db8d55f11461093757600080fd5b8063860aefcf11610113578063860aefcf1461077457806388f82020146107c95780638da5cb5b1461080257806395d89b41146108205780639f5bf4251461084c578063a4b45c001461086c57600080fd5b80636d651d2c146106815780636f89e409146106c857806370a08231146106f8578063715018a614610718578063735de9f71461072d57806380c581d11461075457600080fd5b80632d838119116101fe5780634fbee193116101b75780634fbee1931461059957806350a8e016146105d257806354370d26146105f3578063590ffdce146106085780635b4f472a146106285780635cce86cd1461064857600080fd5b80632d838119146104de578063313ce567146104fe57806335faa41614610525578063452ed4f11461053a57806346a96b201461055a5780634a74bb021461057a57600080fd5b80630cfc15f9116102505780630cfc15f9146104265780630f4f10131461045357806313e461921461047457806318160ddd1461049457806323b872dd146104a95780632b112e49146104c957600080fd5b806303fd2a45146102a35780630445b667146102d6578063069d955f146102fa57806306a1409f1461038557806306fdde03146103a7578063095ea7b3146103f657600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102e257600080fd5b506102ec60045481565b6040519081526020016102cd565b34801561030657600080fd5b5060145461036f9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b8104821691600160601b8204811691600160701b8104821691600160801b8204811691600160901b9004168a565b6040516102cd9a999897969594939291906139f2565b34801561039157600080fd5b506103a56103a0366004613a48565b610b1d565b005b3480156103b357600080fd5b5060408051808201909152601e81527f4d61727368616c6c204669676874696e67204368616d70696f6e73686970000060208201525b6040516102cd9190613a61565b34801561040257600080fd5b50610416610411366004613ac4565b610cd8565b60405190151581526020016102cd565b34801561043257600080fd5b506102ec610441366004613af0565b600a6020526000908152604090205481565b34801561045f57600080fd5b5060135461041690600160201b900460ff1681565b34801561048057600080fd5b506103a561048f366004613b1b565b610cef565b3480156104a057600080fd5b506102ec61117d565b3480156104b557600080fd5b506104166104c4366004613b54565b6111c4565b3480156104d557600080fd5b506102ec61123c565b3480156104ea57600080fd5b506102ec6104f9366004613a48565b611281565b34801561050a57600080fd5b50610513611305565b60405160ff90911681526020016102cd565b34801561053157600080fd5b506103a5611333565b34801561054657600080fd5b506002546102b9906001600160a01b031681565b34801561056657600080fd5b506103a5610575366004613bac565b6113a9565b34801561058657600080fd5b5060135461041690610100900460ff1681565b3480156105a557600080fd5b506104166105b4366004613af0565b6001600160a01b03166000908152600f602052604090205460ff1690565b3480156105de57600080fd5b50601354610416906301000000900460ff1681565b3480156105ff57600080fd5b506103a56114e4565b34801561061457600080fd5b506103a5610623366004613b1b565b6115b0565b34801561063457600080fd5b506013546104169062010000900460ff1681565b34801561065457600080fd5b50610416610663366004613af0565b6001600160a01b031660009081526011602052604090205460ff1690565b34801561068d57600080fd5b506015546016546106a8916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016102cd565b3480156106d457600080fd5b506106dd611614565b604080519384526020840192909252908201526060016102cd565b34801561070457600080fd5b506102ec610713366004613af0565b6116b4565b34801561072457600080fd5b506103a5611713565b34801561073957600080fd5b506013546102b990600160281b90046001600160a01b031681565b34801561076057600080fd5b506103a561076f366004613b1b565b611725565b34801561078057600080fd5b506017546107a49061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060016102cd565b3480156107d557600080fd5b506104166107e4366004613af0565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561080e57600080fd5b506000546001600160a01b03166102b9565b34801561082c57600080fd5b506040805180820190915260038152624d464360e81b60208201526103e9565b34801561085857600080fd5b506103a5610867366004613bef565b611789565b34801561087857600080fd5b506103a5610887366004613c14565b611994565b34801561089857600080fd5b506104166108a7366004613ac4565b611aa6565b3480156108b857600080fd5b506102ec60055481565b3480156108ce57600080fd5b506103a56108dd366004613b1b565b611abd565b3480156108ee57600080fd5b506108f7611b21565b6040805194855260208501939093529183015260608201526080016102cd565b34801561092357600080fd5b506103a5610932366004613af0565b611b5b565b34801561094357600080fd5b50610a346040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915250604080516101408101825260145461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b8104831660a0830152600160601b8104831660c0830152600160701b8104831660e0830152600160801b81048316610100830152600160901b900490911661012082015290565b6040516102cd9190613c42565b348015610a4d57600080fd5b506102ec610a5c366004613c14565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b348015610a9357600080fd5b506103a5610aa2366004613d10565b611c58565b348015610ab357600080fd5b506103a5610ac2366004613af0565b611dbe565b348015610ad357600080fd5b506103a5610ae2366004613af0565b6120e3565b348015610af357600080fd5b506103a5610b02366004613d45565b61215c565b348015610b1357600080fd5b506102ec60065481565b610b2561238f565b60135462010000900460ff1615610b84576040516329ce02f160e01b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c656421000000000000000060448201526064015b60405180910390fd5b6013546301000000900460ff16610bde576040516329ce02f160e01b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b7b565b6005811015610bf1576006819055610c3a565b6040516329ce02f160e01b815260206004820181905260248201527f4465616420626c6f636b73206d757374206265206c657373207468616e20352e6044820152606401610b7b565b6013805462ffff001916620101001790556002546103e890610c64906001600160a01b03166116b4565b610c6f90600a613df2565b610c799190613e09565b600455436005556013805464ff000000001916908190556040517ff789dd0d6d54bc0d9b7a5955aac4c052f81fb39e63f533a8d4820f6e862c78a391610ccd916201000090910460ff161515815260200190565b60405180910390a150565b6000610ce53384846123e9565b5060015b92915050565b610cf761238f565b8015610e3f576001600160a01b03821660009081526010602052604090205460ff1615610d665760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b7b565b6001600160a01b0382166000908152600a602052604090205415610dc0576001600160a01b0382166000908152600a6020526040902054610da690611281565b6001600160a01b0383166000908152600b60205260409020555b6001600160a01b038083166000818152601060205260409020805460ff1916600117905560025490911614610e3a576001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b611135565b80611135576001600160a01b03821660009081526010602052604090205460ff16610eac5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b7b565b6002546001600160a01b0390811690831603610f2857610eca6124e2565b6001600160a01b0383166000908152600b6020526040902054610eed9190613df2565b6001600160a01b0383166000908152600a6020908152604080832093909355600b81528282208290556010905220805460ff19169055611135565b600180549003610fcb57610f3a6124e2565b6001600160a01b0383166000908152600b6020526040902054610f5d9190613df2565b6001600160a01b0383166000908152600a6020908152604080832093909355600b81528282208290556010905220805460ff191690556001805480610fa457610fa4613e2b565b600082815260209020810160001990810180546001600160a01b0319169055019055611135565b60005b60015481101561113357826001600160a01b031660018281548110610ff557610ff5613e41565b6000918252602090912001546001600160a01b031603611121576001805461101e908290613e57565b8154811061102e5761102e613e41565b600091825260209091200154600180546001600160a01b03909216918390811061105a5761105a613e41565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506110906124e2565b6001600160a01b0384166000908152600b60205260409020546110b39190613df2565b6001600160a01b0384166000908152600a6020908152604080832093909355600b81528282208290556010905220805460ff1916905560018054806110fa576110fa613e2b565b600082815260209020810160001990810180546001600160a01b0319169055019055611133565b8061112b81613e6a565b915050610fce565b505b604080516001600160a01b038416815282151560208201527f0dc781e42e059225a276eb2acec6114dc6b8806a2fb68f4780326c2dcd1aec7391015b60405180910390a15050565b600061118b6012600a613f67565b61119990633b9aca00613df2565b6000036111a557600080fd5b6111b16012600a613f67565b6111bf90633b9aca00613df2565b905090565b6001600160a01b0383166000908152600d6020908152604080832033845290915281205460001914611229576001600160a01b0384166000908152600d6020908152604080832033845290915281208054849290611223908490613e57565b90915550505b6112348484846126bb565b949350505050565b600061124860006116b4565b61125361dead6116b4565b61125d9190613f76565b6112696012600a613f67565b61127790633b9aca00613df2565b6111bf9190613e57565b60006003548211156112e85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b7b565b60006112f26124e2565b90506112fe8184613e09565b9392505050565b60006113136012600a613f67565b61132190633b9aca00613df2565b60000361132d57600080fd5b50601290565b61133b61238f565b60155447906001600160a01b0316158061136157506015546001600160a01b031661dead145b1561136b57600080fd5b6015546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156113a5573d6000803e3d6000fd5b5050565b6113b161238f565b60c88261ffff1611806113c8575060648261ffff16105b806113d7575060c88361ffff16115b806113e6575060328361ffff16105b806113f5575060c88161ffff16115b80611404575060328161ffff16105b156114615760405163790e0dcb60e11b815260206004820152602660248201527f43616e6e6f7420657863656564203225206f72206265206c6f776572207468616044820152656e20302e352560d01b6064820152608401610b7b565b6017805461ffff838116600160201b810265ffff000000001987841662010000810263ffffffff19909616948a16948517959095171617909355604080519182526020820192909252908101919091527f4c669b5f339f6682739ab8c348d57e146ef3821dec19fb8a6cf7ded998607cd1906060015b60405180910390a1505050565b6114ec61238f565b6016546001600160a01b0316158061151057506016546001600160a01b031661dead145b1561151a57600080fd5b60006009541180156115365750611530306116b4565b60095411155b156115ae576016546009546000916115599130916001600160a01b0316906126bb565b905080156115675760006009555b601654600954604080516001600160a01b03909316835260208301919091527feb2faa2644c3d13ec78e58b18af1129c0112b936f20f9eaaf6513dae2bf0e3559101610ccd565b565b6115b861238f565b6001600160a01b0382166000818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527fe4cbcfb1a60e2c589f335f74c6c57b0be57eb6c50eb56442d8a67735dba70cad9101611171565b6017546000908190819061ffff1661162e6012600a613f67565b61163c90633b9aca00613df2565b6116469190613e09565b60175462010000900461ffff1661165f6012600a613f67565b61166d90633b9aca00613df2565b6116779190613e09565b601754600160201b900461ffff166116916012600a613f67565b61169f90633b9aca00613df2565b6116a99190613e09565b925092509250909192565b6001600160a01b03811660009081526010602052604081205460ff16156116f157506001600160a01b03166000908152600b602052604090205490565b6001600160a01b0382166000908152600a6020526040902054610ce990611281565b61171b61238f565b6115ae6000612b3d565b61172d61238f565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527f9275848620775c1d80b27df21b269b20e3040d2fd33ebf6a514850b17fc949589101611171565b61179161238f565b60155481906001600160a01b031615806117b757506015546001600160a01b031661dead145b156117c157600080fd5b6040516370a0823160e01b815230600482015283906001600160a01b038316906370a0823190602401602060405180830381865afa158015611807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182b9190613f89565b101561183657600080fd5b306001600160a01b0383160361191857600060095460085460075461185b9190613f76565b6118659190613f76565b905080611871306116b4565b1115611912576015546001600160a01b038084169163a9059cbb911683611897306116b4565b6118a19190613e57565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156118ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119109190613fa2565b505b50505050565b60155460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018590529082169063a9059cbb906044016020604051808303816000875af115801561196b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119129190613fa2565b505050565b61199c61238f565b6001600160a01b03821615806119b957506001600160a01b038116155b806119ce57506001600160a01b03821661dead145b806119e357506001600160a01b03811661dead145b15611a3f57604051637d4d5cd760e11b815260206004820152602560248201527f466565207265636569766572732063616e6e6f74206265207a65726f206164646044820152643932b9b99760d91b6064820152608401610b7b565b601580546001600160a01b038481166001600160a01b03199283168117909355601680549185169190921681179091556040805192835260208301919091527f9fba4a27b77afdf6c68deb1d99abfd909cb0c2bfa6a148fae3c6b8414e58aef99101611171565b6000611ab33384846126bb565b5060019392505050565b611ac561238f565b6001600160a01b038216600081815260116020908152604091829020805460ff19168515159081179091558251938452908301527fca5110fa8124e5b4dfaf023291185d46c42971706526a6d3d3c7be7a3322772f9101611171565b600080600080600754600854600954600954600854600754611b439190613f76565b611b4d9190613f76565b935093509350935090919293565b611b6361238f565b601354600160201b900460ff16611b7957600080fd5b6001600160a01b0381166000908152600e602090815260408083208054600160ff199182168117909255601284528285208054821683179055600f8452828520805482168317905560119093529220805490911682179055611bdc908290610cef565b601380546001600160a01b03600160281b9182900481166000908152601260205260409020805460ff191660019081179091559254611c1f939290041690610cef565b6040516001600160a01b03821681527fb18b3dcffb4f0709b15fd073af710076e9afafb9c2bbfb6b1115e0d7cbbae73a90602001610ccd565b611c6061238f565b60138054841580156101000261ff001990921691909117909155611d82578082611c8c6012600a613f67565b611c9a90633b9aca00613df2565b611ca49190613df2565b611cae9190613e09565b600455620186a0611cc16012600a613f67565b611ccf90633b9aca00613df2565b611cd99190613e09565b6004541080611d0e57506064611cf16012600a613f67565b611cff90633b9aca00613df2565b611d099190613e09565b600454115b15611d82576040516328f5666d60e21b815260206004820152603d60248201527f537761705468726573686f6c64206d757374206265206265747765656e20302e60448201527f303030312520616e64203125206f6620746f74616c20737570706c792e0000006064820152608401610b7b565b60045460408051851515815260208101929092527fb0a2a58670abffcc2e4851e058340dd3e013b3b29bf9a1f9adc0fc20078e912e91016114d7565b611dc661238f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2f9190613fbf565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea09190613fbf565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0f9190613fbf565b90506001600160a01b03811661208857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f819190613fbf565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff29190613fbf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561203f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120639190613fbf565b600280546001600160a01b0319166001600160a01b03929092169190911790556120a4565b600280546001600160a01b0319166001600160a01b0383161790555b6013805465010000000000600160c81b031916600160281b6001600160a01b038581168202929092179283905561198f923092919004166000196123e9565b6120eb61238f565b6001600160a01b0381166121505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7b565b61215981612b3d565b50565b61216461238f565b87601460000160046101000a81548161ffff021916908361ffff16021790555084601460000160066101000a81548161ffff021916908361ffff16021790555086601460000160086101000a81548161ffff021916908361ffff160217905550856014600001600a6101000a81548161ffff021916908361ffff160217905550836014600001600c6101000a81548161ffff021916908361ffff160217905550806014600001600e6101000a81548161ffff021916908361ffff16021790555082601460000160106101000a81548161ffff021916908361ffff16021790555081601460000160126101000a81548161ffff021916908361ffff1602179055508585886122719190613fdc565b61227b9190613fdc565b6014805461ffff191661ffff929092169190911790558161229c8285613fdc565b6122a69190613fdc565b6014805461ffff928316620100000263ffff00001982168117909255605091831692169190911711806122e6575060145460506201000090910461ffff16115b1561232d5760405163015bf8a960e61b81526020600482015260166024820152752332b2b99031b0b73737ba1032bc31b2b2b2101c129760511b6044820152606401610b7b565b6014546040517f2dfd00b4306a0e1a0fa38131b25d9de12d8a1780f0e39f4d542e38edd859b9eb9161237d9161ffff8083169262010000900416908c908c908c908c908c908c908c908c906139f2565b60405180910390a15050505050505050565b6000546001600160a01b031633146115ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b7b565b6001600160a01b0383166124355760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b7b565b6001600160a01b0382166124815760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b7b565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600354600090816124f56012600a613f67565b61250390633b9aca00613df2565b6002546001600160a01b03166000908152601060205260409020549091508290829060ff1615612596576002546001600160a01b03166000908152600a6020908152604080832054600b909252909120548382118061256157508281115b1561257b576125708587613e09565b965050505050505090565b6125858285613e57565b93506125918184613e57565b925050505b6001541561268d5760005b60015460ff8216101561268b576000600a600060018460ff16815481106125ca576125ca613e41565b60009182526020808320909101546001600160a01b0316835282019290925260400181205460018054919350600b9183919060ff871690811061260f5761260f613e41565b60009182526020808320909101546001600160a01b0316835282019290925260400190205490508482118061264357508381115b1561265e576126528688613e09565b97505050505050505090565b6126688286613e57565b94506126748185613e57565b93505050808061268390613ffe565b9150506125a1565b505b6126978385613e09565b8210156126b1576126a88385613e09565b94505050505090565b6126a88183613e09565b60006001600160a01b0384166127215760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b7b565b600082116127835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b7b565b6001600160a01b0384166000908152600c60205260408120548190819060ff16156128e1576001600160a01b0386166000908152601160205260409020546001935060ff166128dc5760175461ffff166127df6012600a613f67565b6127ed90633b9aca00613df2565b6127f79190613e09565b85111561284757604051634367bae960e11b815260206004820152601860248201527f4d61782062757920616d6f756e742065786365656465642e00000000000000006044820152606401610b7b565b601754600160201b900461ffff166128616012600a613f67565b61286f90633b9aca00613df2565b6128799190613e09565b85612883886116b4565b61288d9190613f76565b11156128dc57604051632d7fb5f360e01b815260206004820152601b60248201527f4d61782077616c6c657420616d6f756e742065786365656465642e00000000006044820152606401610b7b565b612a6a565b6001600160a01b0386166000908152600c602052604090205460ff16156129ac576001600160a01b0387166000908152601160205260409020546001925060ff1615801561295e575060175462010000900461ffff166129436012600a613f67565b61295190633b9aca00613df2565b61295b9190613e09565b85115b156128dc57604051634367bae960e11b815260206004820152601960248201527f4d61782073656c6c20616d6f756e742065786365656465642e000000000000006044820152606401610b7b565b601754600160201b900461ffff166129c66012600a613f67565b6129d490633b9aca00613df2565b6129de9190613e09565b856129e8886116b4565b6129f29190613f76565b118015612a1857506001600160a01b03861660009081526011602052604090205460ff16155b15612a6657604051632d7fb5f360e01b815260206004820152601b60248201527f4d61782077616c6c657420616d6f756e742065786365656465642e00000000006044820152606401610b7b565b5060015b612a748787612b8d565b15612ac95760135462010000900460ff16612ac95760405163efc80f7560e01b815260206004820152601460248201527354726164696e67206e6f7420656e61626c65642160601b6044820152606401610b7b565b8115612b245760135460ff16612b2457601354610100900460ff1615612b2457600454612af5306116b4565b10158015612b145750600454600854600754612b119190613f76565b10155b15612b2457612b24600454612cab565b612b3287878786868661313e565b979650505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080546001600160a01b03848116911614801590612bba57506000546001600160a01b03838116911614155b8015612bd157506000546001600160a01b03163214155b8015612bf657506001600160a01b0382166000908152600e602052604090205460ff16155b8015612c1b57506001600160a01b0383166000908152600e602052604090205460ff16155b8015612c3257506001600160a01b03821661dead14155b8015612c4657506001600160a01b03821615155b8015612c6b57506001600160a01b03831660009081526012602052604090205460ff16155b8015612c9057506001600160a01b03821660009081526012602052604090205460ff16155b80156112fe57506001600160a01b0383163014159392505050565b6013805460ff19166001179055600854600754600091612cca91613f76565b9050811580612cd7575080155b15612ce25750613131565b600060028260075485612cf59190613df2565b612cff9190613e09565b612d099190613e09565b90506000612d178285613e57565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612d5157612d51613e41565b60200260200101906001600160a01b031690816001600160a01b031681525050601360059054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de89190613fbf565b81600181518110612dfb57612dfb613e41565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b81524792600160281b9092049091169063791ac94790612e4c90869060009087903090429060040161401d565b600060405180830381600087803b158015612e6657600080fd5b505af1925050508015612e77575060015b612e85575050505050613131565b600080612e928347613e57565b905060008760085483612ea59190613df2565b612eaf9190613e09565b905060008860075484612ec29190613df2565b612ecc9190613e09565b9050886007548b612edd9190613df2565b612ee79190613e09565b60076000828254612ef89190613e57565b90915550506008548990612f0c908c613df2565b612f169190613e09565b60086000828254612f279190613e57565b9091555050801561302a576013546001600160a01b03600160281b9091041663f305d71982308b600080612f636000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af193505050508015612fe8575060408051601f3d908101601f19168201909252612fe59181019061408e565b60015b1561302a575050604080518a8152602081018490527fb640d6c53f8bdcc19cb283d094325eae71e53d418509bc3583d00bbd7e15aec692500160405180910390a15b6015546001600160a01b0316158061304e57506015546001600160a01b031661dead145b8061306257506016546001600160a01b0316155b8061307957506016546001600160a01b031661dead145b1561308357600080fd5b47156130e6576015546040516001600160a01b03909116906188b89047906000818181858888f193505050503d80600081146130db576040519150601f19603f3d011682016040523d82523d6000602084013e6130e0565b606091505b50909450505b604080518b8152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050505050505b506013805460ff19169055565b6001600160a01b0386166000908152600f602052604081205460019060ff168061318057506001600160a01b0387166000908152600f602052604090205460ff165b8061318d57506001831515145b15613196575060005b60006131a589888489896133ff565b60808101516001600160a01b038b166000908152600a60205260408120805493945091926131d4908490613e57565b909155505060608101516001600160a01b0389166000908152600a602052604081208054909190613206908490613f76565b90915550506001600160a01b03891660009081526010602052604090205460ff161561326a576001600160a01b0389166000908152600b6020526040902054613250908890613e57565b6001600160a01b038a166000908152600b60205260409020555b6001600160a01b03881660009081526010602052604090205460ff16156132ca5780516001600160a01b0389166000908152600b60205260409020546132b09190613f76565b6001600160a01b0389166000908152600b60205260409020555b60008160a0015111806132e1575060008160200151115b15613302578060a00151600360008282546132fc9190613e57565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161334b91815260200190565b60405180910390a36013546301000000900460ff166133f05761336e8989613912565b6013546301000000900460ff1615801561338d575061338d8989612b8d565b8015613397575083155b156133f05760405163efc80f7560e01b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610b7b565b50600198975050505050505050565b61343f6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61347f6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516101408101825260145461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b8104831660a0830152600160601b8104831660c0830152600160701b8104831660e0830152600160801b81048316610100830152600160901b900490911661012082015261351f6124e2565b60c083018190526135309088613df2565b608083015285156137f557600085801561354e5750815161ffff1615155b1561368057436006546005546135649190613f76565b10613587576064613576896063613df2565b6135809190613e09565b90506135a8565b81516103e89061359b9061ffff168a613df2565b6135a59190613e09565b90505b8151608083015161ffff918216916135c1911683613df2565b6135cb9190613e09565b600760008282546135dc9190613f76565b90915550508151606083015161ffff918216916135fa911683613df2565b6136049190613e09565b600860008282546136159190613f76565b9091555050815160a083015161ffff91821691613633911683613df2565b61363d9190613e09565b6009600082825461364e9190613f76565b90915550508151604083015161ffff9182169161366c911683613df2565b6136769190613e09565b60208401526137a5565b84801561369557506000826020015161ffff16115b156137a5576103e8826020015161ffff16896136b19190613df2565b6136bb9190613e09565b9050816020015161ffff168260c0015161ffff16826136da9190613df2565b6136e49190613e09565b836020018181525050816020015161ffff1682610100015161ffff168261370b9190613df2565b6137159190613e09565b600760008282546137269190613f76565b9091555050602082015160e083015161ffff91821691613747911683613df2565b6137519190613e09565b600860008282546137629190613f76565b9091555050602082015161012083015161ffff91821691613784911683613df2565b61378e9190613e09565b6009600082825461379f9190613f76565b90915550505b60208301516137b49082613e57565b6040840181905260208401516137ca9190613f76565b6137d49089613e57565b835260c083015160208401516137ea9190613df2565b60a0840152506137f9565b8682525b6040820151156138d0578160c0015182604001516138179190613df2565b306000908152600a602052604081208054909190613836908490613f76565b90915550503060009081526010602052604090205460ff161561387e57604080830151306000908152600b602052918220805491929091613878908490613f76565b90915550505b306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604001516040516138c791815260200190565b60405180910390a35b8160c0015182604001516138e49190613df2565b8260a001516138f39190613f76565b82608001516139029190613e57565b6060830152509695505050505050565b6013546301000000900460ff16156139785760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b7b565b6139828282612b8d565b15801561399c57506002546001600160a01b038281169116145b156113a557506001600160a01b03166000908152600e60209081526040808320805460ff199081166001908117909255600f9093529220805490911690911790556013805463ff00000019166301000000179055565b61ffff9a8b168152988a1660208a015296891660408901529488166060880152928716608087015290861660a0860152851660c0850152841660e084015283166101008301529091166101208201526101400190565b600060208284031215613a5a57600080fd5b5035919050565b600060208083528351808285015260005b81811015613a8e57858101830151858201604001528201613a72565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461215957600080fd5b60008060408385031215613ad757600080fd5b8235613ae281613aaf565b946020939093013593505050565b600060208284031215613b0257600080fd5b81356112fe81613aaf565b801515811461215957600080fd5b60008060408385031215613b2e57600080fd5b8235613b3981613aaf565b91506020830135613b4981613b0d565b809150509250929050565b600080600060608486031215613b6957600080fd5b8335613b7481613aaf565b92506020840135613b8481613aaf565b929592945050506040919091013590565b803561ffff81168114613ba757600080fd5b919050565b600080600060608486031215613bc157600080fd5b613bca84613b95565b9250613bd860208501613b95565b9150613be660408501613b95565b90509250925092565b60008060408385031215613c0257600080fd5b823591506020830135613b4981613aaf565b60008060408385031215613c2757600080fd5b8235613c3281613aaf565b91506020830135613b4981613aaf565b815161ffff16815261014081016020830151613c64602084018261ffff169052565b506040830151613c7a604084018261ffff169052565b506060830151613c90606084018261ffff169052565b506080830151613ca6608084018261ffff169052565b5060a0830151613cbc60a084018261ffff169052565b5060c0830151613cd260c084018261ffff169052565b5060e0830151613ce860e084018261ffff169052565b506101008381015161ffff908116918401919091526101209384015116929091019190915290565b600080600060608486031215613d2557600080fd5b8335613d3081613b0d565b95602085013595506040909401359392505050565b600080600080600080600080610100898b031215613d6257600080fd5b613d6b89613b95565b9750613d7960208a01613b95565b9650613d8760408a01613b95565b9550613d9560608a01613b95565b9450613da360808a01613b95565b9350613db160a08a01613b95565b9250613dbf60c08a01613b95565b9150613dcd60e08a01613b95565b90509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ce957610ce9613ddc565b600082613e2657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610ce957610ce9613ddc565b600060018201613e7c57613e7c613ddc565b5060010190565b600181815b80851115613ebe578160001904821115613ea457613ea4613ddc565b80851615613eb157918102915b93841c9390800290613e88565b509250929050565b600082613ed557506001610ce9565b81613ee257506000610ce9565b8160018114613ef85760028114613f0257613f1e565b6001915050610ce9565b60ff841115613f1357613f13613ddc565b50506001821b610ce9565b5060208310610133831016604e8410600b8410161715613f41575081810a610ce9565b613f4b8383613e83565b8060001904821115613f5f57613f5f613ddc565b029392505050565b60006112fe60ff841683613ec6565b80820180821115610ce957610ce9613ddc565b600060208284031215613f9b57600080fd5b5051919050565b600060208284031215613fb457600080fd5b81516112fe81613b0d565b600060208284031215613fd157600080fd5b81516112fe81613aaf565b61ffff818116838216019080821115613ff757613ff7613ddc565b5092915050565b600060ff821660ff810361401457614014613ddc565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561406d5784516001600160a01b031683529383019391830191600101614048565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156140a357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202810f883ef5f8ad5c97792b394b25ea2e7f9ad04c80e08ace9d28078778a45ba64736f6c63430008120033
Deployed Bytecode
0x6080604052600436106102975760003560e01c80636d651d2c1161015a578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e14610a41578063e10b9db714610a87578063eafb5a3c14610aa7578063f2fde38b14610ac7578063f562c60014610ae7578063fabb0b4f14610b0757600080fd5b8063a9059cbb1461088c578063bf56b371146108ac578063c0a904a2146108c2578063c3ffb884146108e2578063d5fcc7b614610917578063db8d55f11461093757600080fd5b8063860aefcf11610113578063860aefcf1461077457806388f82020146107c95780638da5cb5b1461080257806395d89b41146108205780639f5bf4251461084c578063a4b45c001461086c57600080fd5b80636d651d2c146106815780636f89e409146106c857806370a08231146106f8578063715018a614610718578063735de9f71461072d57806380c581d11461075457600080fd5b80632d838119116101fe5780634fbee193116101b75780634fbee1931461059957806350a8e016146105d257806354370d26146105f3578063590ffdce146106085780635b4f472a146106285780635cce86cd1461064857600080fd5b80632d838119146104de578063313ce567146104fe57806335faa41614610525578063452ed4f11461053a57806346a96b201461055a5780634a74bb021461057a57600080fd5b80630cfc15f9116102505780630cfc15f9146104265780630f4f10131461045357806313e461921461047457806318160ddd1461049457806323b872dd146104a95780632b112e49146104c957600080fd5b806303fd2a45146102a35780630445b667146102d6578063069d955f146102fa57806306a1409f1461038557806306fdde03146103a7578063095ea7b3146103f657600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102e257600080fd5b506102ec60045481565b6040519081526020016102cd565b34801561030657600080fd5b5060145461036f9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b8104821691600160601b8204811691600160701b8104821691600160801b8204811691600160901b9004168a565b6040516102cd9a999897969594939291906139f2565b34801561039157600080fd5b506103a56103a0366004613a48565b610b1d565b005b3480156103b357600080fd5b5060408051808201909152601e81527f4d61727368616c6c204669676874696e67204368616d70696f6e73686970000060208201525b6040516102cd9190613a61565b34801561040257600080fd5b50610416610411366004613ac4565b610cd8565b60405190151581526020016102cd565b34801561043257600080fd5b506102ec610441366004613af0565b600a6020526000908152604090205481565b34801561045f57600080fd5b5060135461041690600160201b900460ff1681565b34801561048057600080fd5b506103a561048f366004613b1b565b610cef565b3480156104a057600080fd5b506102ec61117d565b3480156104b557600080fd5b506104166104c4366004613b54565b6111c4565b3480156104d557600080fd5b506102ec61123c565b3480156104ea57600080fd5b506102ec6104f9366004613a48565b611281565b34801561050a57600080fd5b50610513611305565b60405160ff90911681526020016102cd565b34801561053157600080fd5b506103a5611333565b34801561054657600080fd5b506002546102b9906001600160a01b031681565b34801561056657600080fd5b506103a5610575366004613bac565b6113a9565b34801561058657600080fd5b5060135461041690610100900460ff1681565b3480156105a557600080fd5b506104166105b4366004613af0565b6001600160a01b03166000908152600f602052604090205460ff1690565b3480156105de57600080fd5b50601354610416906301000000900460ff1681565b3480156105ff57600080fd5b506103a56114e4565b34801561061457600080fd5b506103a5610623366004613b1b565b6115b0565b34801561063457600080fd5b506013546104169062010000900460ff1681565b34801561065457600080fd5b50610416610663366004613af0565b6001600160a01b031660009081526011602052604090205460ff1690565b34801561068d57600080fd5b506015546016546106a8916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016102cd565b3480156106d457600080fd5b506106dd611614565b604080519384526020840192909252908201526060016102cd565b34801561070457600080fd5b506102ec610713366004613af0565b6116b4565b34801561072457600080fd5b506103a5611713565b34801561073957600080fd5b506013546102b990600160281b90046001600160a01b031681565b34801561076057600080fd5b506103a561076f366004613b1b565b611725565b34801561078057600080fd5b506017546107a49061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060016102cd565b3480156107d557600080fd5b506104166107e4366004613af0565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561080e57600080fd5b506000546001600160a01b03166102b9565b34801561082c57600080fd5b506040805180820190915260038152624d464360e81b60208201526103e9565b34801561085857600080fd5b506103a5610867366004613bef565b611789565b34801561087857600080fd5b506103a5610887366004613c14565b611994565b34801561089857600080fd5b506104166108a7366004613ac4565b611aa6565b3480156108b857600080fd5b506102ec60055481565b3480156108ce57600080fd5b506103a56108dd366004613b1b565b611abd565b3480156108ee57600080fd5b506108f7611b21565b6040805194855260208501939093529183015260608201526080016102cd565b34801561092357600080fd5b506103a5610932366004613af0565b611b5b565b34801561094357600080fd5b50610a346040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915250604080516101408101825260145461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b8104831660a0830152600160601b8104831660c0830152600160701b8104831660e0830152600160801b81048316610100830152600160901b900490911661012082015290565b6040516102cd9190613c42565b348015610a4d57600080fd5b506102ec610a5c366004613c14565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b348015610a9357600080fd5b506103a5610aa2366004613d10565b611c58565b348015610ab357600080fd5b506103a5610ac2366004613af0565b611dbe565b348015610ad357600080fd5b506103a5610ae2366004613af0565b6120e3565b348015610af357600080fd5b506103a5610b02366004613d45565b61215c565b348015610b1357600080fd5b506102ec60065481565b610b2561238f565b60135462010000900460ff1615610b84576040516329ce02f160e01b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c656421000000000000000060448201526064015b60405180910390fd5b6013546301000000900460ff16610bde576040516329ce02f160e01b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b7b565b6005811015610bf1576006819055610c3a565b6040516329ce02f160e01b815260206004820181905260248201527f4465616420626c6f636b73206d757374206265206c657373207468616e20352e6044820152606401610b7b565b6013805462ffff001916620101001790556002546103e890610c64906001600160a01b03166116b4565b610c6f90600a613df2565b610c799190613e09565b600455436005556013805464ff000000001916908190556040517ff789dd0d6d54bc0d9b7a5955aac4c052f81fb39e63f533a8d4820f6e862c78a391610ccd916201000090910460ff161515815260200190565b60405180910390a150565b6000610ce53384846123e9565b5060015b92915050565b610cf761238f565b8015610e3f576001600160a01b03821660009081526010602052604090205460ff1615610d665760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b7b565b6001600160a01b0382166000908152600a602052604090205415610dc0576001600160a01b0382166000908152600a6020526040902054610da690611281565b6001600160a01b0383166000908152600b60205260409020555b6001600160a01b038083166000818152601060205260409020805460ff1916600117905560025490911614610e3a576001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b611135565b80611135576001600160a01b03821660009081526010602052604090205460ff16610eac5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b7b565b6002546001600160a01b0390811690831603610f2857610eca6124e2565b6001600160a01b0383166000908152600b6020526040902054610eed9190613df2565b6001600160a01b0383166000908152600a6020908152604080832093909355600b81528282208290556010905220805460ff19169055611135565b600180549003610fcb57610f3a6124e2565b6001600160a01b0383166000908152600b6020526040902054610f5d9190613df2565b6001600160a01b0383166000908152600a6020908152604080832093909355600b81528282208290556010905220805460ff191690556001805480610fa457610fa4613e2b565b600082815260209020810160001990810180546001600160a01b0319169055019055611135565b60005b60015481101561113357826001600160a01b031660018281548110610ff557610ff5613e41565b6000918252602090912001546001600160a01b031603611121576001805461101e908290613e57565b8154811061102e5761102e613e41565b600091825260209091200154600180546001600160a01b03909216918390811061105a5761105a613e41565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506110906124e2565b6001600160a01b0384166000908152600b60205260409020546110b39190613df2565b6001600160a01b0384166000908152600a6020908152604080832093909355600b81528282208290556010905220805460ff1916905560018054806110fa576110fa613e2b565b600082815260209020810160001990810180546001600160a01b0319169055019055611133565b8061112b81613e6a565b915050610fce565b505b604080516001600160a01b038416815282151560208201527f0dc781e42e059225a276eb2acec6114dc6b8806a2fb68f4780326c2dcd1aec7391015b60405180910390a15050565b600061118b6012600a613f67565b61119990633b9aca00613df2565b6000036111a557600080fd5b6111b16012600a613f67565b6111bf90633b9aca00613df2565b905090565b6001600160a01b0383166000908152600d6020908152604080832033845290915281205460001914611229576001600160a01b0384166000908152600d6020908152604080832033845290915281208054849290611223908490613e57565b90915550505b6112348484846126bb565b949350505050565b600061124860006116b4565b61125361dead6116b4565b61125d9190613f76565b6112696012600a613f67565b61127790633b9aca00613df2565b6111bf9190613e57565b60006003548211156112e85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b7b565b60006112f26124e2565b90506112fe8184613e09565b9392505050565b60006113136012600a613f67565b61132190633b9aca00613df2565b60000361132d57600080fd5b50601290565b61133b61238f565b60155447906001600160a01b0316158061136157506015546001600160a01b031661dead145b1561136b57600080fd5b6015546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156113a5573d6000803e3d6000fd5b5050565b6113b161238f565b60c88261ffff1611806113c8575060648261ffff16105b806113d7575060c88361ffff16115b806113e6575060328361ffff16105b806113f5575060c88161ffff16115b80611404575060328161ffff16105b156114615760405163790e0dcb60e11b815260206004820152602660248201527f43616e6e6f7420657863656564203225206f72206265206c6f776572207468616044820152656e20302e352560d01b6064820152608401610b7b565b6017805461ffff838116600160201b810265ffff000000001987841662010000810263ffffffff19909616948a16948517959095171617909355604080519182526020820192909252908101919091527f4c669b5f339f6682739ab8c348d57e146ef3821dec19fb8a6cf7ded998607cd1906060015b60405180910390a1505050565b6114ec61238f565b6016546001600160a01b0316158061151057506016546001600160a01b031661dead145b1561151a57600080fd5b60006009541180156115365750611530306116b4565b60095411155b156115ae576016546009546000916115599130916001600160a01b0316906126bb565b905080156115675760006009555b601654600954604080516001600160a01b03909316835260208301919091527feb2faa2644c3d13ec78e58b18af1129c0112b936f20f9eaaf6513dae2bf0e3559101610ccd565b565b6115b861238f565b6001600160a01b0382166000818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527fe4cbcfb1a60e2c589f335f74c6c57b0be57eb6c50eb56442d8a67735dba70cad9101611171565b6017546000908190819061ffff1661162e6012600a613f67565b61163c90633b9aca00613df2565b6116469190613e09565b60175462010000900461ffff1661165f6012600a613f67565b61166d90633b9aca00613df2565b6116779190613e09565b601754600160201b900461ffff166116916012600a613f67565b61169f90633b9aca00613df2565b6116a99190613e09565b925092509250909192565b6001600160a01b03811660009081526010602052604081205460ff16156116f157506001600160a01b03166000908152600b602052604090205490565b6001600160a01b0382166000908152600a6020526040902054610ce990611281565b61171b61238f565b6115ae6000612b3d565b61172d61238f565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527f9275848620775c1d80b27df21b269b20e3040d2fd33ebf6a514850b17fc949589101611171565b61179161238f565b60155481906001600160a01b031615806117b757506015546001600160a01b031661dead145b156117c157600080fd5b6040516370a0823160e01b815230600482015283906001600160a01b038316906370a0823190602401602060405180830381865afa158015611807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182b9190613f89565b101561183657600080fd5b306001600160a01b0383160361191857600060095460085460075461185b9190613f76565b6118659190613f76565b905080611871306116b4565b1115611912576015546001600160a01b038084169163a9059cbb911683611897306116b4565b6118a19190613e57565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156118ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119109190613fa2565b505b50505050565b60155460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018590529082169063a9059cbb906044016020604051808303816000875af115801561196b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119129190613fa2565b505050565b61199c61238f565b6001600160a01b03821615806119b957506001600160a01b038116155b806119ce57506001600160a01b03821661dead145b806119e357506001600160a01b03811661dead145b15611a3f57604051637d4d5cd760e11b815260206004820152602560248201527f466565207265636569766572732063616e6e6f74206265207a65726f206164646044820152643932b9b99760d91b6064820152608401610b7b565b601580546001600160a01b038481166001600160a01b03199283168117909355601680549185169190921681179091556040805192835260208301919091527f9fba4a27b77afdf6c68deb1d99abfd909cb0c2bfa6a148fae3c6b8414e58aef99101611171565b6000611ab33384846126bb565b5060019392505050565b611ac561238f565b6001600160a01b038216600081815260116020908152604091829020805460ff19168515159081179091558251938452908301527fca5110fa8124e5b4dfaf023291185d46c42971706526a6d3d3c7be7a3322772f9101611171565b600080600080600754600854600954600954600854600754611b439190613f76565b611b4d9190613f76565b935093509350935090919293565b611b6361238f565b601354600160201b900460ff16611b7957600080fd5b6001600160a01b0381166000908152600e602090815260408083208054600160ff199182168117909255601284528285208054821683179055600f8452828520805482168317905560119093529220805490911682179055611bdc908290610cef565b601380546001600160a01b03600160281b9182900481166000908152601260205260409020805460ff191660019081179091559254611c1f939290041690610cef565b6040516001600160a01b03821681527fb18b3dcffb4f0709b15fd073af710076e9afafb9c2bbfb6b1115e0d7cbbae73a90602001610ccd565b611c6061238f565b60138054841580156101000261ff001990921691909117909155611d82578082611c8c6012600a613f67565b611c9a90633b9aca00613df2565b611ca49190613df2565b611cae9190613e09565b600455620186a0611cc16012600a613f67565b611ccf90633b9aca00613df2565b611cd99190613e09565b6004541080611d0e57506064611cf16012600a613f67565b611cff90633b9aca00613df2565b611d099190613e09565b600454115b15611d82576040516328f5666d60e21b815260206004820152603d60248201527f537761705468726573686f6c64206d757374206265206265747765656e20302e60448201527f303030312520616e64203125206f6620746f74616c20737570706c792e0000006064820152608401610b7b565b60045460408051851515815260208101929092527fb0a2a58670abffcc2e4851e058340dd3e013b3b29bf9a1f9adc0fc20078e912e91016114d7565b611dc661238f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2f9190613fbf565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea09190613fbf565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0f9190613fbf565b90506001600160a01b03811661208857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f819190613fbf565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff29190613fbf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561203f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120639190613fbf565b600280546001600160a01b0319166001600160a01b03929092169190911790556120a4565b600280546001600160a01b0319166001600160a01b0383161790555b6013805465010000000000600160c81b031916600160281b6001600160a01b038581168202929092179283905561198f923092919004166000196123e9565b6120eb61238f565b6001600160a01b0381166121505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7b565b61215981612b3d565b50565b61216461238f565b87601460000160046101000a81548161ffff021916908361ffff16021790555084601460000160066101000a81548161ffff021916908361ffff16021790555086601460000160086101000a81548161ffff021916908361ffff160217905550856014600001600a6101000a81548161ffff021916908361ffff160217905550836014600001600c6101000a81548161ffff021916908361ffff160217905550806014600001600e6101000a81548161ffff021916908361ffff16021790555082601460000160106101000a81548161ffff021916908361ffff16021790555081601460000160126101000a81548161ffff021916908361ffff1602179055508585886122719190613fdc565b61227b9190613fdc565b6014805461ffff191661ffff929092169190911790558161229c8285613fdc565b6122a69190613fdc565b6014805461ffff928316620100000263ffff00001982168117909255605091831692169190911711806122e6575060145460506201000090910461ffff16115b1561232d5760405163015bf8a960e61b81526020600482015260166024820152752332b2b99031b0b73737ba1032bc31b2b2b2101c129760511b6044820152606401610b7b565b6014546040517f2dfd00b4306a0e1a0fa38131b25d9de12d8a1780f0e39f4d542e38edd859b9eb9161237d9161ffff8083169262010000900416908c908c908c908c908c908c908c908c906139f2565b60405180910390a15050505050505050565b6000546001600160a01b031633146115ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b7b565b6001600160a01b0383166124355760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b7b565b6001600160a01b0382166124815760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b7b565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600354600090816124f56012600a613f67565b61250390633b9aca00613df2565b6002546001600160a01b03166000908152601060205260409020549091508290829060ff1615612596576002546001600160a01b03166000908152600a6020908152604080832054600b909252909120548382118061256157508281115b1561257b576125708587613e09565b965050505050505090565b6125858285613e57565b93506125918184613e57565b925050505b6001541561268d5760005b60015460ff8216101561268b576000600a600060018460ff16815481106125ca576125ca613e41565b60009182526020808320909101546001600160a01b0316835282019290925260400181205460018054919350600b9183919060ff871690811061260f5761260f613e41565b60009182526020808320909101546001600160a01b0316835282019290925260400190205490508482118061264357508381115b1561265e576126528688613e09565b97505050505050505090565b6126688286613e57565b94506126748185613e57565b93505050808061268390613ffe565b9150506125a1565b505b6126978385613e09565b8210156126b1576126a88385613e09565b94505050505090565b6126a88183613e09565b60006001600160a01b0384166127215760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b7b565b600082116127835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b7b565b6001600160a01b0384166000908152600c60205260408120548190819060ff16156128e1576001600160a01b0386166000908152601160205260409020546001935060ff166128dc5760175461ffff166127df6012600a613f67565b6127ed90633b9aca00613df2565b6127f79190613e09565b85111561284757604051634367bae960e11b815260206004820152601860248201527f4d61782062757920616d6f756e742065786365656465642e00000000000000006044820152606401610b7b565b601754600160201b900461ffff166128616012600a613f67565b61286f90633b9aca00613df2565b6128799190613e09565b85612883886116b4565b61288d9190613f76565b11156128dc57604051632d7fb5f360e01b815260206004820152601b60248201527f4d61782077616c6c657420616d6f756e742065786365656465642e00000000006044820152606401610b7b565b612a6a565b6001600160a01b0386166000908152600c602052604090205460ff16156129ac576001600160a01b0387166000908152601160205260409020546001925060ff1615801561295e575060175462010000900461ffff166129436012600a613f67565b61295190633b9aca00613df2565b61295b9190613e09565b85115b156128dc57604051634367bae960e11b815260206004820152601960248201527f4d61782073656c6c20616d6f756e742065786365656465642e000000000000006044820152606401610b7b565b601754600160201b900461ffff166129c66012600a613f67565b6129d490633b9aca00613df2565b6129de9190613e09565b856129e8886116b4565b6129f29190613f76565b118015612a1857506001600160a01b03861660009081526011602052604090205460ff16155b15612a6657604051632d7fb5f360e01b815260206004820152601b60248201527f4d61782077616c6c657420616d6f756e742065786365656465642e00000000006044820152606401610b7b565b5060015b612a748787612b8d565b15612ac95760135462010000900460ff16612ac95760405163efc80f7560e01b815260206004820152601460248201527354726164696e67206e6f7420656e61626c65642160601b6044820152606401610b7b565b8115612b245760135460ff16612b2457601354610100900460ff1615612b2457600454612af5306116b4565b10158015612b145750600454600854600754612b119190613f76565b10155b15612b2457612b24600454612cab565b612b3287878786868661313e565b979650505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080546001600160a01b03848116911614801590612bba57506000546001600160a01b03838116911614155b8015612bd157506000546001600160a01b03163214155b8015612bf657506001600160a01b0382166000908152600e602052604090205460ff16155b8015612c1b57506001600160a01b0383166000908152600e602052604090205460ff16155b8015612c3257506001600160a01b03821661dead14155b8015612c4657506001600160a01b03821615155b8015612c6b57506001600160a01b03831660009081526012602052604090205460ff16155b8015612c9057506001600160a01b03821660009081526012602052604090205460ff16155b80156112fe57506001600160a01b0383163014159392505050565b6013805460ff19166001179055600854600754600091612cca91613f76565b9050811580612cd7575080155b15612ce25750613131565b600060028260075485612cf59190613df2565b612cff9190613e09565b612d099190613e09565b90506000612d178285613e57565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612d5157612d51613e41565b60200260200101906001600160a01b031690816001600160a01b031681525050601360059054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de89190613fbf565b81600181518110612dfb57612dfb613e41565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b81524792600160281b9092049091169063791ac94790612e4c90869060009087903090429060040161401d565b600060405180830381600087803b158015612e6657600080fd5b505af1925050508015612e77575060015b612e85575050505050613131565b600080612e928347613e57565b905060008760085483612ea59190613df2565b612eaf9190613e09565b905060008860075484612ec29190613df2565b612ecc9190613e09565b9050886007548b612edd9190613df2565b612ee79190613e09565b60076000828254612ef89190613e57565b90915550506008548990612f0c908c613df2565b612f169190613e09565b60086000828254612f279190613e57565b9091555050801561302a576013546001600160a01b03600160281b9091041663f305d71982308b600080612f636000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af193505050508015612fe8575060408051601f3d908101601f19168201909252612fe59181019061408e565b60015b1561302a575050604080518a8152602081018490527fb640d6c53f8bdcc19cb283d094325eae71e53d418509bc3583d00bbd7e15aec692500160405180910390a15b6015546001600160a01b0316158061304e57506015546001600160a01b031661dead145b8061306257506016546001600160a01b0316155b8061307957506016546001600160a01b031661dead145b1561308357600080fd5b47156130e6576015546040516001600160a01b03909116906188b89047906000818181858888f193505050503d80600081146130db576040519150601f19603f3d011682016040523d82523d6000602084013e6130e0565b606091505b50909450505b604080518b8152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050505050505b506013805460ff19169055565b6001600160a01b0386166000908152600f602052604081205460019060ff168061318057506001600160a01b0387166000908152600f602052604090205460ff165b8061318d57506001831515145b15613196575060005b60006131a589888489896133ff565b60808101516001600160a01b038b166000908152600a60205260408120805493945091926131d4908490613e57565b909155505060608101516001600160a01b0389166000908152600a602052604081208054909190613206908490613f76565b90915550506001600160a01b03891660009081526010602052604090205460ff161561326a576001600160a01b0389166000908152600b6020526040902054613250908890613e57565b6001600160a01b038a166000908152600b60205260409020555b6001600160a01b03881660009081526010602052604090205460ff16156132ca5780516001600160a01b0389166000908152600b60205260409020546132b09190613f76565b6001600160a01b0389166000908152600b60205260409020555b60008160a0015111806132e1575060008160200151115b15613302578060a00151600360008282546132fc9190613e57565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161334b91815260200190565b60405180910390a36013546301000000900460ff166133f05761336e8989613912565b6013546301000000900460ff1615801561338d575061338d8989612b8d565b8015613397575083155b156133f05760405163efc80f7560e01b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610b7b565b50600198975050505050505050565b61343f6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61347f6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516101408101825260145461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b8104831660a0830152600160601b8104831660c0830152600160701b8104831660e0830152600160801b81048316610100830152600160901b900490911661012082015261351f6124e2565b60c083018190526135309088613df2565b608083015285156137f557600085801561354e5750815161ffff1615155b1561368057436006546005546135649190613f76565b10613587576064613576896063613df2565b6135809190613e09565b90506135a8565b81516103e89061359b9061ffff168a613df2565b6135a59190613e09565b90505b8151608083015161ffff918216916135c1911683613df2565b6135cb9190613e09565b600760008282546135dc9190613f76565b90915550508151606083015161ffff918216916135fa911683613df2565b6136049190613e09565b600860008282546136159190613f76565b9091555050815160a083015161ffff91821691613633911683613df2565b61363d9190613e09565b6009600082825461364e9190613f76565b90915550508151604083015161ffff9182169161366c911683613df2565b6136769190613e09565b60208401526137a5565b84801561369557506000826020015161ffff16115b156137a5576103e8826020015161ffff16896136b19190613df2565b6136bb9190613e09565b9050816020015161ffff168260c0015161ffff16826136da9190613df2565b6136e49190613e09565b836020018181525050816020015161ffff1682610100015161ffff168261370b9190613df2565b6137159190613e09565b600760008282546137269190613f76565b9091555050602082015160e083015161ffff91821691613747911683613df2565b6137519190613e09565b600860008282546137629190613f76565b9091555050602082015161012083015161ffff91821691613784911683613df2565b61378e9190613e09565b6009600082825461379f9190613f76565b90915550505b60208301516137b49082613e57565b6040840181905260208401516137ca9190613f76565b6137d49089613e57565b835260c083015160208401516137ea9190613df2565b60a0840152506137f9565b8682525b6040820151156138d0578160c0015182604001516138179190613df2565b306000908152600a602052604081208054909190613836908490613f76565b90915550503060009081526010602052604090205460ff161561387e57604080830151306000908152600b602052918220805491929091613878908490613f76565b90915550505b306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604001516040516138c791815260200190565b60405180910390a35b8160c0015182604001516138e49190613df2565b8260a001516138f39190613f76565b82608001516139029190613e57565b6060830152509695505050505050565b6013546301000000900460ff16156139785760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b7b565b6139828282612b8d565b15801561399c57506002546001600160a01b038281169116145b156113a557506001600160a01b03166000908152600e60209081526040808320805460ff199081166001908117909255600f9093529220805490911690911790556013805463ff00000019166301000000179055565b61ffff9a8b168152988a1660208a015296891660408901529488166060880152928716608087015290861660a0860152851660c0850152841660e084015283166101008301529091166101208201526101400190565b600060208284031215613a5a57600080fd5b5035919050565b600060208083528351808285015260005b81811015613a8e57858101830151858201604001528201613a72565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461215957600080fd5b60008060408385031215613ad757600080fd5b8235613ae281613aaf565b946020939093013593505050565b600060208284031215613b0257600080fd5b81356112fe81613aaf565b801515811461215957600080fd5b60008060408385031215613b2e57600080fd5b8235613b3981613aaf565b91506020830135613b4981613b0d565b809150509250929050565b600080600060608486031215613b6957600080fd5b8335613b7481613aaf565b92506020840135613b8481613aaf565b929592945050506040919091013590565b803561ffff81168114613ba757600080fd5b919050565b600080600060608486031215613bc157600080fd5b613bca84613b95565b9250613bd860208501613b95565b9150613be660408501613b95565b90509250925092565b60008060408385031215613c0257600080fd5b823591506020830135613b4981613aaf565b60008060408385031215613c2757600080fd5b8235613c3281613aaf565b91506020830135613b4981613aaf565b815161ffff16815261014081016020830151613c64602084018261ffff169052565b506040830151613c7a604084018261ffff169052565b506060830151613c90606084018261ffff169052565b506080830151613ca6608084018261ffff169052565b5060a0830151613cbc60a084018261ffff169052565b5060c0830151613cd260c084018261ffff169052565b5060e0830151613ce860e084018261ffff169052565b506101008381015161ffff908116918401919091526101209384015116929091019190915290565b600080600060608486031215613d2557600080fd5b8335613d3081613b0d565b95602085013595506040909401359392505050565b600080600080600080600080610100898b031215613d6257600080fd5b613d6b89613b95565b9750613d7960208a01613b95565b9650613d8760408a01613b95565b9550613d9560608a01613b95565b9450613da360808a01613b95565b9350613db160a08a01613b95565b9250613dbf60c08a01613b95565b9150613dcd60e08a01613b95565b90509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ce957610ce9613ddc565b600082613e2657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610ce957610ce9613ddc565b600060018201613e7c57613e7c613ddc565b5060010190565b600181815b80851115613ebe578160001904821115613ea457613ea4613ddc565b80851615613eb157918102915b93841c9390800290613e88565b509250929050565b600082613ed557506001610ce9565b81613ee257506000610ce9565b8160018114613ef85760028114613f0257613f1e565b6001915050610ce9565b60ff841115613f1357613f13613ddc565b50506001821b610ce9565b5060208310610133831016604e8410600b8410161715613f41575081810a610ce9565b613f4b8383613e83565b8060001904821115613f5f57613f5f613ddc565b029392505050565b60006112fe60ff841683613ec6565b80820180821115610ce957610ce9613ddc565b600060208284031215613f9b57600080fd5b5051919050565b600060208284031215613fb457600080fd5b81516112fe81613b0d565b600060208284031215613fd157600080fd5b81516112fe81613aaf565b61ffff818116838216019080821115613ff757613ff7613ddc565b5092915050565b600060ff821660ff810361401457614014613ddc565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561406d5784516001600160a01b031683529383019391830191600101614048565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156140a357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202810f883ef5f8ad5c97792b394b25ea2e7f9ad04c80e08ace9d28078778a45ba64736f6c63430008120033
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.