Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
100,000,000 NineFi
Holders
246 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
17,693.268289434480303554 NineFiValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NineFi
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 2000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; import "@openzeppelin/contracts/access/Ownable.sol"; import "./interfaces/IUniswapV2Router02.sol"; import "./interfaces/IUniswapV2Factory.sol"; import "./interfaces/IUniswapV2Pair.sol"; import "./interfaces/INineLives.sol"; contract NineFi is Ownable, INineLives { mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping(address => bool) private excludedFromTransferLimits; mapping(address => bool) private excludedFromFees; mapping(address => bool) private excludedFromMaxWallet; mapping(address => uint256) private taxlessTokens; string private constant _name = '9 Lives Network'; string private constant _symbol = 'NineFi'; uint256 public constant InitialSupply= 1_00_000_000 * 10**_decimals; uint8 private constant _decimals = 18; uint16 public constant BASE_POINT = 1000; /// @notice Uniswap router handle. IUniswapV2Router02 private router; /// @notice The uniswap pair address for (pairToken, 9INE). /// @dev pairToken is USDC. address private pair; /// @notice burning wallet address. address constant burnerWallet = 0x84d4E5CB6E13b0f693692BBA1B4F1AB4Ef7EAe00; /// @notice owner drop wallet address. address constant ownerDropWallet = 0x99e5de9452ED0cd93D967040d123989B281b281b; /// @notice marketing wallet address. address private marketingWallet; /// @notice PROOF revenue wallet address. address private proofRevenueWallet; /// @notice PROOF rewards wallet address. address private proofRewardsWallet; /// @notice PROOF admin wallet address. address private proofAdminWallet; /// @notice Pair token address to add liquidity with 9INE. address public pairToken; /// @notice Threshold sell fee. uint16 immutable public MAX_SELL_FEE; /// @notice Threshold buy fee. uint16 immutable public MAX_BUY_FEE; uint16 constant private airdropPercent = 60; // 6% uint16 constant private burnPercent = 70; // 7% uint16 constant private ownerDropPercent = 70; // 7% uint16 constant private maxWalletPercent = 10; // 1% uint16 constant private transferLimitPercent = 5; // 0.5% uint16 constant private thresholdSwapPercent = 1; // 0.1% /// @notice NineFi launch time. uint256 public launchTime; /// @notice Jeet time limit. uint256 public jeetTime = 24 hours; /// @notice Sell fee informations /// @dev sellFees[0]: sell fee for users if they sell their token within jeetTime after purchasing. /// @dev sellFees[1]: sell fee for users if they sell their token after jeetTime after purchasing. FeeRate[] public sellFees; /// @notice Buy fee informations. FeeRate public buyFee; /// @notice Limit amount that a user can own. uint256 public maxWallet; /// @notice Limit amount for transfer. /// @dev 1% of Initial Supply. uint256 public transferLimit; /// @notice Fee for liquify contract has uint256 private _lpFee; /// @notice Fee for marketing contract has uint256 private _marketingFee; /// @notice Fee for proof contract has uint256 private _proofFee; /// @notice Tract to purchasing per user. mapping(address => PurchasingInfo) private userPurchaseInfos; uint256 public thresholdSwap; bool private txStarted; bool private inSwapAndLiquify; modifier onlyProofAdminWallet { require (msg.sender == proofAdminWallet, "Only Proof can change this"); _; } constructor ( Param memory _param ) { require ( (_param.firstSellFee.LPFeeRate + _param.firstSellFee.ProofFeeRate + _param.firstSellFee.MarketingFeeRate) == _param.firstSellFee.totalFeeRate, "incorrect fee rate" ); require ( _param.afterSellFee.LPFeeRate + _param.afterSellFee.ProofFeeRate + _param.afterSellFee.MarketingFeeRate == _param.afterSellFee.totalFeeRate, "incorrect fee rate" ); require ( _param.buyFee.LPFeeRate + _param.buyFee.ProofFeeRate + _param.buyFee.MarketingFeeRate == _param.buyFee.totalFeeRate ); require (_param.wallets.length == 6, "incorrect wallets length"); require (_param.proofRevenueWallet != address(0), "invalid proof revenue wallet address"); require (_param.proofRewardsWallet != address(0), "invalid proof rewards wallet address"); require (_param.marketingWallet != address(0), "invalid marketing wallet address"); require (_param.pairToken != address(0), "invalid pair token address"); require (_param.routerAddr != address(0), "invalid router address"); sellFees.push(_param.firstSellFee); sellFees.push(_param.afterSellFee); buyFee = _param.buyFee; proofRevenueWallet = _param.proofRevenueWallet; proofRewardsWallet = _param.proofRewardsWallet; proofAdminWallet = _param.proofAdminWallet; marketingWallet = _param.marketingWallet; pairToken = _param.pairToken; router = IUniswapV2Router02(_param.routerAddr); pair = IUniswapV2Factory(router.factory()).createPair( pairToken, address(this) ); // 6% fee for 6 wallets. 1% per wallet. uint256 provideAmount = InitialSupply * airdropPercent / BASE_POINT / 6; // 1% for (uint256 i = 0; i < _param.wallets.length; i ++) { address wallet = _param.wallets[i]; _balances[wallet] += provideAmount; taxlessTokens[wallet] += provideAmount; emit Transfer(address(0),wallet,provideAmount); } uint256 burnAmount = InitialSupply * burnPercent / BASE_POINT; // 7% _balances[burnerWallet] += burnAmount; taxlessTokens[burnerWallet] += burnAmount; emit Transfer(address(0),burnerWallet,burnAmount); uint256 ownerDropAmount = InitialSupply * ownerDropPercent / BASE_POINT; // 7% _balances[ownerDropWallet] += ownerDropAmount; taxlessTokens[ownerDropWallet] += ownerDropAmount; emit Transfer(address(0),ownerDropWallet,ownerDropAmount); uint256 ownerAmount = InitialSupply - provideAmount*6 - burnAmount - ownerDropAmount; _balances[msg.sender] += ownerAmount; taxlessTokens[msg.sender] += ownerAmount; emit Transfer(address(0),msg.sender,ownerAmount); MAX_SELL_FEE = _param.maxSellFee; MAX_BUY_FEE = _param.maxBuyFee; maxWallet = InitialSupply; transferLimit = InitialSupply; thresholdSwap = InitialSupply; excludedFromFees[address(this)] = true; excludedFromFees[0x93252861589D1a8E41028F01Fa638eC51990F950] = true; excludedFromFees[ownerDropWallet] = true; excludedFromTransferLimits[address(this)] = true; excludedFromMaxWallet[address(this)] = true; excludedFromMaxWallet[ownerDropWallet] = true; excludedFromMaxWallet[pair] = true; launchTime = block.timestamp; } /// @notice Use to update jeet time limit in seconds. /// @dev Only owner can call this function. /// @param jeetTime_ Set new time limit only in seconds. function updateJeetTimeLimit( uint256 jeetTime_ ) external onlyOwner { require (jeetTime_ <= 86400, "Max time of 24 hours"); jeetTime = jeetTime_; } function getLpTokenAddress() external view returns (address) { return pair; } /// @notice Update max wallet and transfer limits. /// @dev Only owner can call this function. /// @param maxWalletPercent_ Set new max wallet percent, 10 = 1%. /// @param transferLimitPercent_ Set new transfer limit percent, 5 = 0.5%. function updateLimits( uint16 maxWalletPercent_, uint16 transferLimitPercent_ ) external onlyOwner{ require (maxWalletPercent_ >= 10, "Max must be above 1%"); require (transferLimitPercent_ >= 5, "Max must be above 0.5%"); maxWallet = InitialSupply * maxWalletPercent_ / BASE_POINT; // 1% transferLimit = InitialSupply * transferLimitPercent_ / BASE_POINT; // 0.5% } function addLiquidity() external onlyOwner { _addLiquidity(); } /// @notice Update threshold of tokens to sell. /// @dev Only owner can call this function. /// @param _thresholdPercent The amount of tokens to sell, 1 = 0.1% of total supply. function setSwapThreshold ( uint16 _thresholdPercent ) external onlyOwner { require (txStarted, "Tx not started"); thresholdSwap = InitialSupply * _thresholdPercent / BASE_POINT; } /// @notice Update wallet to be excluded from fees. /// @dev Only owner can call this function. /// @param address_ The wallet address of who will be changed status. /// @param trueFalse New status, true = exlcuded. function setExcludedFromFees( address address_, bool trueFalse ) external onlyOwner{ excludedFromFees[address_] = trueFalse; } /// @notice Update wallet to be excluded from max wallet. /// @dev Only owner can call this function. /// @param address_ The wallet address of who will be changed status. /// @param trueFalse New status, true = exlcuded. function setExcludedFromMaxWallet( address address_, bool trueFalse ) external onlyOwner{ excludedFromMaxWallet[address_] = trueFalse; } /// @notice Update wallet to be excluded from transfer limits. /// @dev Only owner can call this function. /// @param address_ The wallet address of who will be changed status. /// @param trueFalse New status, true = exlcuded. function setExcludedFromTransferLimits( address address_, bool trueFalse ) external onlyOwner{ excludedFromTransferLimits[address_] = trueFalse; } /// @notice Start transaction. /// @dev Only owner can call this function. function startTx() external onlyOwner { maxWallet = InitialSupply * maxWalletPercent / BASE_POINT; // 1% transferLimit = InitialSupply * transferLimitPercent / BASE_POINT; // 0.5% thresholdSwap = InitialSupply * thresholdSwapPercent / BASE_POINT; // 0.1% txStarted = true; } /// @notice Start transaction. /// @dev Only Proof admin can call this function. function ProofStartTx() external onlyProofAdminWallet { txStarted = true; } /// @notice Start transaction. /// @dev Only Proof admin can call this function. function ProofStopTx() external onlyProofAdminWallet { txStarted = false; } /// @notice Update sell fee rate. /// @dev Only owner can call this function. /// @param feeId_ The id of fee rate. /// @param feeRate_ New Fee Rate. function updateSellFee( uint8 feeId_, FeeRate memory feeRate_ ) external onlyOwner { require (feeRate_.totalFeeRate <= MAX_SELL_FEE, "too high sell fee"); require (feeRate_.ProofFeeRate == sellFees[feeId_].ProofFeeRate, "ProofFeeRate can not be changed"); require ( feeRate_.LPFeeRate + feeRate_.ProofFeeRate + feeRate_.MarketingFeeRate == feeRate_.totalFeeRate, "incorrect fee rate" ); sellFees[feeId_] = feeRate_; } /// @notice Update buy fee rate. /// @dev Only owner can call this function. /// @param feeRate_ New fee rate. function updateBuyFee( FeeRate memory feeRate_ ) external onlyOwner { require (feeRate_.totalFeeRate <= MAX_BUY_FEE, "too high buy fee"); require (feeRate_.ProofFeeRate == buyFee.ProofFeeRate, "ProofFeeRate can not be changed"); require ( feeRate_.LPFeeRate + feeRate_.ProofFeeRate + feeRate_.MarketingFeeRate == feeRate_.totalFeeRate, "incorrect fee rate" ); buyFee = feeRate_; } /// @notice Update proof revenue wallet address. /// @dev Only proof revenue wallet can call this function. /// @param proofRevenueWallet_ New proof revenue wallet address. function updateProofRevenueWallet( address proofRevenueWallet_ ) external { require (msg.sender == proofRevenueWallet, "Only Proof can change this."); require (proofRevenueWallet_ != address(0), "can't be zero address"); proofRevenueWallet = proofRevenueWallet_; } /// @notice Update proof rewards wallet address. /// @dev Only proof rewards wallet can call this function. /// @param proofRewardsWallet_ New proof rewards wallet address. function updateProofRewardsWallet( address proofRewardsWallet_ ) external { require (msg.sender == proofRewardsWallet, "Only Proof can change this."); require (proofRewardsWallet_ != address(0), "can't be zero address"); proofRewardsWallet = proofRewardsWallet_; } /// @notice Update proof admin wallet address. /// @dev Only proof admin wallet can call this function. /// @param proofAdminWallet_ New proof admin wallet address. function updateProofAdminWallet( address proofAdminWallet_ ) external onlyProofAdminWallet { require (proofAdminWallet_ != address(0), "can't be zero address"); proofAdminWallet = proofAdminWallet_; } /// @notice Update marketing wallet address. /// @dev Only owner can call this function. /// @param marketingWallet_ New marketing wallet address. function updateMarketingWallet( address marketingWallet_ ) external onlyOwner { require (marketingWallet_ != address(0), "zero address"); marketingWallet = marketingWallet_; } function name() external pure returns (string memory) {return _name;} function symbol() external pure returns (string memory) {return _symbol;} function decimals() external pure returns (uint8) {return _decimals;} function totalSupply() external pure returns (uint256) {return InitialSupply;} function balanceOf(address account) public view returns (uint256) {return _balances[account];} /// @inheritdoc IERC20 function transfer( address recipient_, uint256 amount_ ) external override returns (bool) { _transfer(msg.sender, recipient_, amount_); return true; } /// @inheritdoc IERC20 function allowance( address owner_, address spender_ ) external view override returns (uint256) { return _allowances[owner_][spender_]; } /// @inheritdoc IERC20 function approve( address spender_, uint256 amount_ ) external override returns (bool) { _approve(msg.sender, spender_, amount_); return true; } /// @inheritdoc IERC20 function transferFrom( address sender_, address recipient_, uint256 amount_ ) external override returns (bool) { uint256 currentAllowance = _allowances[sender_][msg.sender]; require(currentAllowance >= amount_, "Transfer > allowance"); _approve(sender_, msg.sender, currentAllowance - amount_); _transfer(sender_, recipient_, amount_); return true; } /// @notice Decrease proof fee. /// @dev It can be called after 72 hours after launch. /// @dev Only owner can call this function. function decreaseProofFeeWithSell() external onlyOwner { require (sellFees[1].ProofFeeRate > 1, "already decreased"); require (block.timestamp - launchTime >= 72 hours, "too soon"); sellFees[1].ProofFeeRate --; } /// @notice Decrease proof fee. /// @dev It can be called after 72 hours after launch. /// @dev Only owner can call this function. function decreaseProofFeeWithBuy() external onlyOwner { require (buyFee.ProofFeeRate > 1, "already decreased"); require (block.timestamp - launchTime >= 72 hours, "too soon"); buyFee.ProofFeeRate --; } function getAvailableTokenAmount(address user_) external view returns (uint256) { return _availableTransferAmount(user_); } receive() external payable {} /// @notice Transfer amount from sender to transfer. /// @dev If buy/sell, FeeRate will be applied. /// @param sender_ The address of sender. /// @param recipient_ The address of recipient. /// @param amount_ The amount of 9INE token to transfer. function _transfer( address sender_, address recipient_, uint256 amount_ ) internal { require (sender_ != address(0), "transfer from zero address"); require (recipient_ != address(0), "transfer to zero address"); require (amount_ > 0, "zero amount"); require (excludedFromMaxWallet[recipient_] || _balances[recipient_] + amount_ <= maxWallet + (10*10**_decimals), "over max wallet"); if (txStarted == false) { if (sender_ != owner() && recipient_ != owner()) { revert ("Tx not started"); } else { // this is for add liquidity at first. _feelessTransfer(sender_, recipient_, amount_, true); return; } } // Check if transfer amount is over transfer limit. if ( !excludedFromTransferLimits[sender_] && !excludedFromTransferLimits[recipient_] && sender_ != pair ) { require(amount_ <= transferLimit + (1*10**_decimals),"Over max TXN"); } if (sender_ != pair && recipient_ != pair) { // not buy/sell, transfer without fee. _feelessTransfer(sender_, recipient_, amount_, false); } else { // buy/sell, transfer with fee. if ( excludedFromFees[sender_] == true || excludedFromFees[recipient_] == true || inSwapAndLiquify == true ) { _feelessTransfer(sender_, recipient_, amount_, true); return; } _withFeeTransfer(sender_, recipient_, amount_); } } /// @notice Transfer without fee. /// @param sender_ The address of sender. /// @param recipient_ The address of recipient. /// @param amount_ The amount of 9INE token to transfer. /// @param excludeLimit_ If it's true, don't check it has enough available token amount. function _feelessTransfer( address sender_, address recipient_, uint256 amount_, bool excludeLimit_ ) internal { uint256 senderBalance = _balances[sender_]; require(senderBalance >= amount_, "Transfer exceeds balance"); if (!excludeLimit_) { PurchasingInfo storage purchasingInfo = userPurchaseInfos[sender_]; uint256 restAmount = amount_; if (taxlessTokens[sender_] >= amount_) { restAmount = 0; taxlessTokens[sender_] -= amount_; } else { restAmount = amount_ - taxlessTokens[sender_]; taxlessTokens[sender_] = 0; } require (restAmount == 0 || purchasingInfo.purchaseId > 0, "not enough available balance"); if (purchasingInfo.purchaseId > 0) { uint256 purchaseId = 0; uint256 curTime = block.timestamp; while(purchaseId < purchasingInfo.purchaseId && restAmount > 0) { require((curTime - purchasingInfo.purchaseTime[purchaseId]) > jeetTime || restAmount == 0, "not enough available balance"); uint256 purchaseAmount = purchasingInfo.purchaseAmount[purchaseId]; if (purchaseAmount > 0) { purchaseAmount = purchaseAmount > restAmount ? restAmount : purchaseAmount; restAmount -= purchaseAmount; purchasingInfo.purchaseAmount[purchaseId] -= purchaseAmount; } purchaseId ++; } } } _balances[sender_] -= amount_; _balances[recipient_] += amount_; taxlessTokens[recipient_] += amount_; if (excludeLimit_) { taxlessTokens[sender_] = taxlessTokens[sender_] >= amount_ ? taxlessTokens[sender_] - amount_ : 0; } emit Transfer(sender_,recipient_,amount_); } /// @notice Transfer with fee. /// @param sender_ The address of sender. /// @param recipient_ The address of recipient. /// @param amount_ The amount of 9INE token to transfer. function _withFeeTransfer( address sender_, address recipient_, uint256 amount_ ) internal { uint256 totalFee = 0; uint256 recvAmount = 0; uint256 lpFee = 0; uint256 marketingFee = 0; uint256 proofFee = 0; require(_balances[sender_] >= amount_, "Transfer exceeds balance"); if (sender_ == pair) { // buy (totalFee, lpFee, marketingFee, proofFee, recvAmount) = _calcFeeRate(amount_, buyFee); PurchasingInfo storage purchaseInfo = userPurchaseInfos[recipient_]; // add purcahse info to track. uint256 purchaseId = purchaseInfo.purchaseId; purchaseInfo.purchaseAmount[purchaseId] = recvAmount; purchaseInfo.purchaseTime[purchaseId] = block.timestamp; purchaseInfo.purchaseId ++; } else if (recipient_ == pair) { // sell if (_balances[address(this)] >= thresholdSwap) { _addLiquidity(); } (totalFee, lpFee, marketingFee, proofFee, recvAmount) = _getAmountWithSellFee(sender_, amount_); } _lpFee += lpFee; _marketingFee += marketingFee; _proofFee += proofFee; _balances[sender_] -= amount_; _balances[recipient_] += recvAmount; _balances[address(this)] += totalFee; emit Transfer(sender_,recipient_,amount_); } /// @notice The amount with fee. /// @dev Explain to a developer any extra details /// @param user_ The address of a user that will receive token. /// @param amount_ The origin amount of token to transfer. /// @return totalFee The total fee amount. /// @return lpFee The fee amount for liquify. /// @return marketingFee The fee amount for marketing. /// @return proofFee The fee amount for proof. /// @return recvAmount The real amount that recipient will be recieved. function _getAmountWithSellFee( address user_, uint256 amount_ ) internal returns( uint256 totalFee, uint256 lpFee, uint256 marketingFee, uint256 proofFee, uint256 recvAmount ) { uint256[] memory amounts = new uint256[](2); // amounts[0]: jeetTax, amounts[1]: normalTax PurchasingInfo storage purchasingInfo = userPurchaseInfos[user_]; if (taxlessTokens[user_] >= amount_) { amounts[1] = amount_; taxlessTokens[user_] -= amount_; } else { amounts[1] = taxlessTokens[user_]; taxlessTokens[user_] = 0; } uint256 restAmount = amount_ - amounts[1]; if (purchasingInfo.purchaseId > 0) { uint256 purchaseId = 0; uint256 curTime = block.timestamp; while(purchaseId < purchasingInfo.purchaseId && restAmount > 0) { bool isJeetTax = (curTime - purchasingInfo.purchaseTime[purchaseId]) <= jeetTime; uint256 purchaseAmount = purchasingInfo.purchaseAmount[purchaseId]; if (purchaseAmount > 0) { purchaseAmount = purchaseAmount > restAmount ? restAmount : purchaseAmount; uint8 amountIndex = isJeetTax ? 0 : 1; amounts[amountIndex] += purchaseAmount; restAmount -= purchaseAmount; purchasingInfo.purchaseAmount[purchaseId] -= purchaseAmount; } purchaseId ++; } } require (restAmount == 0, "not enough balance"); uint256 totalFee_; uint256 lpFee_; uint256 marketingFee_; uint256 proofFee_; uint256 recvAmount_; if (amounts[0] > 0) { (totalFee_, lpFee_, marketingFee_, proofFee_, recvAmount_) = _calcFeeRate(amounts[0], sellFees[0]); lpFee += lpFee_; marketingFee += marketingFee_; proofFee += proofFee_; totalFee += totalFee_; recvAmount += recvAmount_; } if (amounts[1] > 0) { (totalFee_, lpFee_, marketingFee_, proofFee_, recvAmount_) = _calcFeeRate(amounts[1], sellFees[1]); lpFee += lpFee_; marketingFee += marketingFee_; proofFee += proofFee_; totalFee += totalFee_; recvAmount += recvAmount_; } } function _calcFeeRate( uint256 amount_, FeeRate memory feeRate_ ) internal pure returns ( uint256 totalFee, uint256 lpFee, uint256 marketingFee, uint256 proofFee, uint256 recvAmount ) { totalFee = amount_ * feeRate_.totalFeeRate / BASE_POINT; lpFee = amount_ * feeRate_.LPFeeRate / BASE_POINT; marketingFee = amount_ * feeRate_.MarketingFeeRate / BASE_POINT; proofFee = totalFee - lpFee - marketingFee; recvAmount = amount_ - totalFee; } function _transferUSDC( uint256 amount_, address recipient_ ) internal { require (IERC20(pairToken).transfer(recipient_, amount_), "USDC transfer failed"); } /// @notice Used for forcing a swap and liquify event /// @dev Only Owner can call. function unclog() external onlyOwner { _addLiquidity(); } function _addLiquidity() internal { inSwapAndLiquify = true; uint256 amount_ = _balances[address(this)]; uint256 swapAmount = amount_ - _lpFee / 2; _swapToETH(swapAmount); // transfer USDC to marketing wallet and proofWallet. uint256 totalETHAmount = address(this).balance; uint256 totalUSDCAmount = _swapETHToUSDC(totalETHAmount); uint256 amountForMarketing = totalUSDCAmount * _marketingFee / swapAmount; uint256 amountForProof = totalUSDCAmount * _proofFee / swapAmount; _transferUSDC(amountForMarketing, marketingWallet); _transferUSDC(amountForProof / 2, proofRevenueWallet); _transferUSDC(amountForProof / 2, proofRewardsWallet); // swap and add liquidity uint256 pairTokenAmount = IERC20(pairToken).balanceOf(address(this)); uint256 liquifyAmount = _balances[address(this)]; _approve(address(this), address(router), liquifyAmount); IERC20(pairToken).approve(address(router), pairTokenAmount); router.addLiquidity( pairToken, address(this), pairTokenAmount, liquifyAmount, 0, 0, marketingWallet, block.timestamp ); _lpFee = 0; _marketingFee = 0; _proofFee = 0; inSwapAndLiquify = false; } function _swapETHToUSDC(uint256 swapAmount) internal returns (uint256) { address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = pairToken; uint256 balanceBefore = IERC20(pairToken).balanceOf(address(this)); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: swapAmount}( 0, path, address(this), block.timestamp ); uint256 balanceAfter = IERC20(pairToken).balanceOf(address(this)); return balanceAfter - balanceBefore; } function _swapToETH(uint256 amount_) internal { address[] memory path = new address[](3); path[0] = address(this); path[1] = pairToken; path[2] = router.WETH(); _approve(address(this), address(router), amount_); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amount_, 0, path, address(this), block.timestamp ); } function _approve( address owner_, address spender_, uint256 amount_ ) private { require(owner_ != address(0), "Approve from zero"); require(spender_ != address(0), "Approve to zero"); _allowances[owner_][spender_] = amount_; emit Approval(owner_, spender_, amount_); } function _availableTransferAmount(address user_) internal view returns (uint256 availableAmount) { availableAmount = taxlessTokens[user_]; if (userPurchaseInfos[user_].purchaseId > 0) { uint256 purchaseId = 0; uint256 curTime = block.timestamp; while(purchaseId < userPurchaseInfos[user_].purchaseId) { if ((curTime - userPurchaseInfos[user_].purchaseTime[purchaseId]) > jeetTime) { uint256 purchaseAmount = userPurchaseInfos[user_].purchaseAmount[purchaseId]; if (purchaseAmount > 0) { availableAmount += purchaseAmount; } } else { break; } purchaseId ++; } } } }
// 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; import "./IERC20.sol"; interface INineLives is IERC20 { struct FeeRate { uint16 totalFeeRate; uint16 LPFeeRate; uint16 MarketingFeeRate; uint16 ProofFeeRate; } struct PurchasingInfo { uint256 purchaseId; mapping(uint256 => uint256) purchaseTime; mapping(uint256 => uint256) purchaseAmount; } struct Param { address pairToken; address routerAddr; address marketingWallet; address proofRevenueWallet; address proofRewardsWallet; address proofAdminWallet; address[] wallets; // 6 % for 6 wallets. FeeRate firstSellFee; // fee when users sell tokens in 24 hours after purchasing FeeRate afterSellFee; // fee when users sell normally FeeRate buyFee; // fee when users buy normally. uint16 maxSellFee; uint16 maxBuyFee; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; 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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
{ "optimizer": { "enabled": true, "runs": 2000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"components":[{"internalType":"address","name":"pairToken","type":"address"},{"internalType":"address","name":"routerAddr","type":"address"},{"internalType":"address","name":"marketingWallet","type":"address"},{"internalType":"address","name":"proofRevenueWallet","type":"address"},{"internalType":"address","name":"proofRewardsWallet","type":"address"},{"internalType":"address","name":"proofAdminWallet","type":"address"},{"internalType":"address[]","name":"wallets","type":"address[]"},{"components":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"internalType":"struct INineLives.FeeRate","name":"firstSellFee","type":"tuple"},{"components":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"internalType":"struct INineLives.FeeRate","name":"afterSellFee","type":"tuple"},{"components":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"internalType":"struct INineLives.FeeRate","name":"buyFee","type":"tuple"},{"internalType":"uint16","name":"maxSellFee","type":"uint16"},{"internalType":"uint16","name":"maxBuyFee","type":"uint16"}],"internalType":"struct INineLives.Param","name":"_param","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASE_POINT","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BUY_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SELL_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ProofStartTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ProofStopTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender_","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"decreaseProofFeeWithBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decreaseProofFeeWithSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user_","type":"address"}],"name":"getAvailableTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLpTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jeetTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pairToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sellFees","outputs":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"trueFalse","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"trueFalse","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"trueFalse","type":"bool"}],"name":"setExcludedFromTransferLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_thresholdPercent","type":"uint16"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"thresholdSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[],"name":"transferLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"internalType":"struct INineLives.FeeRate","name":"feeRate_","type":"tuple"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"jeetTime_","type":"uint256"}],"name":"updateJeetTimeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxWalletPercent_","type":"uint16"},{"internalType":"uint16","name":"transferLimitPercent_","type":"uint16"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWallet_","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proofAdminWallet_","type":"address"}],"name":"updateProofAdminWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proofRevenueWallet_","type":"address"}],"name":"updateProofRevenueWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proofRewardsWallet_","type":"address"}],"name":"updateProofRewardsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"feeId_","type":"uint8"},{"components":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"internalType":"struct INineLives.FeeRate","name":"feeRate_","type":"tuple"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405262015180600f553480156200001857600080fd5b5060405162004aac38038062004aac8339810160408190526200003b9162000e1e565b620000463362000c24565b60e081015180516040820151606083015160209093015161ffff90921692909162000072919062000f88565b6200007e919062000f88565b61ffff1614620000ca5760405162461bcd60e51b8152602060048201526012602482015271696e636f727265637420666565207261746560701b60448201526064015b60405180910390fd5b61010081015180516040820151606083015160209093015161ffff909216929091620000f7919062000f88565b62000103919062000f88565b61ffff16146200014b5760405162461bcd60e51b8152602060048201526012602482015271696e636f727265637420666565207261746560701b6044820152606401620000c1565b61012081015180516040820151606083015160209093015161ffff90921692909162000178919062000f88565b62000184919062000f88565b61ffff16146200019357600080fd5b8060c0015151600614620001ea5760405162461bcd60e51b815260206004820152601860248201527f696e636f72726563742077616c6c657473206c656e67746800000000000000006044820152606401620000c1565b60608101516001600160a01b0316620002525760405162461bcd60e51b8152602060048201526024808201527f696e76616c69642070726f6f6620726576656e75652077616c6c6574206164646044820152637265737360e01b6064820152608401620000c1565b60808101516001600160a01b0316620002ba5760405162461bcd60e51b8152602060048201526024808201527f696e76616c69642070726f6f6620726577617264732077616c6c6574206164646044820152637265737360e01b6064820152608401620000c1565b60408101516001600160a01b0316620003165760405162461bcd60e51b815260206004820181905260248201527f696e76616c6964206d61726b6574696e672077616c6c657420616464726573736044820152606401620000c1565b80516001600160a01b03166200036f5760405162461bcd60e51b815260206004820152601a60248201527f696e76616c6964207061697220746f6b656e20616464726573730000000000006044820152606401620000c1565b60208101516001600160a01b0316620003cb5760405162461bcd60e51b815260206004820152601660248201527f696e76616c696420726f757465722061646472657373000000000000000000006044820152606401620000c1565b60e08101516010805460018082018355600083905283517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67292830180546020808801516040808a015160609a8b015161ffff97881663ffffffff19968716176201000094891685021763ffffffff60201b19908116640100000000938a16840261ffff60301b19908116919091176601000000000000938b168402179098556101008e01518c549a8b01909c558b5199909a0180548c8701518d8601519d8f01519b8b1691891691909117908a168602178b169b8916830288169b909b179888168102989098179099556101208b01518051601180548387015184860151948f0151938b1691909816179689169094029590951790981697861690980290931695909517921690920217905591830151600a80546001600160a01b03199081166001600160a01b03938416179091556080850151600b8054831691841691909117905560a0850151600c80548316918416919091179055828501516009805483169184169190911790558451600d80548316918416919091179055838501516007805490921692169182179055815163c45a015560e01b81529151909263c45a015592600481810193918290030181865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000fb1565b600d546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000627573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200064d919062000fb1565b600880546001600160a01b0319166001600160a01b0392909216919091179055600060066103e8603c620006846012600a620010d5565b62000694906305f5e100620010e6565b620006a09190620010e6565b620006ac919062001108565b620006b8919062001108565b905060005b8260c0015151811015620007a15760008360c001518281518110620006e657620006e66200112b565b602002602001015190508260016000836001600160a01b03166001600160a01b03168152602001908152602001600020600082825462000727919062001141565b90915550506001600160a01b038116600090815260066020526040812080548592906200075690849062001141565b90915550506040518381526001600160a01b0382169060009060008051602062004a8c8339815191529060200160405180910390a3508062000798816200115c565b915050620006bd565b5060006103e86046620007b76012600a620010d5565b620007c7906305f5e100620010e6565b620007d39190620010e6565b620007df919062001108565b7384d4e5cb6e13b0f693692bba1b4f1ab4ef7eae00600090815260016020527f4b7e737520f206fbed80011beb34a4e36adc8729af8a355e1653ab382178f824805492935083929091906200083690849062001141565b90915550507384d4e5cb6e13b0f693692bba1b4f1ab4ef7eae00600090815260066020527f02ddd066caa695a9950958aa1c2d2c25b33f0a103d0024d1e6ad5c3204fcbee580548392906200088d90849062001141565b90915550506040518181527384d4e5cb6e13b0f693692bba1b4f1ab4ef7eae009060009060008051602062004a8c8339815191529060200160405180910390a360006103e86046620008e26012600a620010d5565b620008f2906305f5e100620010e6565b620008fe9190620010e6565b6200090a919062001108565b7399e5de9452ed0cd93d967040d123989b281b281b600090815260016020527f91d9f711b5dcf3834be6bcf1f0fa7743e050a1b2c09041c6df5dc1abe494d468805492935083929091906200096190849062001141565b90915550507399e5de9452ed0cd93d967040d123989b281b281b600090815260066020527fe667366b3b93cb736a31ec363d18a202b76ee4bf0e48bf4dee2b97bbfc9225308054839290620009b890849062001141565b90915550506040518181527399e5de9452ed0cd93d967040d123989b281b281b9060009060008051602062004a8c8339815191529060200160405180910390a36000818362000a09866006620010e6565b62000a176012600a620010d5565b62000a27906305f5e100620010e6565b62000a3391906200117a565b62000a3f91906200117a565b62000a4b91906200117a565b3360009081526001602052604081208054929350839290919062000a7190849062001141565b9091555050336000908152600660205260408120805483929062000a9790849062001141565b9091555050604051818152339060009060008051602062004a8c8339815191529060200160405180910390a361014085015161ffff9081166080526101608601511660a05262000aea6012600a620010d5565b62000afa906305f5e100620010e6565b601290815562000b0c90600a620010d5565b62000b1c906305f5e100620010e6565b60135562000b2d6012600a620010d5565b62000b3d906305f5e100620010e6565b60185550503060009081526004602090815260408083208054600160ff1991821681179092557f6a7fde8711126faee0515fc2776e05d7aff1ee24d8d8925efe21d21633f588c780548216831790557fdbf5a8964cd645cdbf52a8434b37fe5efbc9ac71cda0841eb570e6858b819d448054821683179055600384528285208054821683179055600590935281842080548416821790557f0ce99fbd8ffe748b83c694ed5bb38ae5d3bcd2f96b48f4c18610010b3cdc559080548416821790556008546001600160a01b03168452922080549091169091179055505042600e555062001194565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b038111828210171562000cb05762000cb062000c74565b60405290565b80516001600160a01b038116811462000cce57600080fd5b919050565b600082601f83011262000ce557600080fd5b815160206001600160401b038083111562000d045762000d0462000c74565b8260051b604051601f19603f8301168101818110848211171562000d2c5762000d2c62000c74565b60405293845285810183019383810192508785111562000d4b57600080fd5b83870191505b8482101562000d755762000d658262000cb6565b8352918301919083019062000d51565b979650505050505050565b805161ffff8116811462000cce57600080fd5b60006080828403121562000da657600080fd5b604051608081016001600160401b038111828210171562000dcb5762000dcb62000c74565b60405290508062000ddc8362000d80565b815262000dec6020840162000d80565b602082015262000dff6040840162000d80565b604082015262000e126060840162000d80565b60608201525092915050565b60006020828403121562000e3157600080fd5b81516001600160401b038082111562000e4957600080fd5b908301906102a0828603121562000e5f57600080fd5b62000e6962000c8a565b62000e748362000cb6565b815262000e846020840162000cb6565b602082015262000e976040840162000cb6565b604082015262000eaa6060840162000cb6565b606082015262000ebd6080840162000cb6565b608082015262000ed060a0840162000cb6565b60a082015260c08301518281111562000ee857600080fd5b62000ef68782860162000cd3565b60c08301525062000f0b8660e0850162000d93565b60e0820152610160915062000f238683850162000d93565b61010082015262000f39866101e0850162000d93565b61012082015262000f4e610260840162000d80565b61014082015262000f63610280840162000d80565b91810191909152949350505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681851680830382111562000fa85762000fa862000f72565b01949350505050565b60006020828403121562000fc457600080fd5b62000fcf8262000cb6565b9392505050565b600181815b808511156200101757816000190482111562000ffb5762000ffb62000f72565b808516156200100957918102915b93841c939080029062000fdb565b509250929050565b6000826200103057506001620010cf565b816200103f57506000620010cf565b8160018114620010585760028114620010635762001083565b6001915050620010cf565b60ff84111562001077576200107762000f72565b50506001821b620010cf565b5060208310610133831016604e8410600b8410161715620010a8575081810a620010cf565b620010b4838362000fd6565b8060001904821115620010cb57620010cb62000f72565b0290505b92915050565b600062000fcf60ff8416836200101f565b600081600019048311821515161562001103576200110362000f72565b500290565b6000826200112657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000821982111562001157576200115762000f72565b500190565b600060001982141562001173576200117362000f72565b5060010190565b6000828210156200118f576200118f62000f72565b500390565b60805160a0516138c4620011c86000396000818161066801526115240152600081816106fd0152610abd01526138c46000f3fe6080604052600436106102f65760003560e01c80635f82986e1161018f578063a9059cbb116100e1578063de7f051b1161008a578063f2fde38b11610064578063f2fde38b146108e7578063f8b45b0514610907578063f94325171461091d57600080fd5b8063de7f051b146108a7578063df214416146108c7578063e8078d941461064157600080fd5b8063b5dc4834116100bb578063b5dc483414610821578063d26dfd9814610841578063dd62ed3e1461086157600080fd5b8063a9059cbb146107c1578063aacebbe3146107e1578063b2b28d201461080157600080fd5b8063790ca413116101435780638da5cb5b1161011d5780638da5cb5b1461073d57806395d89b411461075b578063a214d44c146107a157600080fd5b8063790ca413146106d5578063867508ad146106eb5780638c237c691461071f57600080fd5b80636e628f3b116101745780636e628f3b1461065657806370a082311461068a578063715018a6146106c057600080fd5b80635f82986e1461062c57806367c453491461064157600080fd5b80633072a0c9116102485780633f0b70f0116101fc578063587ee7b5116101d6578063587ee7b5146105cc578063590ffdce146105ec5780635ac3c5e81461060c57600080fd5b80633f0b70f01461055a578063412201041461056f578063470624021461058f57600080fd5b8063350669601161022d57806335066960146104be5780633cb7ab531461050c5780633de35b791461052257600080fd5b80633072a0c91461048d578063313ce567146104a257600080fd5b806318160ddd116102aa578063200ccd3911610284578063200ccd391461042d57806323b872dd1461044d57806328bac04c1461046d57600080fd5b806318160ddd146103df5780631886c0bb146104025780631eb25d131461041857600080fd5b80630ac71193116102db5780630ac711931461038a57806310a3f983146103a15780631135daeb146103b657600080fd5b806306fdde0314610302578063095ea7b31461035a57600080fd5b366102fd57005b600080fd5b34801561030e57600080fd5b5060408051808201909152600f81527f39204c69766573204e6574776f726b000000000000000000000000000000000060208201525b6040516103519190613286565b60405180910390f35b34801561036657600080fd5b5061037a61037536600461330e565b610933565b6040519015158152602001610351565b34801561039657600080fd5b5061039f61094a565b005b3480156103ad57600080fd5b5061039f610a05565b3480156103c257600080fd5b506103cc6103e881565b60405161ffff9091168152602001610351565b3480156103eb57600080fd5b506103f4610a70565b604051908152602001610351565b34801561040e57600080fd5b506103f4600f5481565b34801561042457600080fd5b506103f4610a91565b34801561043957600080fd5b5061039f6104483660046133da565b610aae565b34801561045957600080fd5b5061037a610468366004613416565b610cc2565b34801561047957600080fd5b5061039f610488366004613457565b610d60565b34801561049957600080fd5b5061039f610e8b565b3480156104ae57600080fd5b5060405160128152602001610351565b3480156104ca57600080fd5b506104de6104d9366004613481565b610f8f565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610351565b34801561051857600080fd5b506103f460185481565b34801561052e57600080fd5b50600d54610542906001600160a01b031681565b6040516001600160a01b039091168152602001610351565b34801561056657600080fd5b5061039f610fd6565b34801561057b57600080fd5b5061039f61058a3660046134a8565b61103f565b34801561059b57600080fd5b506011546104de9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b3480156105d857600080fd5b5061039f6105e73660046134a8565b611072565b3480156105f857600080fd5b5061039f6106073660046134a8565b6110a5565b34801561061857600080fd5b506103f46106273660046134e1565b6110d8565b34801561063857600080fd5b5061039f6110e3565b34801561064d57600080fd5b5061039f611203565b34801561066257600080fd5b506103cc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069657600080fd5b506103f46106a53660046134e1565b6001600160a01b031660009081526001602052604090205490565b3480156106cc57600080fd5b5061039f611215565b3480156106e157600080fd5b506103f4600e5481565b3480156106f757600080fd5b506103cc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561072b57600080fd5b506008546001600160a01b0316610542565b34801561074957600080fd5b506000546001600160a01b0316610542565b34801561076757600080fd5b5060408051808201909152600681527f4e696e65466900000000000000000000000000000000000000000000000000006020820152610344565b3480156107ad57600080fd5b5061039f6107bc3660046134e1565b611227565b3480156107cd57600080fd5b5061037a6107dc36600461330e565b611306565b3480156107ed57600080fd5b5061039f6107fc3660046134e1565b611313565b34801561080d57600080fd5b5061039f61081c3660046134e1565b6113a0565b34801561082d57600080fd5b5061039f61083c366004613505565b61147f565b34801561084d57600080fd5b5061039f61085c366004613520565b611515565b34801561086d57600080fd5b506103f461087c36600461353c565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108b357600080fd5b5061039f6108c2366004613481565b6116e7565b3480156108d357600080fd5b5061039f6108e23660046134e1565b611747565b3480156108f357600080fd5b5061039f6109023660046134e1565b611826565b34801561091357600080fd5b506103f460125481565b34801561092957600080fd5b506103f460135481565b60006109403384846118b6565b5060015b92915050565b6109526119c3565b6103e8600a610962601282613664565b610970906305f5e100613673565b61097a9190613673565b6109849190613692565b60129081556103e89060059061099b90600a613664565b6109a9906305f5e100613673565b6109b39190613673565b6109bd9190613692565b6013556103e860016109d16012600a613664565b6109df906305f5e100613673565b6109e99190613673565b6109f39190613692565b6018556019805460ff19166001179055565b600c546001600160a01b03163314610a645760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e6765207468697300000000000060448201526064015b60405180910390fd5b6019805460ff19169055565b6000610a7e6012600a613664565b610a8c906305f5e100613673565b905090565b610a9d6012600a613664565b610aab906305f5e100613673565b81565b610ab66119c3565b805161ffff7f0000000000000000000000000000000000000000000000000000000000000000811691161115610b2e5760405162461bcd60e51b815260206004820152601160248201527f746f6f20686967682073656c6c206665650000000000000000000000000000006044820152606401610a5b565b60108260ff1681548110610b4457610b446136b4565b600091825260209091200154606082015161ffff90811666010000000000009092041614610bb45760405162461bcd60e51b815260206004820152601f60248201527f50726f6f66466565526174652063616e206e6f74206265206368616e676564006044820152606401610a5b565b806000015161ffff16816040015182606001518360200151610bd691906136ca565b610be091906136ca565b61ffff1614610c315760405162461bcd60e51b815260206004820152601260248201527f696e636f727265637420666565207261746500000000000000000000000000006044820152606401610a5b565b8060108360ff1681548110610c4857610c486136b4565b600091825260209182902083519101805492840151604085015160609095015161ffff90811666010000000000000267ffff00000000000019968216640100000000029690961667ffffffff0000000019928216620100000263ffffffff1990961691909416179390931792909216179190911790555050565b6001600160a01b038316600090815260026020908152604080832033845290915281205482811015610d365760405162461bcd60e51b815260206004820152601460248201527f5472616e73666572203e20616c6c6f77616e63650000000000000000000000006044820152606401610a5b565b610d4a8533610d4586856136f0565b6118b6565b610d55858585611a1d565b506001949350505050565b610d686119c3565b600a8261ffff161015610dbd5760405162461bcd60e51b815260206004820152601460248201527f4d6178206d7573742062652061626f76652031250000000000000000000000006044820152606401610a5b565b60058161ffff161015610e125760405162461bcd60e51b815260206004820152601660248201527f4d6178206d7573742062652061626f766520302e3525000000000000000000006044820152606401610a5b565b6103e861ffff8316610e266012600a613664565b610e34906305f5e100613673565b610e3e9190613673565b610e489190613692565b60129081556103e89061ffff831690610e6290600a613664565b610e70906305f5e100613673565b610e7a9190613673565b610e849190613692565b6013555050565b610e936119c3565b6011546001660100000000000090910461ffff1611610ef45760405162461bcd60e51b815260206004820152601160248201527f616c7265616479206465637265617365640000000000000000000000000000006044820152606401610a5b565b6203f480600e5442610f0691906136f0565b1015610f545760405162461bcd60e51b815260206004820152600860248201527f746f6f20736f6f6e0000000000000000000000000000000000000000000000006044820152606401610a5b565b601180546601000000000000900461ffff16906006610f7283613707565b91906101000a81548161ffff021916908361ffff16021790555050565b60108181548110610f9f57600080fd5b60009182526020909120015461ffff8082169250620100008204811691640100000000810482169166010000000000009091041684565b600c546001600160a01b031633146110305760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e676520746869730000000000006044820152606401610a5b565b6019805460ff19166001179055565b6110476119c3565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b61107a6119c3565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6110ad6119c3565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b600061094482611df7565b6110eb6119c3565b60016010600181548110611101576111016136b4565b6000918252602090912001546601000000000000900461ffff16116111685760405162461bcd60e51b815260206004820152601160248201527f616c7265616479206465637265617365640000000000000000000000000000006044820152606401610a5b565b6203f480600e544261117a91906136f0565b10156111c85760405162461bcd60e51b815260206004820152600860248201527f746f6f20736f6f6e0000000000000000000000000000000000000000000000006044820152606401610a5b565b60106001815481106111dc576111dc6136b4565b600091825260209091200180546601000000000000900461ffff16906006610f7283613707565b61120b6119c3565b611213611ede565b565b61121d6119c3565b61121360006121d3565b600b546001600160a01b031633146112815760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792050726f6f662063616e206368616e676520746869732e00000000006044820152606401610a5b565b6001600160a01b0381166112d75760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610940338484611a1d565b61131b6119c3565b6001600160a01b0381166113715760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610a5b565b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600c546001600160a01b031633146113fa5760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e676520746869730000000000006044820152606401610a5b565b6001600160a01b0381166114505760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6114876119c3565b60195460ff166114d95760405162461bcd60e51b815260206004820152600e60248201527f5478206e6f7420737461727465640000000000000000000000000000000000006044820152606401610a5b565b6103e861ffff82166114ed6012600a613664565b6114fb906305f5e100613673565b6115059190613673565b61150f9190613692565b60185550565b61151d6119c3565b805161ffff7f00000000000000000000000000000000000000000000000000000000000000008116911611156115955760405162461bcd60e51b815260206004820152601060248201527f746f6f20686967682062757920666565000000000000000000000000000000006044820152606401610a5b565b601154606082015161ffff908116660100000000000090920416146115fc5760405162461bcd60e51b815260206004820152601f60248201527f50726f6f66466565526174652063616e206e6f74206265206368616e676564006044820152606401610a5b565b806000015161ffff1681604001518260600151836020015161161e91906136ca565b61162891906136ca565b61ffff16146116795760405162461bcd60e51b815260206004820152601260248201527f696e636f727265637420666565207261746500000000000000000000000000006044820152606401610a5b565b8051601180546020840151604085015160609095015161ffff90811666010000000000000267ffff00000000000019968216640100000000029690961667ffffffff0000000019928216620100000263ffffffff199094169190951617919091171691909117919091179055565b6116ef6119c3565b620151808111156117425760405162461bcd60e51b815260206004820152601460248201527f4d61782074696d65206f6620323420686f7572730000000000000000000000006044820152606401610a5b565b600f55565b600a546001600160a01b031633146117a15760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792050726f6f662063616e206368616e676520746869732e00000000006044820152606401610a5b565b6001600160a01b0381166117f75760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61182e6119c3565b6001600160a01b0381166118aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a5b565b6118b3816121d3565b50565b6001600160a01b03831661190c5760405162461bcd60e51b815260206004820152601160248201527f417070726f76652066726f6d207a65726f0000000000000000000000000000006044820152606401610a5b565b6001600160a01b0382166119625760405162461bcd60e51b815260206004820152600f60248201527f417070726f766520746f207a65726f00000000000000000000000000000000006044820152606401610a5b565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146112135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5b565b6001600160a01b038316611a735760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606401610a5b565b6001600160a01b038216611ac95760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610a5b565b60008111611b195760405162461bcd60e51b815260206004820152600b60248201527f7a65726f20616d6f756e740000000000000000000000000000000000000000006044820152606401610a5b565b6001600160a01b03821660009081526005602052604090205460ff1680611b865750611b476012600a613664565b611b5290600a613673565b601254611b5f9190613725565b6001600160a01b038316600090815260016020526040902054611b83908390613725565b11155b611bd25760405162461bcd60e51b815260206004820152600f60248201527f6f766572206d61782077616c6c657400000000000000000000000000000000006044820152606401610a5b565b60195460ff16611c67576000546001600160a01b03848116911614801590611c0857506000546001600160a01b03838116911614155b15611c555760405162461bcd60e51b815260206004820152600e60248201527f5478206e6f7420737461727465640000000000000000000000000000000000006044820152606401610a5b565b611c628383836001612230565b505050565b6001600160a01b03831660009081526003602052604090205460ff16158015611ca957506001600160a01b03821660009081526003602052604090205460ff16155b8015611cc357506008546001600160a01b03848116911614155b15611d3b57611cd46012600a613664565b611cdf906001613673565b601354611cec9190613725565b811115611d3b5760405162461bcd60e51b815260206004820152600c60248201527f4f766572206d61782054584e00000000000000000000000000000000000000006044820152606401610a5b565b6008546001600160a01b03848116911614801590611d6757506008546001600160a01b03838116911614155b15611d7957611c628383836000612230565b6001600160a01b03831660009081526004602052604090205460ff16151560011480611dc257506001600160a01b03821660009081526004602052604090205460ff1615156001145b80611dda575060195460ff6101009091041615156001145b15611dec57611c628383836001612230565b611c628383836125ea565b6001600160a01b03811660009081526006602090815260408083205460179092529091205415611ed9576000425b6001600160a01b038416600090815260176020526040902054821015611ed657600f546001600160a01b0385166000908152601760209081526040808320868452600101909152902054611e7990836136f0565b1115611ebf576001600160a01b03841660009081526017602090815260408083208584526002019091529020548015611eb957611eb68185613725565b93505b50611ec4565b611ed6565b81611ece8161373d565b925050611e25565b50505b919050565b6019805461ff00191661010017905530600090815260016020526040812054601454909190611f0f90600290613692565b611f1990836136f0565b9050611f2481612891565b476000611f3082612a50565b905060008360155483611f439190613673565b611f4d9190613692565b905060008460165484611f609190613673565b611f6a9190613692565b600954909150611f849083906001600160a01b0316612cc6565b611fa3611f92600283613692565b600a546001600160a01b0316612cc6565b611fc2611fb1600283613692565b600b546001600160a01b0316612cc6565b600d546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561200b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202f9190613758565b306000818152600160205260409020546007549293509161205a91906001600160a01b0316836118b6565b600d546007546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af11580156120c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ec9190613771565b50600754600d546009546040517fe8e337000000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152306024820152604481018690526064810185905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af1158015612188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ac919061378e565b505060006014819055601581905560165550506019805461ff001916905550505050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038416600090815260016020526040902054828110156122995760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732062616c616e636500000000000000006044820152606401610a5b565b816124a4576001600160a01b03851660009081526017602090815260408083206006909252909120548490811161230057506001600160a01b0386166000908152600660205260408120805486919083906122f59084906136f0565b9091555061233f9050565b6001600160a01b03871660009081526006602052604090205461232390866136f0565b6001600160a01b03881660009081526006602052604081205590505b80158061234c5750815415155b6123985760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f75676820617661696c61626c652062616c616e6365000000006044820152606401610a5b565b8154156124a1576000425b8354821080156123b35750600083115b1561249e57600f5460008381526001860160205260409020546123d690836136f0565b11806123e0575082155b61242c5760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f75676820617661696c61626c652062616c616e6365000000006044820152606401610a5b565b6000828152600285016020526040902054801561248b578381116124505780612452565b835b905061245e81856136f0565b935080856002016000858152602001908152602001600020600082825461248591906136f0565b90915550505b826124958161373d565b935050506123a3565b50505b50505b6001600160a01b038516600090815260016020526040812080548592906124cc9084906136f0565b90915550506001600160a01b038416600090815260016020526040812080548592906124f9908490613725565b90915550506001600160a01b03841660009081526006602052604081208054859290612526908490613725565b90915550508115612596576001600160a01b03851660009081526006602052604090205483111561255857600061257c565b6001600160a01b03851660009081526006602052604090205461257c9084906136f0565b6001600160a01b0386166000908152600660205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516125db91815260200190565b60405180910390a35050505050565b6001600160a01b038316600090815260016020526040812054819081908190819086111561265a5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732062616c616e636500000000000000006044820152606401610a5b565b6008546001600160a01b0389811691161415612723576040805160808101825260115461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201526126c0908790612da6565b6001600160a01b038c1660009081526017602090815260408083208054808552600282018452828520869055600182019093529083204290558054979c50929a50949850929650909450929083906127178361373d565b91905055505050612771565b6008546001600160a01b038881169116141561277157601854306000908152600160205260409020541061275957612759611ede565b6127638887612e4a565b939850929650909450925090505b82601460008282546127839190613725565b92505081905550816015600082825461279c9190613725565b9250508190555080601660008282546127b59190613725565b90915550506001600160a01b038816600090815260016020526040812080548892906127e29084906136f0565b90915550506001600160a01b0387166000908152600160205260408120805486929061280f908490613725565b90915550503060009081526001602052604081208054879290612833908490613725565b92505081905550866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161287f91815260200190565b60405180910390a35050505050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106128c8576128c86136b4565b6001600160a01b039283166020918202929092010152600d548251911690829060019081106128f9576128f96136b4565b6001600160a01b03928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561296b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298f91906137bc565b816002815181106129a2576129a26136b4565b6001600160a01b0392831660209182029290920101526007546129c891309116846118b6565b6007546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac94790612a1a90859060009086903090429060040161381d565b600060405180830381600087803b158015612a3457600080fd5b505af1158015612a48573d6000803e3d6000fd5b505050505050565b604080516002808252606082018352600092839291906020830190803683375050600754604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afb91906137bc565b81600081518110612b0e57612b0e6136b4565b6001600160a01b039283166020918202929092010152600d54825191169082906001908110612b3f57612b3f6136b4565b6001600160a01b039283166020918202929092010152600d546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa158015612b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbd9190613758565b6007546040517fb6f9de950000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063b6f9de95908690612c1090600090879030904290600401613859565b6000604051808303818588803b158015612c2957600080fd5b505af1158015612c3d573d6000803e3d6000fd5b5050600d546040516370a0823160e01b8152306004820152600094506001600160a01b0390911692506370a082319150602401602060405180830381865afa158015612c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb19190613758565b9050612cbd82826136f0565b95945050505050565b600d546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015612d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d569190613771565b612da25760405162461bcd60e51b815260206004820152601460248201527f55534443207472616e73666572206661696c65640000000000000000000000006044820152606401610a5b565b5050565b60008060008060006103e861ffff16866000015161ffff1688612dc99190613673565b612dd39190613692565b60208701519095506103e890612ded9061ffff1689613673565b612df79190613692565b60408701519094506103e890612e119061ffff1689613673565b612e1b9190613692565b925082612e2885876136f0565b612e3291906136f0565b9150612e3e85886136f0565b90509295509295909350565b600080808080806002604051908082528060200260200182016040528015612e7c578160200160208202803683370190505b506001600160a01b0389166000908152601760209081526040808320600690925290912054919250908811612f0b578782600181518110612ebf57612ebf6136b4565b60200260200101818152505087600660008b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612f0091906136f0565b90915550612f629050565b6001600160a01b038916600090815260066020526040902054825183906001908110612f3957612f396136b4565b6020908102919091018101919091526001600160a01b038a166000908152600690915260408120555b600082600181518110612f7757612f776136b4565b602002602001015189612f8a91906136f0565b82549091501561308a576000425b835482108015612fa85750600083115b1561308757600f546000838152600186016020526040812054909190612fce90846136f0565b60008581526002880160205260409020549110159150801561307357848111612ff75780612ff9565b845b905060008261300957600161300c565b60005b905081888260ff1681518110613024576130246136b4565b602002602001018181516130389190613725565b90525061304582876136f0565b955081876002016000878152602001908152602001600020600082825461306c91906136f0565b9091555050505b8361307d8161373d565b9450505050612f98565b50505b80156130d85760405162461bcd60e51b815260206004820152601260248201527f6e6f7420656e6f7567682062616c616e636500000000000000000000000000006044820152606401610a5b565b600080600080600080886000815181106130f4576130f46136b4565b602002602001015111156131d65761318d88600081518110613118576131186136b4565b60200260200101516010600081548110613134576131346136b4565b600091825260209182902060408051608081018252929091015461ffff80821684526201000082048116948401949094526401000000008104841691830191909152660100000000000090049091166060820152612da6565b9398509196509450925090506131a3848d613725565b9b506131af838c613725565b9a506131bb828b613725565b99506131c7858e613725565b9c506131d3818a613725565b98505b6000886001815181106131eb576131eb6136b4565b602002602001015111156132745761322b8860018151811061320f5761320f6136b4565b60200260200101516010600181548110613134576131346136b4565b939850919650945092509050613241848d613725565b9b5061324d838c613725565b9a50613259828b613725565b9950613265858e613725565b9c50613271818a613725565b98505b50505050505050509295509295909350565b600060208083528351808285015260005b818110156132b357858101830151858201604001528201613297565b818111156132c5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b03811681146118b357600080fd5b6000806040838503121561332157600080fd5b823561332c816132f9565b946020939093013593505050565b803561ffff81168114611ed957600080fd5b60006080828403121561335e57600080fd5b6040516080810181811067ffffffffffffffff8211171561338f57634e487b7160e01b600052604160045260246000fd5b60405290508061339e8361333a565b81526133ac6020840161333a565b60208201526133bd6040840161333a565b60408201526133ce6060840161333a565b60608201525092915050565b60008060a083850312156133ed57600080fd5b823560ff811681146133fe57600080fd5b915061340d846020850161334c565b90509250929050565b60008060006060848603121561342b57600080fd5b8335613436816132f9565b92506020840135613446816132f9565b929592945050506040919091013590565b6000806040838503121561346a57600080fd5b6134738361333a565b915061340d6020840161333a565b60006020828403121561349357600080fd5b5035919050565b80151581146118b357600080fd5b600080604083850312156134bb57600080fd5b82356134c6816132f9565b915060208301356134d68161349a565b809150509250929050565b6000602082840312156134f357600080fd5b81356134fe816132f9565b9392505050565b60006020828403121561351757600080fd5b6134fe8261333a565b60006080828403121561353257600080fd5b6134fe838361334c565b6000806040838503121561354f57600080fd5b823561355a816132f9565b915060208301356134d6816132f9565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156135bb5781600019048211156135a1576135a161356a565b808516156135ae57918102915b93841c9390800290613585565b509250929050565b6000826135d257506001610944565b816135df57506000610944565b81600181146135f557600281146135ff5761361b565b6001915050610944565b60ff8411156136105761361061356a565b50506001821b610944565b5060208310610133831016604e8410600b841016171561363e575081810a610944565b6136488383613580565b806000190482111561365c5761365c61356a565b029392505050565b60006134fe60ff8416836135c3565b600081600019048311821515161561368d5761368d61356a565b500290565b6000826136af57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168185168083038211156136e7576136e761356a565b01949350505050565b6000828210156137025761370261356a565b500390565b600061ffff82168061371b5761371b61356a565b6000190192915050565b600082198211156137385761373861356a565b500190565b60006000198214156137515761375161356a565b5060010190565b60006020828403121561376a57600080fd5b5051919050565b60006020828403121561378357600080fd5b81516134fe8161349a565b6000806000606084860312156137a357600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156137ce57600080fd5b81516134fe816132f9565b600081518084526020808501945080840160005b838110156138125781516001600160a01b0316875295820195908201906001016137ed565b509495945050505050565b85815284602082015260a06040820152600061383c60a08301866137d9565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061387260808301866137d9565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212207aa3194acc3216a95f1d1f7be43757dc7ecd85ece42f133a1b20cc50922a5a8264736f6c634300080a0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000027a9a58463c0f99cce0e7cd4bf995619460e3a2f000000000000000000000000e9b4d32f829951a3ce145d2caa84cf66af56ca5e0000000000000000000000001bf4cb781b97724a8a22ef064dce6bbc1c26cdda000000000000000000000000acfb878960bcda38782d854efb2e687b57e31f0900000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000017c0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000014a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000cc4cef22c65cb9615dacf0c95253a036d3fcf7ab000000000000000000000000ce07045d946797fc6b8857dc3cc0a972fcabdb26000000000000000000000000290116f3af26a9e30c3989f9210416bd1cbb5d470000000000000000000000007e86ce46eb49b1ca67dd7eaf2923a4fbea159ce50000000000000000000000000cce3498b9865c8dd54ab7eb9a0d2f562721fd30000000000000000000000000e481f9c3ad5c235076161b7556f8d0b49d41b9f2
Deployed Bytecode
0x6080604052600436106102f65760003560e01c80635f82986e1161018f578063a9059cbb116100e1578063de7f051b1161008a578063f2fde38b11610064578063f2fde38b146108e7578063f8b45b0514610907578063f94325171461091d57600080fd5b8063de7f051b146108a7578063df214416146108c7578063e8078d941461064157600080fd5b8063b5dc4834116100bb578063b5dc483414610821578063d26dfd9814610841578063dd62ed3e1461086157600080fd5b8063a9059cbb146107c1578063aacebbe3146107e1578063b2b28d201461080157600080fd5b8063790ca413116101435780638da5cb5b1161011d5780638da5cb5b1461073d57806395d89b411461075b578063a214d44c146107a157600080fd5b8063790ca413146106d5578063867508ad146106eb5780638c237c691461071f57600080fd5b80636e628f3b116101745780636e628f3b1461065657806370a082311461068a578063715018a6146106c057600080fd5b80635f82986e1461062c57806367c453491461064157600080fd5b80633072a0c9116102485780633f0b70f0116101fc578063587ee7b5116101d6578063587ee7b5146105cc578063590ffdce146105ec5780635ac3c5e81461060c57600080fd5b80633f0b70f01461055a578063412201041461056f578063470624021461058f57600080fd5b8063350669601161022d57806335066960146104be5780633cb7ab531461050c5780633de35b791461052257600080fd5b80633072a0c91461048d578063313ce567146104a257600080fd5b806318160ddd116102aa578063200ccd3911610284578063200ccd391461042d57806323b872dd1461044d57806328bac04c1461046d57600080fd5b806318160ddd146103df5780631886c0bb146104025780631eb25d131461041857600080fd5b80630ac71193116102db5780630ac711931461038a57806310a3f983146103a15780631135daeb146103b657600080fd5b806306fdde0314610302578063095ea7b31461035a57600080fd5b366102fd57005b600080fd5b34801561030e57600080fd5b5060408051808201909152600f81527f39204c69766573204e6574776f726b000000000000000000000000000000000060208201525b6040516103519190613286565b60405180910390f35b34801561036657600080fd5b5061037a61037536600461330e565b610933565b6040519015158152602001610351565b34801561039657600080fd5b5061039f61094a565b005b3480156103ad57600080fd5b5061039f610a05565b3480156103c257600080fd5b506103cc6103e881565b60405161ffff9091168152602001610351565b3480156103eb57600080fd5b506103f4610a70565b604051908152602001610351565b34801561040e57600080fd5b506103f4600f5481565b34801561042457600080fd5b506103f4610a91565b34801561043957600080fd5b5061039f6104483660046133da565b610aae565b34801561045957600080fd5b5061037a610468366004613416565b610cc2565b34801561047957600080fd5b5061039f610488366004613457565b610d60565b34801561049957600080fd5b5061039f610e8b565b3480156104ae57600080fd5b5060405160128152602001610351565b3480156104ca57600080fd5b506104de6104d9366004613481565b610f8f565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610351565b34801561051857600080fd5b506103f460185481565b34801561052e57600080fd5b50600d54610542906001600160a01b031681565b6040516001600160a01b039091168152602001610351565b34801561056657600080fd5b5061039f610fd6565b34801561057b57600080fd5b5061039f61058a3660046134a8565b61103f565b34801561059b57600080fd5b506011546104de9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b3480156105d857600080fd5b5061039f6105e73660046134a8565b611072565b3480156105f857600080fd5b5061039f6106073660046134a8565b6110a5565b34801561061857600080fd5b506103f46106273660046134e1565b6110d8565b34801561063857600080fd5b5061039f6110e3565b34801561064d57600080fd5b5061039f611203565b34801561066257600080fd5b506103cc7f000000000000000000000000000000000000000000000000000000000000008c81565b34801561069657600080fd5b506103f46106a53660046134e1565b6001600160a01b031660009081526001602052604090205490565b3480156106cc57600080fd5b5061039f611215565b3480156106e157600080fd5b506103f4600e5481565b3480156106f757600080fd5b506103cc7f00000000000000000000000000000000000000000000000000000000000001a481565b34801561072b57600080fd5b506008546001600160a01b0316610542565b34801561074957600080fd5b506000546001600160a01b0316610542565b34801561076757600080fd5b5060408051808201909152600681527f4e696e65466900000000000000000000000000000000000000000000000000006020820152610344565b3480156107ad57600080fd5b5061039f6107bc3660046134e1565b611227565b3480156107cd57600080fd5b5061037a6107dc36600461330e565b611306565b3480156107ed57600080fd5b5061039f6107fc3660046134e1565b611313565b34801561080d57600080fd5b5061039f61081c3660046134e1565b6113a0565b34801561082d57600080fd5b5061039f61083c366004613505565b61147f565b34801561084d57600080fd5b5061039f61085c366004613520565b611515565b34801561086d57600080fd5b506103f461087c36600461353c565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108b357600080fd5b5061039f6108c2366004613481565b6116e7565b3480156108d357600080fd5b5061039f6108e23660046134e1565b611747565b3480156108f357600080fd5b5061039f6109023660046134e1565b611826565b34801561091357600080fd5b506103f460125481565b34801561092957600080fd5b506103f460135481565b60006109403384846118b6565b5060015b92915050565b6109526119c3565b6103e8600a610962601282613664565b610970906305f5e100613673565b61097a9190613673565b6109849190613692565b60129081556103e89060059061099b90600a613664565b6109a9906305f5e100613673565b6109b39190613673565b6109bd9190613692565b6013556103e860016109d16012600a613664565b6109df906305f5e100613673565b6109e99190613673565b6109f39190613692565b6018556019805460ff19166001179055565b600c546001600160a01b03163314610a645760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e6765207468697300000000000060448201526064015b60405180910390fd5b6019805460ff19169055565b6000610a7e6012600a613664565b610a8c906305f5e100613673565b905090565b610a9d6012600a613664565b610aab906305f5e100613673565b81565b610ab66119c3565b805161ffff7f00000000000000000000000000000000000000000000000000000000000001a4811691161115610b2e5760405162461bcd60e51b815260206004820152601160248201527f746f6f20686967682073656c6c206665650000000000000000000000000000006044820152606401610a5b565b60108260ff1681548110610b4457610b446136b4565b600091825260209091200154606082015161ffff90811666010000000000009092041614610bb45760405162461bcd60e51b815260206004820152601f60248201527f50726f6f66466565526174652063616e206e6f74206265206368616e676564006044820152606401610a5b565b806000015161ffff16816040015182606001518360200151610bd691906136ca565b610be091906136ca565b61ffff1614610c315760405162461bcd60e51b815260206004820152601260248201527f696e636f727265637420666565207261746500000000000000000000000000006044820152606401610a5b565b8060108360ff1681548110610c4857610c486136b4565b600091825260209182902083519101805492840151604085015160609095015161ffff90811666010000000000000267ffff00000000000019968216640100000000029690961667ffffffff0000000019928216620100000263ffffffff1990961691909416179390931792909216179190911790555050565b6001600160a01b038316600090815260026020908152604080832033845290915281205482811015610d365760405162461bcd60e51b815260206004820152601460248201527f5472616e73666572203e20616c6c6f77616e63650000000000000000000000006044820152606401610a5b565b610d4a8533610d4586856136f0565b6118b6565b610d55858585611a1d565b506001949350505050565b610d686119c3565b600a8261ffff161015610dbd5760405162461bcd60e51b815260206004820152601460248201527f4d6178206d7573742062652061626f76652031250000000000000000000000006044820152606401610a5b565b60058161ffff161015610e125760405162461bcd60e51b815260206004820152601660248201527f4d6178206d7573742062652061626f766520302e3525000000000000000000006044820152606401610a5b565b6103e861ffff8316610e266012600a613664565b610e34906305f5e100613673565b610e3e9190613673565b610e489190613692565b60129081556103e89061ffff831690610e6290600a613664565b610e70906305f5e100613673565b610e7a9190613673565b610e849190613692565b6013555050565b610e936119c3565b6011546001660100000000000090910461ffff1611610ef45760405162461bcd60e51b815260206004820152601160248201527f616c7265616479206465637265617365640000000000000000000000000000006044820152606401610a5b565b6203f480600e5442610f0691906136f0565b1015610f545760405162461bcd60e51b815260206004820152600860248201527f746f6f20736f6f6e0000000000000000000000000000000000000000000000006044820152606401610a5b565b601180546601000000000000900461ffff16906006610f7283613707565b91906101000a81548161ffff021916908361ffff16021790555050565b60108181548110610f9f57600080fd5b60009182526020909120015461ffff8082169250620100008204811691640100000000810482169166010000000000009091041684565b600c546001600160a01b031633146110305760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e676520746869730000000000006044820152606401610a5b565b6019805460ff19166001179055565b6110476119c3565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b61107a6119c3565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6110ad6119c3565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b600061094482611df7565b6110eb6119c3565b60016010600181548110611101576111016136b4565b6000918252602090912001546601000000000000900461ffff16116111685760405162461bcd60e51b815260206004820152601160248201527f616c7265616479206465637265617365640000000000000000000000000000006044820152606401610a5b565b6203f480600e544261117a91906136f0565b10156111c85760405162461bcd60e51b815260206004820152600860248201527f746f6f20736f6f6e0000000000000000000000000000000000000000000000006044820152606401610a5b565b60106001815481106111dc576111dc6136b4565b600091825260209091200180546601000000000000900461ffff16906006610f7283613707565b61120b6119c3565b611213611ede565b565b61121d6119c3565b61121360006121d3565b600b546001600160a01b031633146112815760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792050726f6f662063616e206368616e676520746869732e00000000006044820152606401610a5b565b6001600160a01b0381166112d75760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610940338484611a1d565b61131b6119c3565b6001600160a01b0381166113715760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610a5b565b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600c546001600160a01b031633146113fa5760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e676520746869730000000000006044820152606401610a5b565b6001600160a01b0381166114505760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6114876119c3565b60195460ff166114d95760405162461bcd60e51b815260206004820152600e60248201527f5478206e6f7420737461727465640000000000000000000000000000000000006044820152606401610a5b565b6103e861ffff82166114ed6012600a613664565b6114fb906305f5e100613673565b6115059190613673565b61150f9190613692565b60185550565b61151d6119c3565b805161ffff7f000000000000000000000000000000000000000000000000000000000000008c8116911611156115955760405162461bcd60e51b815260206004820152601060248201527f746f6f20686967682062757920666565000000000000000000000000000000006044820152606401610a5b565b601154606082015161ffff908116660100000000000090920416146115fc5760405162461bcd60e51b815260206004820152601f60248201527f50726f6f66466565526174652063616e206e6f74206265206368616e676564006044820152606401610a5b565b806000015161ffff1681604001518260600151836020015161161e91906136ca565b61162891906136ca565b61ffff16146116795760405162461bcd60e51b815260206004820152601260248201527f696e636f727265637420666565207261746500000000000000000000000000006044820152606401610a5b565b8051601180546020840151604085015160609095015161ffff90811666010000000000000267ffff00000000000019968216640100000000029690961667ffffffff0000000019928216620100000263ffffffff199094169190951617919091171691909117919091179055565b6116ef6119c3565b620151808111156117425760405162461bcd60e51b815260206004820152601460248201527f4d61782074696d65206f6620323420686f7572730000000000000000000000006044820152606401610a5b565b600f55565b600a546001600160a01b031633146117a15760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792050726f6f662063616e206368616e676520746869732e00000000006044820152606401610a5b565b6001600160a01b0381166117f75760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61182e6119c3565b6001600160a01b0381166118aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a5b565b6118b3816121d3565b50565b6001600160a01b03831661190c5760405162461bcd60e51b815260206004820152601160248201527f417070726f76652066726f6d207a65726f0000000000000000000000000000006044820152606401610a5b565b6001600160a01b0382166119625760405162461bcd60e51b815260206004820152600f60248201527f417070726f766520746f207a65726f00000000000000000000000000000000006044820152606401610a5b565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146112135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5b565b6001600160a01b038316611a735760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606401610a5b565b6001600160a01b038216611ac95760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610a5b565b60008111611b195760405162461bcd60e51b815260206004820152600b60248201527f7a65726f20616d6f756e740000000000000000000000000000000000000000006044820152606401610a5b565b6001600160a01b03821660009081526005602052604090205460ff1680611b865750611b476012600a613664565b611b5290600a613673565b601254611b5f9190613725565b6001600160a01b038316600090815260016020526040902054611b83908390613725565b11155b611bd25760405162461bcd60e51b815260206004820152600f60248201527f6f766572206d61782077616c6c657400000000000000000000000000000000006044820152606401610a5b565b60195460ff16611c67576000546001600160a01b03848116911614801590611c0857506000546001600160a01b03838116911614155b15611c555760405162461bcd60e51b815260206004820152600e60248201527f5478206e6f7420737461727465640000000000000000000000000000000000006044820152606401610a5b565b611c628383836001612230565b505050565b6001600160a01b03831660009081526003602052604090205460ff16158015611ca957506001600160a01b03821660009081526003602052604090205460ff16155b8015611cc357506008546001600160a01b03848116911614155b15611d3b57611cd46012600a613664565b611cdf906001613673565b601354611cec9190613725565b811115611d3b5760405162461bcd60e51b815260206004820152600c60248201527f4f766572206d61782054584e00000000000000000000000000000000000000006044820152606401610a5b565b6008546001600160a01b03848116911614801590611d6757506008546001600160a01b03838116911614155b15611d7957611c628383836000612230565b6001600160a01b03831660009081526004602052604090205460ff16151560011480611dc257506001600160a01b03821660009081526004602052604090205460ff1615156001145b80611dda575060195460ff6101009091041615156001145b15611dec57611c628383836001612230565b611c628383836125ea565b6001600160a01b03811660009081526006602090815260408083205460179092529091205415611ed9576000425b6001600160a01b038416600090815260176020526040902054821015611ed657600f546001600160a01b0385166000908152601760209081526040808320868452600101909152902054611e7990836136f0565b1115611ebf576001600160a01b03841660009081526017602090815260408083208584526002019091529020548015611eb957611eb68185613725565b93505b50611ec4565b611ed6565b81611ece8161373d565b925050611e25565b50505b919050565b6019805461ff00191661010017905530600090815260016020526040812054601454909190611f0f90600290613692565b611f1990836136f0565b9050611f2481612891565b476000611f3082612a50565b905060008360155483611f439190613673565b611f4d9190613692565b905060008460165484611f609190613673565b611f6a9190613692565b600954909150611f849083906001600160a01b0316612cc6565b611fa3611f92600283613692565b600a546001600160a01b0316612cc6565b611fc2611fb1600283613692565b600b546001600160a01b0316612cc6565b600d546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561200b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202f9190613758565b306000818152600160205260409020546007549293509161205a91906001600160a01b0316836118b6565b600d546007546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af11580156120c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ec9190613771565b50600754600d546009546040517fe8e337000000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152306024820152604481018690526064810185905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af1158015612188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ac919061378e565b505060006014819055601581905560165550506019805461ff001916905550505050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038416600090815260016020526040902054828110156122995760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732062616c616e636500000000000000006044820152606401610a5b565b816124a4576001600160a01b03851660009081526017602090815260408083206006909252909120548490811161230057506001600160a01b0386166000908152600660205260408120805486919083906122f59084906136f0565b9091555061233f9050565b6001600160a01b03871660009081526006602052604090205461232390866136f0565b6001600160a01b03881660009081526006602052604081205590505b80158061234c5750815415155b6123985760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f75676820617661696c61626c652062616c616e6365000000006044820152606401610a5b565b8154156124a1576000425b8354821080156123b35750600083115b1561249e57600f5460008381526001860160205260409020546123d690836136f0565b11806123e0575082155b61242c5760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f75676820617661696c61626c652062616c616e6365000000006044820152606401610a5b565b6000828152600285016020526040902054801561248b578381116124505780612452565b835b905061245e81856136f0565b935080856002016000858152602001908152602001600020600082825461248591906136f0565b90915550505b826124958161373d565b935050506123a3565b50505b50505b6001600160a01b038516600090815260016020526040812080548592906124cc9084906136f0565b90915550506001600160a01b038416600090815260016020526040812080548592906124f9908490613725565b90915550506001600160a01b03841660009081526006602052604081208054859290612526908490613725565b90915550508115612596576001600160a01b03851660009081526006602052604090205483111561255857600061257c565b6001600160a01b03851660009081526006602052604090205461257c9084906136f0565b6001600160a01b0386166000908152600660205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516125db91815260200190565b60405180910390a35050505050565b6001600160a01b038316600090815260016020526040812054819081908190819086111561265a5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732062616c616e636500000000000000006044820152606401610a5b565b6008546001600160a01b0389811691161415612723576040805160808101825260115461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201526126c0908790612da6565b6001600160a01b038c1660009081526017602090815260408083208054808552600282018452828520869055600182019093529083204290558054979c50929a50949850929650909450929083906127178361373d565b91905055505050612771565b6008546001600160a01b038881169116141561277157601854306000908152600160205260409020541061275957612759611ede565b6127638887612e4a565b939850929650909450925090505b82601460008282546127839190613725565b92505081905550816015600082825461279c9190613725565b9250508190555080601660008282546127b59190613725565b90915550506001600160a01b038816600090815260016020526040812080548892906127e29084906136f0565b90915550506001600160a01b0387166000908152600160205260408120805486929061280f908490613725565b90915550503060009081526001602052604081208054879290612833908490613725565b92505081905550866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161287f91815260200190565b60405180910390a35050505050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106128c8576128c86136b4565b6001600160a01b039283166020918202929092010152600d548251911690829060019081106128f9576128f96136b4565b6001600160a01b03928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561296b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298f91906137bc565b816002815181106129a2576129a26136b4565b6001600160a01b0392831660209182029290920101526007546129c891309116846118b6565b6007546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac94790612a1a90859060009086903090429060040161381d565b600060405180830381600087803b158015612a3457600080fd5b505af1158015612a48573d6000803e3d6000fd5b505050505050565b604080516002808252606082018352600092839291906020830190803683375050600754604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afb91906137bc565b81600081518110612b0e57612b0e6136b4565b6001600160a01b039283166020918202929092010152600d54825191169082906001908110612b3f57612b3f6136b4565b6001600160a01b039283166020918202929092010152600d546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa158015612b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbd9190613758565b6007546040517fb6f9de950000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063b6f9de95908690612c1090600090879030904290600401613859565b6000604051808303818588803b158015612c2957600080fd5b505af1158015612c3d573d6000803e3d6000fd5b5050600d546040516370a0823160e01b8152306004820152600094506001600160a01b0390911692506370a082319150602401602060405180830381865afa158015612c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb19190613758565b9050612cbd82826136f0565b95945050505050565b600d546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015612d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d569190613771565b612da25760405162461bcd60e51b815260206004820152601460248201527f55534443207472616e73666572206661696c65640000000000000000000000006044820152606401610a5b565b5050565b60008060008060006103e861ffff16866000015161ffff1688612dc99190613673565b612dd39190613692565b60208701519095506103e890612ded9061ffff1689613673565b612df79190613692565b60408701519094506103e890612e119061ffff1689613673565b612e1b9190613692565b925082612e2885876136f0565b612e3291906136f0565b9150612e3e85886136f0565b90509295509295909350565b600080808080806002604051908082528060200260200182016040528015612e7c578160200160208202803683370190505b506001600160a01b0389166000908152601760209081526040808320600690925290912054919250908811612f0b578782600181518110612ebf57612ebf6136b4565b60200260200101818152505087600660008b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612f0091906136f0565b90915550612f629050565b6001600160a01b038916600090815260066020526040902054825183906001908110612f3957612f396136b4565b6020908102919091018101919091526001600160a01b038a166000908152600690915260408120555b600082600181518110612f7757612f776136b4565b602002602001015189612f8a91906136f0565b82549091501561308a576000425b835482108015612fa85750600083115b1561308757600f546000838152600186016020526040812054909190612fce90846136f0565b60008581526002880160205260409020549110159150801561307357848111612ff75780612ff9565b845b905060008261300957600161300c565b60005b905081888260ff1681518110613024576130246136b4565b602002602001018181516130389190613725565b90525061304582876136f0565b955081876002016000878152602001908152602001600020600082825461306c91906136f0565b9091555050505b8361307d8161373d565b9450505050612f98565b50505b80156130d85760405162461bcd60e51b815260206004820152601260248201527f6e6f7420656e6f7567682062616c616e636500000000000000000000000000006044820152606401610a5b565b600080600080600080886000815181106130f4576130f46136b4565b602002602001015111156131d65761318d88600081518110613118576131186136b4565b60200260200101516010600081548110613134576131346136b4565b600091825260209182902060408051608081018252929091015461ffff80821684526201000082048116948401949094526401000000008104841691830191909152660100000000000090049091166060820152612da6565b9398509196509450925090506131a3848d613725565b9b506131af838c613725565b9a506131bb828b613725565b99506131c7858e613725565b9c506131d3818a613725565b98505b6000886001815181106131eb576131eb6136b4565b602002602001015111156132745761322b8860018151811061320f5761320f6136b4565b60200260200101516010600181548110613134576131346136b4565b939850919650945092509050613241848d613725565b9b5061324d838c613725565b9a50613259828b613725565b9950613265858e613725565b9c50613271818a613725565b98505b50505050505050509295509295909350565b600060208083528351808285015260005b818110156132b357858101830151858201604001528201613297565b818111156132c5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b03811681146118b357600080fd5b6000806040838503121561332157600080fd5b823561332c816132f9565b946020939093013593505050565b803561ffff81168114611ed957600080fd5b60006080828403121561335e57600080fd5b6040516080810181811067ffffffffffffffff8211171561338f57634e487b7160e01b600052604160045260246000fd5b60405290508061339e8361333a565b81526133ac6020840161333a565b60208201526133bd6040840161333a565b60408201526133ce6060840161333a565b60608201525092915050565b60008060a083850312156133ed57600080fd5b823560ff811681146133fe57600080fd5b915061340d846020850161334c565b90509250929050565b60008060006060848603121561342b57600080fd5b8335613436816132f9565b92506020840135613446816132f9565b929592945050506040919091013590565b6000806040838503121561346a57600080fd5b6134738361333a565b915061340d6020840161333a565b60006020828403121561349357600080fd5b5035919050565b80151581146118b357600080fd5b600080604083850312156134bb57600080fd5b82356134c6816132f9565b915060208301356134d68161349a565b809150509250929050565b6000602082840312156134f357600080fd5b81356134fe816132f9565b9392505050565b60006020828403121561351757600080fd5b6134fe8261333a565b60006080828403121561353257600080fd5b6134fe838361334c565b6000806040838503121561354f57600080fd5b823561355a816132f9565b915060208301356134d6816132f9565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156135bb5781600019048211156135a1576135a161356a565b808516156135ae57918102915b93841c9390800290613585565b509250929050565b6000826135d257506001610944565b816135df57506000610944565b81600181146135f557600281146135ff5761361b565b6001915050610944565b60ff8411156136105761361061356a565b50506001821b610944565b5060208310610133831016604e8410600b841016171561363e575081810a610944565b6136488383613580565b806000190482111561365c5761365c61356a565b029392505050565b60006134fe60ff8416836135c3565b600081600019048311821515161561368d5761368d61356a565b500290565b6000826136af57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168185168083038211156136e7576136e761356a565b01949350505050565b6000828210156137025761370261356a565b500390565b600061ffff82168061371b5761371b61356a565b6000190192915050565b600082198211156137385761373861356a565b500190565b60006000198214156137515761375161356a565b5060010190565b60006020828403121561376a57600080fd5b5051919050565b60006020828403121561378357600080fd5b81516134fe8161349a565b6000806000606084860312156137a357600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156137ce57600080fd5b81516134fe816132f9565b600081518084526020808501945080840160005b838110156138125781516001600160a01b0316875295820195908201906001016137ed565b509495945050505050565b85815284602082015260a06040820152600061383c60a08301866137d9565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061387260808301866137d9565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212207aa3194acc3216a95f1d1f7be43757dc7ecd85ece42f133a1b20cc50922a5a8264736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000027a9a58463c0f99cce0e7cd4bf995619460e3a2f000000000000000000000000e9b4d32f829951a3ce145d2caa84cf66af56ca5e0000000000000000000000001bf4cb781b97724a8a22ef064dce6bbc1c26cdda000000000000000000000000acfb878960bcda38782d854efb2e687b57e31f0900000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000017c0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000014a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000cc4cef22c65cb9615dacf0c95253a036d3fcf7ab000000000000000000000000ce07045d946797fc6b8857dc3cc0a972fcabdb26000000000000000000000000290116f3af26a9e30c3989f9210416bd1cbb5d470000000000000000000000007e86ce46eb49b1ca67dd7eaf2923a4fbea159ce50000000000000000000000000cce3498b9865c8dd54ab7eb9a0d2f562721fd30000000000000000000000000e481f9c3ad5c235076161b7556f8d0b49d41b9f2
-----Decoded View---------------
Arg [0] : _param (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
29 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [3] : 00000000000000000000000027a9a58463c0f99cce0e7cd4bf995619460e3a2f
Arg [4] : 000000000000000000000000e9b4d32f829951a3ce145d2caa84cf66af56ca5e
Arg [5] : 0000000000000000000000001bf4cb781b97724a8a22ef064dce6bbc1c26cdda
Arg [6] : 000000000000000000000000acfb878960bcda38782d854efb2e687b57e31f09
Arg [7] : 00000000000000000000000000000000000000000000000000000000000002a0
Arg [8] : 000000000000000000000000000000000000000000000000000000000000017c
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [10] : 000000000000000000000000000000000000000000000000000000000000014a
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [13] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [14] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [17] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [18] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [20] : 00000000000000000000000000000000000000000000000000000000000001a4
Arg [21] : 000000000000000000000000000000000000000000000000000000000000008c
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [23] : 000000000000000000000000cc4cef22c65cb9615dacf0c95253a036d3fcf7ab
Arg [24] : 000000000000000000000000ce07045d946797fc6b8857dc3cc0a972fcabdb26
Arg [25] : 000000000000000000000000290116f3af26a9e30c3989f9210416bd1cbb5d47
Arg [26] : 0000000000000000000000007e86ce46eb49b1ca67dd7eaf2923a4fbea159ce5
Arg [27] : 0000000000000000000000000cce3498b9865c8dd54ab7eb9a0d2f562721fd30
Arg [28] : 000000000000000000000000e481f9c3ad5c235076161b7556f8d0b49d41b9f2
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.