Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
99,973,532.619190836234195103 FIB
Holders
13
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,000,264.813986744252717693 FIBValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Fibonacci
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: No License import "./Library.sol"; pragma solidity ^0.8.7; //Fibonacci Token (FIB). An innovative token originally invented by @Nov // t.me/FibonacciToken /* @@@@...@@@...@@@@ @@...............................@@ @@..........................................@. @@...................................................@ @..........................................................@ @................................................................@ @.....................................................................@ @.........................................................................& @............................................................................@ @................................................................................@ @..................................................................................@ @.....................................................................................@ @.......................................................................................@ @.........................................................................................@ @..........................................................................................@ @....................................................... @@@.@..@ ,,,,,,,,,,,,,,,,,,,,,,@ @........................................................ @....@.... @,,,,,,,,,,,,,,,,,,,,,,@ @........................................................@......@..,,, @,,,,,,,,,,,,,,,,,,,,,@ @........................................................@........@@,@ ,,,,,,,,,,,,,,,,,,,,@ @.........................................................@..............,,,,,,,,,,,,,,,,,,,@ @..........................................................@.............,,,,,,,,,,,,,,,,,@ @........................................................... @............,,,,,,,,,,,,,,,@ @........................................................... @..........,,,,,,,,,,,,,@ @........................................................... @.......,,,,,,,,@@ */ //Update this version also has increasing fees that resets in a certain amount of time (1 day default) from your last sell or tx. //Fiobonacci Token is a token that does not let price drop below a certain point 0.618 ratio from ATH for default. //Every new ATH sets the price floor a new high, So price will be lifted at all times. //This is against BNB not any stable token is BNB price drops any chart indicator will show you price is dropped below the threshold, this is not the case //Please look BNB pairing for charts not USD if you wanna see the real movements against BNB. //Also apart from that , there is increased tax for investors who sell at close or at ATH. (About %5 percent near ATH). //From psychological point of view I concluded these results: //Token is self "marketing" or "shilling" , If you bought this token and price is below a certain point you will need other people to invest to gain access to your funds. //So , any normal investor would "shill" their token to others , this would create a snowball effect and cycle would repeat with more people everytime. //Normally when a token's price crashes people would just accept it and move on , this is not the case here. //Selling close to ATH is a %12.5 percent loss for the maker. So any logical person would wait others to drop the price %5 percent before selling //But if most people thinks like that amount of sell pressure at ATH is lowered by a lot. //There is classic reflection and liquidity and burn traits of token which you can see below ( default is %0.5 , %3 , %0.5) //Max wallet is %1. //I do have a small dev fee %0.5 , but can be increased to 1.5% if something happens and i need funds for the token , (Maybe a marketing , or a new liquidity for other DEX etc.); //I cannot increase dev fees beyond 1.5% contract does not allow that. //Invest only what you can afford to lose. //Price might be mathematically set to increase , BUT IF NO ONE BUYS THE TOKEN IT WILL STUCK !!!! BE CAREFUL WITH YOUR INVESTMENTS!!!. //This is an experiment on BSC.Lets see if it goes viral. //Disclaimer: By acquiring this token , you accept your own risks. contract Fibonacci is Context, IBEP20, Ownable { using SafeMath for uint256; using Address for address; using EnumerableSet for EnumerableSet.AddressSet; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => uint256) private _dumpTaxes; mapping(address => uint256) private _dumpTaxesBlockTime; uint256 private constant MAX_EXCLUDED = 1024; EnumerableSet.AddressSet private _isExcludedFromReward; EnumerableSet.AddressSet private _isExcludedFromFee; EnumerableSet.AddressSet private _isExcludedFromSwapAndLiquify; EnumerableSet.AddressSet private _isBlackListed; EnumerableSet.AddressSet private _isWhiteListed; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 private _tBurnTotal; string private constant _name = "Fibonacci"; string private constant _symbol = "FIB"; uint8 private constant _decimals = 18; uint256 public _taxFeeVariable = 0; uint256 public _liquidityFeeVariable = 0; uint256 public _devFeeVariable = 0; uint256 public _burnFeeVariable = 0; uint256 public _taxFee = 0; uint256 public _liquidityFee = 0; uint256 public _devFee = 0; uint256 public _burnFee = 0; uint256 public _maxWalletSize = (_tTotal * 1) / 100; uint256 private constant TOTAL_FEES_LIMIT = 2000; uint256 private constant DEV_FEES_LIMIT = 150; //If needed. uint256 private constant MIN_TX_LIMIT = 100; uint256 public _maxTxAmount = 100000000 * 10**18; uint256 public _numTokensSellToAddToLiquidity = 20000 * 10**18; uint256 private _totalDevFeesCollected = 0; //Fibonacci Variables //They are multipled by 4 adding for Liq , Reflection , Burn and Dev fee. uint256 private constant ATH_DUMPER_FEE_MIN_LIMIT = 250; uint256 private constant ATH_DUMPER_FEE_MAX_LIMIT = 550; uint256 public _ATHDumperBurnAdd = 350; //Activates ATH Burn (max 17.5 percent.) uint256 private constant MIN_PER_ATH_LIMIT = 835; uint256 private constant MAX_PER_ATH_LIMIT = 975; uint256 public PER_ATH_BURN_ACTIVATE = 950; uint256 _ATHPriceINBNB = 1000; //CurrentPrice but multipled by 10**20 uint256 PriceNow = 1; uint256 MultPrecision = 10**20; address DEAD = 0x000000000000000000000000000000000000dEaD; //Golden ratio cannot be set higher than 619. MAX is just in case something fail, halves the floor price. //1/3 = 3.333 MAX so this token only can drop 66 percent at ALL costs. (Against BNB) uint256 private constant GoldenRatioDMAX = 333; //1/1.618 = 0.618 (Math is interesting) uint256 public GoldenRatioDivider = 618 ; //Cant be honeypot uint256 private constant GoldenRatioDMIN = 900; uint256 private RatioNow = 1000; // Liquidity bool public _swapAndLiquifyEnabled = true; bool private _inSwapAndLiquify; IUniswapV2Router02 public _uniswapV2Router; address public _uniswapV2Pair; IUniswapV2Pair public uniSwapV2PairContract; address public pancakeRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;//0x10ED43C718714eb63d5aA57B78B54704E256024E; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity ); event DevFeesCollected(uint256 bnbCollected); modifier lockTheSwap() { _inSwapAndLiquify = true; _; _inSwapAndLiquify = false; } constructor(address cOwner) Ownable(cOwner) { _rOwned[cOwner] = _rTotal; // Create a uniswap pair for this new token IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(pancakeRouter); _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); _uniswapV2Router = uniswapV2Router; // Exclude system addresses from fee IUniswapV2Pair pairContract = IUniswapV2Pair(_uniswapV2Pair); uniSwapV2PairContract = pairContract; _isExcludedFromFee.add(owner()); _isExcludedFromFee.add(address(this)); _isExcludedFromSwapAndLiquify.add(_uniswapV2Pair); _isWhiteListed.add(address(this)); _isWhiteListed.add(_uniswapV2Pair); _isWhiteListed.add(owner()); _taxesForEachSell[0] = 25; _taxesForEachSell[1] = 75; _taxesForEachSell[2] = 175; _taxesForEachSell[3] = 180; _taxesForEachSell[4] = 200; _taxesForEachSell[5] = 350; _taxesForEachSell[6] = 740; _taxesForEachSell[7] = 1180; _taxesForEachSell[8] = 2500; _taxesForEachSell[9] = 12500; emit Transfer(address(0), cOwner, _tTotal); } receive() external payable {} // BEP20 function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcludedFromReward.contains(account)) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } //Fibonacci Price Checker Future function setPriceOfTokenSellFuture(uint256 soldBNB,uint256 golden) internal returns (uint256){ uint256 FibonacciSupply; uint256 WBNB; //For some reason this gets swapped at every added liq. (uint256 token0,uint256 token1, uint256 blocktimestamp) = uniSwapV2PairContract.getReserves(); if(token0 > token1){ FibonacciSupply = token0; WBNB = token1; } else{ FibonacciSupply = token1; WBNB = token0; } FibonacciSupply = FibonacciSupply.add(golden); WBNB = WBNB.sub(soldBNB); //Lets not blow up. if(FibonacciSupply == 0){ return 1; } //Multipled by 10**20 to make division right; uint256 priceINBNB = (WBNB.mul(MultPrecision)).div(FibonacciSupply); if(priceINBNB > _ATHPriceINBNB){ _ATHPriceINBNB = priceINBNB; } RatioNow = (priceINBNB.mul(1000)).div(_ATHPriceINBNB); return priceINBNB; } function setPriceOfTokenBoughtFuture(uint256 addedBNB,uint256 soldgolden) internal returns (uint256){ uint256 FibonacciSupply; uint256 WBNB; //For some reason this gets swapped at every added liq. (uint256 token0,uint256 token1, uint256 blocktimestamp) = uniSwapV2PairContract.getReserves(); if(token0 > token1){ FibonacciSupply = token0; WBNB = token1; } else{ FibonacciSupply = token1; WBNB = token0; } FibonacciSupply = FibonacciSupply.sub(soldgolden); WBNB = WBNB.add(addedBNB); //Lets not blow up. if(FibonacciSupply == 0){ return 1; } //Multipled by 10**20 to make division right; uint256 priceINBNB = (WBNB.mul(MultPrecision)).div(FibonacciSupply); if(priceINBNB > _ATHPriceINBNB){ _ATHPriceINBNB = priceINBNB; } RatioNow = (priceINBNB.mul(1000)).div(_ATHPriceINBNB); return priceINBNB; } function getPriceOfTokenNow() public view returns (uint256,uint256){ return (RatioNow,_ATHPriceINBNB); } function getPriceOfTokenFuture(uint256 substractedBNB,uint256 addedGoldenRatio) public view returns (uint256){ uint256 FibonacciSupply; uint256 WBNB; //For some reason this gets swapped at every added liq. (uint256 token0,uint256 token1, uint256 blocktimestamp) = uniSwapV2PairContract.getReserves(); if(token0 > token1){ FibonacciSupply = token0; WBNB = token1; } else{ FibonacciSupply = token1; WBNB = token0; } //Lets not blow up. if(FibonacciSupply == 0){ return 1; } //Multipled by 10**20 to make division right; uint256 totalGNow = FibonacciSupply.add(addedGoldenRatio); uint256 priceINBNB = ((WBNB.sub(substractedBNB)).mul(MultPrecision)).div(totalGNow); return priceINBNB; } //10 is 1 percent. function setMaxWalletSize(uint256 maxWallet) external onlyOwner{ require(maxWallet >= 10 , "Can't decerease maxwallet more than that."); _maxWalletSize = (_tTotal * maxWallet) / 10000; } function setGoldenRatio(uint256 ratio) external onlyOwner{ require(ratio > GoldenRatioDMAX,"Fibonacci cannot be lower than this."); require(ratio <= GoldenRatioDMIN,"Fibonacci cannot be higher than this."); GoldenRatioDivider = ratio; } function setATHDumperFee(uint256 fee) external onlyOwner { require(fee <= ATH_DUMPER_FEE_MAX_LIMIT,"I know you want to punish them , but they are human too."); require(fee >= ATH_DUMPER_FEE_MIN_LIMIT, "I ain't that merciful."); _ATHDumperBurnAdd = fee; } function setATHDumperMaxPercent(uint256 feePercent) external onlyOwner { require(feePercent <= MAX_PER_ATH_LIMIT,"Can't increase ATH sell tax percentage more than this."); require(feePercent >= MIN_PER_ATH_LIMIT, "Can't decrease ATH sell tax percentage more than this."); PER_ATH_BURN_ACTIVATE = feePercent; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "BEP20: approve from the zero address"); require(spender != address(0), "BEP20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "BEP20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "BEP20: decreased allowance below zero" ) ); return true; } // REFLECTION function deliver(uint256 tAmount) public { address sender = _msgSender(); require( !_isExcludedFromReward.contains(sender), "Excluded addresses cannot call this function" ); (, uint256 tFee, uint256 tLiquidity, uint256 tBurn) = _getTValues( tAmount ); uint256 currentRate = _getRate(); (uint256 rAmount, , ) = _getRValues( tAmount, tFee, tLiquidity, tBurn, currentRate ); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (, uint256 tFee, uint256 tLiquidity, uint256 tBurn) = _getTValues( tAmount ); uint256 currentRate = _getRate(); (uint256 rAmount, , ) = _getRValues( tAmount, tFee, tLiquidity, tBurn, currentRate ); return rAmount; } else { (, uint256 tFee, uint256 tLiquidity, uint256 tBurn) = _getTValues( tAmount ); uint256 currentRate = _getRate(); (, uint256 rTransferAmount, ) = _getRValues( tAmount, tFee, tLiquidity, tBurn, currentRate ); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner { require( !_isExcludedFromReward.contains(account), "Account is already excluded in reward" ); require( _isExcludedFromReward.length() < MAX_EXCLUDED, "Excluded reward set reached maximum capacity" ); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcludedFromReward.add(account); } function includeInReward(address account) external onlyOwner { require( _isExcludedFromReward.contains(account), "Account is already included in reward" ); _isExcludedFromReward.remove(account); _tOwned[account] = 0; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function totalBurn() public view returns (uint256) { return _tBurnTotal; } function devPercentageOfLiquidity() public view returns (uint256) { return (_devFee * 10000) / (_devFee.add(_liquidityFee)); } /** @dev This is the portion of liquidity that will be sent to the uniswap router. Dev fees are considered part of the liquidity conversion. */ function pureLiquidityPercentage() public view returns (uint256) { return (_liquidityFee * 10000) / (_devFee.add(_liquidityFee)); } function totalDevFeesCollected() external view onlyDev returns (uint256) { return _totalDevFeesCollected; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee.add(account); } function includeInFee(address account) public onlyOwner { _isExcludedFromFee.remove(account); } function setTaxFeePercent(uint256 taxFee) external onlyOwner { require( taxFee.add(_liquidityFee).add(_devFee).add(_burnFee) <= TOTAL_FEES_LIMIT, "Total fees can not exceed the declared limit" ); _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner { require( _taxFee.add(liquidityFee).add(_devFee).add(_burnFee) <= TOTAL_FEES_LIMIT, "Total fees can not exceed the declared limit" ); _liquidityFee = liquidityFee; } function setDevFeePercent(uint256 devFee) external onlyOwner { require( devFee <= DEV_FEES_LIMIT, "Dev fees can not exceed the declared limit" ); require( _taxFee.add(_liquidityFee).add(devFee).add(_burnFee) <= TOTAL_FEES_LIMIT, "Total fees can not exceed the declared limit" ); _devFee = devFee; } function setBurnFeePercent(uint256 burnFee) external onlyOwner { require( _taxFee.add(_liquidityFee).add(_devFee).add(burnFee) <= TOTAL_FEES_LIMIT, "Total fees can not exceed the declared limit" ); _burnFee = burnFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner { require( maxTxPercent <= 10000, "Maximum transaction limit percentage can't be more than 100%" ); require( maxTxPercent >= MIN_TX_LIMIT, "Maximum transaction limit can't be less than the declared limit" ); _maxTxAmount = _tTotal.mul(maxTxPercent).div(10000); } function setMinLiquidityPercent(uint256 minLiquidityPercent) external onlyOwner { require( minLiquidityPercent <= 10000, "Minimum liquidity percentage percentage can't be more than 100%" ); require( minLiquidityPercent > 0, "Minimum liquidity percentage percentage can't be zero" ); _numTokensSellToAddToLiquidity = _tTotal.mul(minLiquidityPercent).div( 10000 ); } function setSwapAndLiquifyEnabled(bool enabled) public onlyOwner { _swapAndLiquifyEnabled = enabled; emit SwapAndLiquifyEnabledUpdated(enabled); } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee.contains(account); } function isExcludedFromReward(address account) public view returns (bool) { return _isExcludedFromReward.contains(account); } function setIsExcludedFromSwapAndLiquify(address a, bool b) external onlyOwner { if (b) { _isExcludedFromSwapAndLiquify.add(a); } else { _isExcludedFromSwapAndLiquify.remove(a); } } function setUniswapRouter(address r) external onlyOwner { IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(r); _uniswapV2Router = uniswapV2Router; } function setUniswapPair(address p) external onlyOwner { _uniswapV2Pair = p; } // TRANSFER function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "BEP20: transfer from the zero address"); require(to != address(0), "BEP20: transfer to the zero address"); require(to != devWallet(), "Dev wallet address cannot receive tokens"); require(from != devWallet(), "Dev wallet address cannot send tokens"); require(amount > 0, "Transfer amount must be greater than zero"); if (from != owner() && to != owner()) { require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); } /* - swapAndLiquify will be initiated when token balance of this contract has accumulated enough over the minimum number of tokens required. - don't get caught in a circular liquidity event. - don't swapAndLiquify if sender is uniswap pair. */ uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool isOverMinTokenBalance = contractTokenBalance >= _numTokensSellToAddToLiquidity; if ( isOverMinTokenBalance && !_inSwapAndLiquify && !_isExcludedFromSwapAndLiquify.contains(from) && _swapAndLiquifyEnabled ) { swapAndLiquify(_numTokensSellToAddToLiquidity); } bool takeFee = true; if ( _isExcludedFromFee.contains(from) || _isExcludedFromFee.contains(to) ) { takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function collectDevFees() public onlyDev { _totalDevFeesCollected = _totalDevFeesCollected.add( address(this).balance ); devWallet().transfer(address(this).balance); emit DevFeesCollected(address(this).balance); } function swapAndLiquify(uint256 tokenAmount) private lockTheSwap { // This variable holds the liquidity tokens that won't be converted uint256 liqTokens = tokenAmount.mul(pureLiquidityPercentage()).div( 20000 ); // Everything else from the tokens should be converted uint256 tokensForBnbExchange = tokenAmount.sub(liqTokens); // This would be in the non-percentage form, 0 (0%) < devPortion < 10000 (100%) // The devPortion here indicates the portion of the converted tokens (BNB) that // would be assigned to the devWallet uint256 devPortion = tokenAmount.mul(devPercentageOfLiquidity()).div( tokensForBnbExchange ); uint256 initialBalance = address(this).balance; swapTokensForBnb(tokensForBnbExchange); // How many BNBs did we gain after this conversion? uint256 gainedBnb = address(this).balance.sub(initialBalance); // Calculate the amount of BNB that's assigned to devWallet uint256 balanceToDev = (gainedBnb.mul(devPortion)).div(10000); // The leftover BNBs are purely for liquidity uint256 liqBnb = gainedBnb.sub(balanceToDev); addLiquidity(liqTokens, liqBnb); emit SwapAndLiquify(tokensForBnbExchange, liqBnb, liqTokens); } function swapTokensForBnb(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = _uniswapV2Router.WETH(); _approve(address(this), address(_uniswapV2Router), tokenAmount); _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private { // Approve token transfer to cover all possible scenarios _approve(address(this), address(_uniswapV2Router), tokenAmount); // Add the liquidity _uniswapV2Router.addLiquidityETH{value: bnbAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable lockedLiquidity(), block.timestamp ); } //These are required for adding Liq and potential save mechanism if something fails //When shutdowncancel activated Owner can no longer interfere. bool AthThingEnabled = true; function setFeesToZero() external onlyOwner{ _taxFeeVariable = 0; _liquidityFeeVariable = 0; _devFeeVariable = 0; _burnFeeVariable = 0; } function setFeesBackToDefault() external onlyOwner{ _taxFee = 50; _liquidityFee = 300; _devFee = 150; _burnFee = 50; } function setFeesBackToNormalInternal() internal { _taxFeeVariable = _taxFee; _liquidityFeeVariable = _liquidityFee; _devFeeVariable = _devFee; _burnFeeVariable = _burnFee; } function setATHthingEnabled(bool isit) external onlyOwner{ AthThingEnabled = isit; } function setFeeResetTime(uint256 time) external onlyOwner{ feeResetTime = time; } uint256 feeResetTime = 60*60*24*14; //2 Weeks bool cancelSellConstraints = false; bool canCancel = true; function ShutDownCancel() external onlyOwner{ cancelSellConstraints = true; canCancel = false; } function setSellContraints(bool what) external onlyOwner{ if(canCancel){ cancelSellConstraints = what; } } //Sets increasing tax enabled. bool private increasingTax = false; function setIncreasingTaxForSellsEnabled(bool what) external onlyOwner{ if(canCancel){ increasingTax = what; } } //If something fails and tax are getting added constantly this function will be activated. bool private setToNormalOnSomeError = false; function setToNormalOnAnyError(bool what) external onlyOwner{ setToNormalOnSomeError = what; } function addATHFees() internal returns (bool) { bool ATHsAdded = false; if(AthThingEnabled){ if(RatioNow > PER_ATH_BURN_ACTIVATE){ ATHsAdded = true; _liquidityFeeVariable += _ATHDumperBurnAdd; _burnFeeVariable += _ATHDumperBurnAdd; _taxFeeVariable += _ATHDumperBurnAdd; _devFeeVariable += _ATHDumperBurnAdd; } } return ATHsAdded; } mapping(uint256 => uint256) private _taxesForEachSell; function setTaxesByAmount(uint256 taxnumber,uint256 tax) external onlyOwner{ _taxesForEachSell[taxnumber] = tax; } function setTaxesToDefaultForSellTaxes() external onlyOwner(){ _taxesForEachSell[0] = 25; _taxesForEachSell[1] = 55; _taxesForEachSell[2] = 60; _taxesForEachSell[3] = 120; _taxesForEachSell[4] = 180; _taxesForEachSell[5] = 350; _taxesForEachSell[6] = 740; _taxesForEachSell[7] = 1180; _taxesForEachSell[8] = 2500; _taxesForEachSell[9] = 12500; } function getMyTaxInformation () view public returns (uint256 myTx,uint256 tax,uint256 leftTime){ uint256 blocktime = block.timestamp; uint256 currentSellTaxNumber = _dumpTaxes[msg.sender]; uint256 currentBlockTimeSeller = _dumpTaxesBlockTime[msg.sender]; uint256 time = 0; uint256 addedTaxesTotal = _taxesForEachSell[currentSellTaxNumber]; if(blocktime > currentBlockTimeSeller){ time = blocktime.sub(currentBlockTimeSeller); } if(addedTaxesTotal == 0 && currentSellTaxNumber > 3){ addedTaxesTotal = maxSellTax; } return (currentSellTaxNumber,addedTaxesTotal,time); } uint256 private maxSellTax = 12500; function setMaxSellTax(uint256 maxTax) external onlyOwner { maxSellTax = maxTax; } function addIncreasedTaxes(address sender) internal{ uint256 blocktime = block.timestamp; uint256 currentSellTaxNumber = _dumpTaxes[sender]; uint256 currentBlockTimeSeller = _dumpTaxesBlockTime[sender]; uint256 addedTaxesTotal = 0; if(increasingTax){ if(sender != _uniswapV2Pair){ if(blocktime > currentBlockTimeSeller){ uint256 left = blocktime.sub(currentBlockTimeSeller); _dumpTaxesBlockTime[sender] = blocktime; addedTaxesTotal = _taxesForEachSell[currentSellTaxNumber]; if(addedTaxesTotal == 0 && currentSellTaxNumber > 3){ addedTaxesTotal = maxSellTax; } if(left >= feeResetTime){ _dumpTaxes[sender] = 0; addedTaxesTotal = 0; } if(left < feeResetTime){ _dumpTaxes[sender] = currentSellTaxNumber + 1; } } } } _liquidityFeeVariable += addedTaxesTotal; _burnFeeVariable += addedTaxesTotal; _taxFeeVariable += addedTaxesTotal; _devFeeVariable += addedTaxesTotal; } function removeTaxes(uint256 taxes) internal{ if(_liquidityFeeVariable >= taxes){ _liquidityFeeVariable = _liquidityFeeVariable - taxes; } if(_burnFeeVariable >= taxes){ _burnFeeVariable = _burnFeeVariable - taxes; } if(_taxFeeVariable >= taxes){ _taxFeeVariable = _taxFeeVariable - taxes; } if(_devFeeVariable >= taxes){ _devFeeVariable = _devFeeVariable - taxes; } } bool whitelistEnabled = false; bool blacklistEnabled = false; function addToWhiteList(address added) external onlyOwner { _isWhiteListed.add(added); } function addToBlackList(address added) external onlyOwner { _isBlackListed.add(added); } function setWhitelistEnabled(bool whitelist) external onlyOwner { whitelistEnabled = whitelist; } function setBlackListEnabled(bool blacklist) external onlyOwner { blacklistEnabled = blacklist; } bool private removeDevM = false; function removeDevMode () external onlyOwner{ removeDevM = true; devMod = false; } bool private devMod = true; function devMode(bool buys) external onlyOwner { require(!removeDevM,"Dev mode is closed forever."); devMod = buys; } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { //Checking _maxWalletSize if(!devMod){ if (recipient != _uniswapV2Pair && recipient != DEAD && recipient != pancakeRouter ) { require(balanceOf(recipient) + amount <= _maxWalletSize, "Transfer amount exceeds the max size."); } } //BlackList if(blacklistEnabled){ require(!_isBlackListed.contains(sender) , "Address is blacklisted."); require(!_isBlackListed.contains(recipient) , "Address is blacklisted."); } //Whitelist if(whitelistEnabled){ require(_isWhiteListed.contains(sender) , "Address is not whitelisted."); require(_isWhiteListed.contains(recipient) , "Address is not whitelisted."); } //Cancels liq additions while devmod is on. if(devMod){ if(recipient == _uniswapV2Pair){ require(sender == owner(),"Only owner can add liq."); } } //Adding ATH sell fee and sell constraints if(recipient == _uniswapV2Pair && cancelSellConstraints){ //IF selling address[] memory path = new address[](2); path[0] = address(this); path[1] = _uniswapV2Router.WETH(); uint256 WillbedrainedBNB = _uniswapV2Router.getAmountsOut(amount,path)[1]; uint256 futurePrice = getPriceOfTokenFuture(WillbedrainedBNB,amount); //So if any future price goes below GoldenRatioDivider no selling will happen. require(futurePrice.mul(1000).div(_ATHPriceINBNB) >= GoldenRatioDivider,"Transaction will drop the price below the GoldenRatio , reverted."); require(RatioNow >= GoldenRatioDivider,"Idk how you passed that requirement but it stops here."); //Set price of token for sells. setPriceOfTokenSellFuture(WillbedrainedBNB,amount); //set IncreasedTaxes. addIncreasedTaxes(sender); //ATH dumper fee addATHFees(); } if(sender == _uniswapV2Pair && cancelSellConstraints){ //If buying address[] memory path = new address[](2); path[0] = address(this); path[1] = _uniswapV2Router.WETH(); //This will be an estimate but should be pretty good if no big changes to price. uint256 WillbeAddedBNB = _uniswapV2Router.getAmountsOut(amount,path)[1]; setPriceOfTokenBoughtFuture(WillbeAddedBNB,amount); } //Add the tax on everytransaction no matter what.So cannot send it to another wallets without tax. if(sender != _uniswapV2Pair && recipient != _uniswapV2Pair){ //set IncreasedTaxes. addIncreasedTaxes(sender); } if (!takeFee || devMod) { _taxFeeVariable = 0; _liquidityFeeVariable = 0; _devFeeVariable = 0; _burnFeeVariable = 0; } bool senderExcluded = _isExcludedFromReward.contains(sender); bool recipientExcluded = _isExcludedFromReward.contains(recipient); if (senderExcluded && !recipientExcluded) { _transferFromExcluded(sender, recipient, amount); } else if (!senderExcluded && recipientExcluded) { _transferToExcluded(sender, recipient, amount); } else if (!senderExcluded && !recipientExcluded) { _transferStandard(sender, recipient, amount); } else if (senderExcluded && recipientExcluded) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } setFeesBackToNormalInternal(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn ) = _getTValues(tAmount); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tBurn, currentRate ); uint256 rBurn = tBurn.mul(currentRate); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); takeTransactionFee(address(this), tLiquidity, currentRate); _reflectFee(rFee, rBurn, tFee, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn ) = _getTValues(tAmount); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tBurn, currentRate ); uint256 rBurn = tBurn.mul(currentRate); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); takeTransactionFee(address(this), tLiquidity, currentRate); _reflectFee(rFee, rBurn, tFee, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn ) = _getTValues(tAmount); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tBurn, currentRate ); uint256 rBurn = tBurn.mul(currentRate); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); takeTransactionFee(address(this), tLiquidity, currentRate); _reflectFee(rFee, rBurn, tFee, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn ) = _getTValues(tAmount); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tBurn, currentRate ); uint256 rBurn = tBurn.mul(currentRate); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); takeTransactionFee(address(this), tLiquidity, currentRate); _reflectFee(rFee, rBurn, tFee, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee( uint256 rFee, uint256 rBurn, uint256 tFee, uint256 tBurn ) private { _rTotal = _rTotal.sub(rFee).sub(rBurn); _tFeeTotal = _tFeeTotal.add(tFee); _tBurnTotal = _tBurnTotal.add(tBurn); _tTotal = _tTotal.sub(tBurn); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256 ) { uint256 tFee = tAmount.mul(_taxFeeVariable).div(10000); // We treat the dev fee as part of the total liquidity fee uint256 tLiquidity = tAmount.mul(_liquidityFeeVariable.add(_devFeeVariable)).div(10000); uint256 tBurn = tAmount.mul(_burnFeeVariable).div(10000); uint256 tTransferAmount = tAmount.sub(tFee); tTransferAmount = tTransferAmount.sub(tLiquidity); tTransferAmount = tTransferAmount.sub(tBurn); return (tTransferAmount, tFee, tLiquidity, tBurn); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rBurn = tBurn.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); rTransferAmount = rTransferAmount.sub(rLiquidity); rTransferAmount = rTransferAmount.sub(rBurn); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _isExcludedFromReward.length(); i++) { address excludedAddress = _isExcludedFromReward.at(i); if ( _rOwned[excludedAddress] > rSupply || _tOwned[excludedAddress] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[excludedAddress]); tSupply = tSupply.sub(_tOwned[excludedAddress]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function takeTransactionFee( address to, uint256 tAmount, uint256 currentRate ) private { if (tAmount <= 0) { return; } uint256 rAmount = tAmount.mul(currentRate); _rOwned[to] = _rOwned[to].add(rAmount); if (_isExcludedFromReward.contains(to)) { _tOwned[to] = _tOwned[to].add(tAmount); } } }
pragma solidity ^0.8.7; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.7; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require( set._values.length > index, "EnumerableSet: index out of bounds" ); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } pragma solidity ^0.8.7; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IBEP20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } pragma solidity ^0.8.7; /* * @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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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. */ contract Ownable is Context { address private _owner; address private _lockedLiquidity; address payable private _devWallet; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor(address initialOwner) { _owner = initialOwner; emit OwnershipTransferred(address(0), initialOwner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } function lockedLiquidity() public view returns (address) { return _lockedLiquidity; } function devWallet() internal view returns (address payable) { return _devWallet; } function devWalletByOwner() external view onlyOwner returns (address payable) { return _devWallet; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } modifier onlyDev() { require( _devWallet == _msgSender(), "Caller is not the devWallet address" ); _; } function setDevWalletAddress(address payable devWalletAddress) public virtual onlyOwner { require( _devWallet == address(0), "Dev wallet address cannot be changed once set" ); _devWallet = devWalletAddress; } function setLockedLiquidityAddress(address liquidityAddress) public virtual onlyOwner { require( _lockedLiquidity == address(0), "Locked liquidity address cannot be changed once set" ); _lockedLiquidity = liquidityAddress; } /** * @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 { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } pragma solidity ^0.8.7; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"cOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bnbCollected","type":"uint256"}],"name":"DevFeesCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"GoldenRatioDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PER_ATH_BURN_ACTIVATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ShutDownCancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_ATHDumperBurnAdd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFeeVariable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFeeVariable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeVariable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeVariable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"added","type":"address"}],"name":"addToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"added","type":"address"}],"name":"addToWhiteList","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":"collectDevFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"buys","type":"bool"}],"name":"devMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devPercentageOfLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWalletByOwner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMyTaxInformation","outputs":[{"internalType":"uint256","name":"myTx","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"},{"internalType":"uint256","name":"leftTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"substractedBNB","type":"uint256"},{"internalType":"uint256","name":"addedGoldenRatio","type":"uint256"}],"name":"getPriceOfTokenFuture","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceOfTokenNow","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedLiquidity","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pureLiquidityPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeDevMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setATHDumperFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feePercent","type":"uint256"}],"name":"setATHDumperMaxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isit","type":"bool"}],"name":"setATHthingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"blacklist","type":"bool"}],"name":"setBlackListEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"devWalletAddress","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setFeeResetTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setFeesBackToDefault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setFeesToZero","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"name":"setGoldenRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"what","type":"bool"}],"name":"setIncreasingTaxForSellsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"b","type":"bool"}],"name":"setIsExcludedFromSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityAddress","type":"address"}],"name":"setLockedLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTax","type":"uint256"}],"name":"setMaxSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minLiquidityPercent","type":"uint256"}],"name":"setMinLiquidityPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"what","type":"bool"}],"name":"setSellContraints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxnumber","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setTaxesByAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTaxesToDefaultForSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"what","type":"bool"}],"name":"setToNormalOnAnyError","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"p","type":"address"}],"name":"setUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"whitelist","type":"bool"}],"name":"setWhitelistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDevFeesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniSwapV2PairContract","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526a52b7d2dcc80cd2e4000000601281905562000023906000196200073e565b620000319060001962000724565b60135560006016556000601755600060185560006019556000601a556000601b556000601c556000601d55606460125460016200006f919062000702565b6200007b9190620006eb565b601e556a52b7d2dcc80cd2e4000000601f5569043c33c1937564800000602055600060215561015e6022556103b66023556103e860248190556001602581905568056bc75e2d63100000602655602780546001600160a01b03191661dead17905561026a602855602991909155602a805460ff19169091179055602d805474017a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a81b031990911617905562127500602e55602f805463ffffffff19908116610100179091556130d46031556032805490911663010000001790553480156200015b57600080fd5b50604051620057a3380380620057a38339810160408190526200017e91620006b9565b600080546001600160a01b0319166001600160a01b03831690811782556040518392907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013546001600160a01b0380831660009081526003602090815260409182902093909355602d54815163c45a015560e01b81529151921692839263c45a0155926004808201939291829003018186803b1580156200022457600080fd5b505afa15801562000239573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025f9190620006b9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a857600080fd5b505afa158015620002bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e39190620006b9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200032c57600080fd5b505af115801562000341573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003679190620006b9565b602b80546001600160a01b03199081166001600160a01b03938416908117909255602a805462010000600160b01b0319166201000086861602179055602c8054909116821790556000549091620003cf9116600a6200064760201b62002acf1790919060201c565b50620003eb30600a6200064760201b62002acf1790919060201c565b50602b546200041290600c906001600160a01b031662000647602090811b62002acf17901c565b506200042e3060106200064760201b62002acf1790919060201c565b50602b5462000455906010906001600160a01b031662000647602090811b62002acf17901c565b50620004836200046d6000546001600160a01b031690565b60106200064760201b62002acf1790919060201c565b506030602090815260197f686dc217b182b1fe88c7defdc5cd77807fc691ce05a160638669d7322051eee055604b7fc7874712a1c7fb891b421aa6c0d42dbf3cd912d7a18f183783fb32e938cbaa015560af7f89a47dfbb363dd4e64da56b4585033c9abd8a425d24b94630469c44bee7189c25560b47f11a30d68d5ffd3a101d3683e9a6997d49d9351e95dc004c6a4e652b897626df75560c87f2f780f5a40ea4901ca784926540b83b7459f13a98fc8f78e5634eb2a01df3af55561015e7f9d0b70a39d4b3569f175af8ea51ae318eac80460c467ee4a16ee63ec5720706e556102e47fd558ed0e54509c62efb2aedb46e6ad1b04c7bdca351e3613e136c946b91686d85561049c7f4ebb69666752feecd656ebf5f8cd3c2f1c70bb06a0c3d3744be479e4a580c233556109c47fa486383ba35136cdb74cd2aa7ac94004c5d7a5da0cbc794ef0a3909609a2b4a155600960009081526130d47fb0fb8c799ed0a9ebd24dd2177f752eb5b4872b0e0f3da30ee877615a016e915d556012546040519081526001600160a01b038616927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505062000781565b60006200065e836001600160a01b03841662000667565b90505b92915050565b6000818152600183016020526040812054620006b05750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000661565b50600062000661565b600060208284031215620006cc57600080fd5b81516001600160a01b0381168114620006e457600080fd5b9392505050565b600082620006fd57620006fd6200076b565b500490565b60008160001904831182151516156200071f576200071f62000755565b500290565b60008282101562000739576200073962000755565b500390565b6000826200075057620007506200076b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61501280620007916000396000f3fe6080604052600436106104b95760003560e01c8063735d1cb81161026b578063b6b28a331161014f578063dd2a62e2116100c1578063f2fde38b11610085578063f2fde38b14610e5c578063f5c52ceb14610e7c578063f80e82b614610e92578063fda3947514610ea7578063fdc86c2f14610ebd578063ff35d22014610edd57600080fd5b8063dd2a62e214610dac578063dd62ed3e14610dc1578063e3c2578614610e07578063ea1644d514610e1c578063ea2f0b3714610e3c57600080fd5b8063c49b9a8011610113578063c49b9a8014610cf2578063cbecede014610d12578063cea2695814610d2c578063cf6a8e5114610d4c578063d543dbeb14610d6c578063d5aed6bf14610d8c57600080fd5b8063b6b28a3314610c72578063ba40007314610c87578063bea9849e14610c9c578063c0b0fda214610cbc578063c21ebd0714610cd257600080fd5b80639c74daf0116101e8578063a457c2d7116101ac578063a457c2d714610bd3578063a9059cbb14610bf3578063aa45026b14610c13578063ac41860e14610c29578063b3f22ce314610c3e578063b439824414610c5457600080fd5b80639c74daf014610b485780639c9c249214610b685780639e37da4314610b7e578063a19bd31914610b9e578063a3e4be6714610bbe57600080fd5b80638da5cb5b1161022f5780638da5cb5b14610aa85780638eb2406514610ac65780638ee88c5314610ae65780638f9a55c014610b0657806395d89b4114610b1c57600080fd5b8063735d1cb814610a1d5780637d1db4a514610a325780637d520dde14610a4857806387b27dec14610a6857806388f8202014610a8857600080fd5b80633bd5d1731161039d5780635054e8bf1161030f578063583e0568116102d3578063583e056814610944578063664e4ed1146109825780636833b55a146109a25780636bc87c3a146109d257806370a08231146109e8578063715018a614610a0857600080fd5b80635054e8bf146108b957806351bd2611146108ce57806352390c02146108ee5780635342acb41461090e57806354a417671461092e57600080fd5b80634549b039116103615780634549b0391461080357806345ed22c114610823578063479e72e01461084357806347ee03941461086357806348a8fe2e146108835780634ebe3cf2146108a357600080fd5b80633bd5d1731461076e5780633c9f861d1461078e57806340927952146107a3578063417c73a7146107c3578063437823ec146107e357600080fd5b806323b872dd116104365780633685d419116103fa5780633685d419146106c2578063379e2919146106e2578063380a21f81461070257806339509351146107185780633b03f45a146107385780633b124fe71461075857600080fd5b806323b872dd146106315780632a9319cb146106515780632d838119146106715780632eb2e9f414610691578063313ce567146106a657600080fd5b8063109fa9be1161047d578063109fa9be1461059f578063120a0612146105bf57806313114a9d146105df57806318160ddd146105f45780631e452d0d1461060957600080fd5b8063052d9e7e146104c5578063061c82d0146104e757806306fdde0314610507578063095ea7b31461054b5780630cffa75e1461057b57600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104e56104e0366004614be6565b610efd565b005b3480156104f357600080fd5b506104e5610502366004614c51565b610f43565b34801561051357600080fd5b506040805180820190915260098152684669626f6e6163636960b81b60208201525b6040516105429190614d21565b60405180910390f35b34801561055757600080fd5b5061056b610566366004614af5565b610fba565b6040519015158152602001610542565b34801561058757600080fd5b5061059160195481565b604051908152602001610542565b3480156105ab57600080fd5b506104e56105ba366004614be6565b610fd1565b3480156105cb57600080fd5b506104e56105da366004614a0c565b611015565b3480156105eb57600080fd5b50601454610591565b34801561060057600080fd5b50601254610591565b34801561061557600080fd5b5060295460245460408051928352602083019190915201610542565b34801561063d57600080fd5b5061056b61064c366004614a7f565b6110d0565b34801561065d57600080fd5b506104e561066c366004614c51565b611139565b34801561067d57600080fd5b5061059161068c366004614c51565b611270565b34801561069d57600080fd5b506104e56112f4565b3480156106b257600080fd5b5060405160128152602001610542565b3480156106ce57600080fd5b506104e56106dd366004614a0c565b61132e565b3480156106ee57600080fd5b506104e56106fd366004614c51565b6113e3565b34801561070e57600080fd5b5061059160185481565b34801561072457600080fd5b5061056b610733366004614af5565b6114b8565b34801561074457600080fd5b506104e5610753366004614be6565b6114ee565b34801561076457600080fd5b50610591601a5481565b34801561077a57600080fd5b506104e5610789366004614c51565b611536565b34801561079a57600080fd5b50601554610591565b3480156107af57600080fd5b506104e56107be366004614ac0565b61163e565b3480156107cf57600080fd5b506104e56107de366004614a0c565b61168d565b3480156107ef57600080fd5b506104e56107fe366004614a0c565b6116c2565b34801561080f57600080fd5b5061059161081e366004614c6a565b6116f7565b34801561082f57600080fd5b506104e561083e366004614be6565b6117cf565b34801561084f57600080fd5b506104e561085e366004614c51565b61181b565b34801561086f57600080fd5b506104e561087e366004614a0c565b61190c565b34801561088f57600080fd5b506104e561089e366004614a0c565b611941565b3480156108af57600080fd5b5061059160175481565b3480156108c557600080fd5b506104e5611a02565b3480156108da57600080fd5b506104e56108e9366004614be6565b611aab565b3480156108fa57600080fd5b506104e5610909366004614a0c565b611af3565b34801561091a57600080fd5b5061056b610929366004614a0c565b611c57565b34801561093a57600080fd5b5061059160165481565b34801561095057600080fd5b50602a5461096a906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610542565b34801561098e57600080fd5b506104e561099d366004614c51565b611c64565b3480156109ae57600080fd5b506109b7611d75565b60408051938452602084019290925290820152606001610542565b3480156109de57600080fd5b50610591601b5481565b3480156109f457600080fd5b50610591610a03366004614a0c565b611de2565b348015610a1457600080fd5b506104e5611e32565b348015610a2957600080fd5b506104e5611ea6565b348015610a3e57600080fd5b50610591601f5481565b348015610a5457600080fd5b506104e5610a63366004614be6565b611ee4565b348015610a7457600080fd5b506104e5610a83366004614c8d565b611f85565b348015610a9457600080fd5b5061056b610aa3366004614a0c565b611fc1565b348015610ab457600080fd5b506000546001600160a01b031661096a565b348015610ad257600080fd5b506104e5610ae1366004614be6565b611fce565b348015610af257600080fd5b506104e5610b01366004614c51565b612022565b348015610b1257600080fd5b50610591601e5481565b348015610b2857600080fd5b506040805180820190915260038152622324a160e91b6020820152610535565b348015610b5457600080fd5b50602b5461096a906001600160a01b031681565b348015610b7457600080fd5b5061059160235481565b348015610b8a57600080fd5b50602c5461096a906001600160a01b031681565b348015610baa57600080fd5b506104e5610bb9366004614c51565b612093565b348015610bca57600080fd5b506104e56120c2565b348015610bdf57600080fd5b5061056b610bee366004614af5565b612102565b348015610bff57600080fd5b5061056b610c0e366004614af5565b612151565b348015610c1f57600080fd5b50610591601c5481565b348015610c3557600080fd5b506104e561215e565b348015610c4a57600080fd5b5061059160205481565b348015610c6057600080fd5b506001546001600160a01b031661096a565b348015610c7e57600080fd5b5061059161219f565b348015610c9357600080fd5b506105916121d6565b348015610ca857600080fd5b506104e5610cb7366004614a0c565b61220a565b348015610cc857600080fd5b50610591601d5481565b348015610cde57600080fd5b50602d5461096a906001600160a01b031681565b348015610cfe57600080fd5b506104e5610d0d366004614be6565b61225e565b348015610d1e57600080fd5b50602a5461056b9060ff1681565b348015610d3857600080fd5b506104e5610d47366004614c51565b6122cf565b348015610d5857600080fd5b50610591610d67366004614c8d565b612340565b348015610d7857600080fd5b506104e5610d87366004614c51565b61245b565b348015610d9857600080fd5b506104e5610da7366004614a0c565b612595565b348015610db857600080fd5b506104e56125e1565b348015610dcd57600080fd5b50610591610ddc366004614a46565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610e1357600080fd5b50610591612784565b348015610e2857600080fd5b506104e5610e37366004614c51565b6127ac565b348015610e4857600080fd5b506104e5610e57366004614a0c565b61285a565b348015610e6857600080fd5b506104e5610e77366004614a0c565b61288f565b348015610e8857600080fd5b5061059160225481565b348015610e9e57600080fd5b5061096a612979565b348015610eb357600080fd5b5061059160285481565b348015610ec957600080fd5b506104e5610ed8366004614c51565b6129b4565b348015610ee957600080fd5b506104e5610ef8366004614c51565b6129e3565b6000546001600160a01b03163314610f305760405162461bcd60e51b8152600401610f2790614dc2565b60405180910390fd5b6032805460ff1916911515919091179055565b6000546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610f2790614dc2565b6107d0610f97601d54610f91601c54610f91601b5487612ae490919063ffffffff16565b90612ae4565b1115610fb55760405162461bcd60e51b8152600401610f2790614d76565b601a55565b6000610fc7338484612b43565b5060015b92915050565b6000546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610f2790614dc2565b603280549115156101000261ff0019909216919091179055565b6000546001600160a01b0316331461103f5760405162461bcd60e51b8152600401610f2790614dc2565b6002546001600160a01b0316156110ae5760405162461bcd60e51b815260206004820152602d60248201527f4465762077616c6c657420616464726573732063616e6e6f742062652063686160448201526c1b99d959081bdb98d9481cd95d609a1b6064820152608401610f27565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006110dd848484612c67565b61112f843361112a85604051806060016040528060288152602001614f90602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612fa2565b612b43565b5060019392505050565b6000546001600160a01b031633146111635760405162461bcd60e51b8152600401610f2790614dc2565b6127108111156111db5760405162461bcd60e51b815260206004820152603f60248201527f4d696e696d756d206c69717569646974792070657263656e746167652070657260448201527f63656e746167652063616e2774206265206d6f7265207468616e2031303025006064820152608401610f27565b600081116112495760405162461bcd60e51b815260206004820152603560248201527f4d696e696d756d206c69717569646974792070657263656e746167652070657260448201527463656e746167652063616e2774206265207a65726f60581b6064820152608401610f27565b61126a61271061126483601254612fdc90919063ffffffff16565b9061305b565b60205550565b60006013548211156112d75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f27565b60006112e161309d565b90506112ed838261305b565b9392505050565b6000546001600160a01b0316331461131e5760405162461bcd60e51b8152600401610f2790614dc2565b602f805461ffff19166001179055565b6000546001600160a01b031633146113585760405162461bcd60e51b8152600401610f2790614dc2565b6113636008826130c0565b6113bd5760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e2072604482015264195dd85c9960da1b6064820152608401610f27565b6113c86008826130e2565b506001600160a01b0316600090815260046020526040812055565b6000546001600160a01b0316331461140d5760405162461bcd60e51b8152600401610f2790614dc2565b60968111156114715760405162461bcd60e51b815260206004820152602a60248201527f44657620666565732063616e206e6f742065786365656420746865206465636c604482015269185c9959081b1a5b5a5d60b21b6064820152608401610f27565b6107d0611495601d54610f9184610f91601b54601a54612ae490919063ffffffff16565b11156114b35760405162461bcd60e51b8152600401610f2790614d76565b601c55565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610fc791859061112a9086612ae4565b6000546001600160a01b031633146115185760405162461bcd60e51b8152600401610f2790614dc2565b602f805491151563010000000263ff00000019909216919091179055565b336115426008826130c0565b156115a45760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610f27565b60008060006115b2856130f7565b9350935093505060006115c361309d565b905060006115d4878686868661319a565b50506001600160a01b0387166000908152600360205260409020549091506115fc908261320e565b6001600160a01b038716600090815260036020526040902055601354611622908261320e565b6013556014546116329088612ae4565b60145550505050505050565b6000546001600160a01b031633146116685760405162461bcd60e51b8152600401610f2790614dc2565b801561167e57611679600c83612acf565b505050565b611679600c836130e2565b5050565b6000546001600160a01b031633146116b75760405162461bcd60e51b8152600401610f2790614dc2565b611689600e82612acf565b6000546001600160a01b031633146116ec5760405162461bcd60e51b8152600401610f2790614dc2565b611689600a82612acf565b600060125483111561174b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f27565b8161179057600080600061175e866130f7565b93509350935050600061176f61309d565b90506000611780888686868661319a565b50909650610fcb95505050505050565b600080600061179e866130f7565b9350935093505060006117af61309d565b905060006117c0888686868661319a565b509650610fcb95505050505050565b6000546001600160a01b031633146117f95760405162461bcd60e51b8152600401610f2790614dc2565b602f54610100900460ff161561181857602f805460ff19168215151790555b50565b6000546001600160a01b031633146118455760405162461bcd60e51b8152600401610f2790614dc2565b6102268111156118bd5760405162461bcd60e51b815260206004820152603860248201527f49206b6e6f7720796f752077616e7420746f2070756e697368207468656d202c60448201527f206275742074686579206172652068756d616e20746f6f2e00000000000000006064820152608401610f27565b60fa8110156119075760405162461bcd60e51b8152602060048201526016602482015275249030b4b713ba103a3430ba1036b2b931b4b33ab61760511b6044820152606401610f27565b602255565b6000546001600160a01b031633146119365760405162461bcd60e51b8152600401610f2790614dc2565b611689601082612acf565b6000546001600160a01b0316331461196b5760405162461bcd60e51b8152600401610f2790614dc2565b6001546001600160a01b0316156119e05760405162461bcd60e51b815260206004820152603360248201527f4c6f636b6564206c697175696469747920616464726573732063616e6e6f742060448201527218994818da185b99d959081bdb98d9481cd95d606a1b6064820152608401610f27565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610f2790614df7565b602154611a399047612ae4565b6021556002546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611a75573d6000803e3d6000fd5b506040514781527f2163423df8c81336c4fbc2223f77e05e2d04aab842e4a5edf894b539ca7955309060200160405180910390a1565b6000546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610f2790614dc2565b602d8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314611b1d5760405162461bcd60e51b8152600401610f2790614dc2565b611b286008826130c0565b15611b835760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c7265616479206578636c7564656420696e2072604482015264195dd85c9960da1b6064820152608401610f27565b610400611b906008613250565b10611bf25760405162461bcd60e51b815260206004820152602c60248201527f4578636c7564656420726577617264207365742072656163686564206d61786960448201526b6d756d20636170616369747960a01b6064820152608401610f27565b6001600160a01b03811660009081526003602052604090205415611c4c576001600160a01b038116600090815260036020526040902054611c3290611270565b6001600160a01b0382166000908152600460205260409020555b611689600882612acf565b6000610fcb600a836130c0565b6000546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610f2790614dc2565b6103cf811115611cff5760405162461bcd60e51b815260206004820152603660248201527f43616e277420696e637265617365204154482073656c6c20746178207065726360448201527532b73a30b3b29036b7b932903a3430b7103a3434b99760511b6064820152608401610f27565b610343811015611d705760405162461bcd60e51b815260206004820152603660248201527f43616e2774206465637265617365204154482073656c6c20746178207065726360448201527532b73a30b3b29036b7b932903a3430b7103a3434b99760511b6064820152608401610f27565b602355565b336000908152600660209081526040808320546007835281842054818552603090935290832054839283924292909190849082851115611dbc57611db9858461320e565b91505b80158015611dca5750600384115b15611dd457506031545b929792965094509092505050565b6000611def6008836130c0565b15611e1057506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610fcb90611270565b6000546001600160a01b03163314611e5c5760405162461bcd60e51b8152600401610f2790614dc2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611ed05760405162461bcd60e51b8152600401610f2790614dc2565b6032805463ffff0000191662010000179055565b6000546001600160a01b03163314611f0e5760405162461bcd60e51b8152600401610f2790614dc2565b60325462010000900460ff1615611f675760405162461bcd60e51b815260206004820152601b60248201527f446576206d6f646520697320636c6f73656420666f72657665722e00000000006044820152606401610f27565b6032805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b03163314611faf5760405162461bcd60e51b8152600401610f2790614dc2565b60009182526030602052604090912055565b6000610fcb6008836130c0565b6000546001600160a01b03163314611ff85760405162461bcd60e51b8152600401610f2790614dc2565b602f54610100900460ff161561181857602f8054821515620100000262ff00001990911617905550565b6000546001600160a01b0316331461204c5760405162461bcd60e51b8152600401610f2790614dc2565b6107d0612070601d54610f91601c54610f9186601a54612ae490919063ffffffff16565b111561208e5760405162461bcd60e51b8152600401610f2790614d76565b601b55565b6000546001600160a01b031633146120bd5760405162461bcd60e51b8152600401610f2790614dc2565b602e55565b6000546001600160a01b031633146120ec5760405162461bcd60e51b8152600401610f2790614dc2565b6000601681905560178190556018819055601955565b6000610fc7338461112a85604051806060016040528060258152602001614fb8602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612fa2565b6000610fc7338484612c67565b6000546001600160a01b031633146121885760405162461bcd60e51b8152600401610f2790614dc2565b6032601a81905561012c601b556096601c55601d55565b60006121b8601b54601c54612ae490919063ffffffff16565b601b546121c790612710614ed1565b6121d19190614eaf565b905090565b6002546000906001600160a01b031633146122035760405162461bcd60e51b8152600401610f2790614df7565b5060215490565b6000546001600160a01b031633146122345760405162461bcd60e51b8152600401610f2790614dc2565b602a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000546001600160a01b031633146122885760405162461bcd60e51b8152600401610f2790614dc2565b602a805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b6000546001600160a01b031633146122f95760405162461bcd60e51b8152600401610f2790614dc2565b6107d061231d82610f91601c54610f91601b54601a54612ae490919063ffffffff16565b111561233b5760405162461bcd60e51b8152600401610f2790614d76565b601d55565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561239757600080fd5b505afa1580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cf9190614c01565b63ffffffff1692506001600160701b031692506001600160701b031692508183111561240057829450819350612407565b8194508293505b8461241a57600195505050505050610fcb565b60006124268689612ae4565b9050600061244d826112646026546124478e8b61320e90919063ffffffff16565b90612fdc565b9a9950505050505050505050565b6000546001600160a01b031633146124855760405162461bcd60e51b8152600401610f2790614dc2565b6127108111156124fd5760405162461bcd60e51b815260206004820152603c60248201527f4d6178696d756d207472616e73616374696f6e206c696d69742070657263656e60448201527f746167652063616e2774206265206d6f7265207468616e2031303025000000006064820152608401610f27565b60648110156125745760405162461bcd60e51b815260206004820152603f60248201527f4d6178696d756d207472616e73616374696f6e206c696d69742063616e27742060448201527f6265206c657373207468616e20746865206465636c61726564206c696d6974006064820152608401610f27565b61258f61271061126483601254612fdc90919063ffffffff16565b601f5550565b6000546001600160a01b031633146125bf5760405162461bcd60e51b8152600401610f2790614dc2565b602b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461260b5760405162461bcd60e51b8152600401610f2790614dc2565b603060205260197f686dc217b182b1fe88c7defdc5cd77807fc691ce05a160638669d7322051eee05560377fc7874712a1c7fb891b421aa6c0d42dbf3cd912d7a18f183783fb32e938cbaa0155603c7f89a47dfbb363dd4e64da56b4585033c9abd8a425d24b94630469c44bee7189c25560787f11a30d68d5ffd3a101d3683e9a6997d49d9351e95dc004c6a4e652b897626df75560b47f2f780f5a40ea4901ca784926540b83b7459f13a98fc8f78e5634eb2a01df3af55561015e7f9d0b70a39d4b3569f175af8ea51ae318eac80460c467ee4a16ee63ec5720706e556102e47fd558ed0e54509c62efb2aedb46e6ad1b04c7bdca351e3613e136c946b91686d85561049c7f4ebb69666752feecd656ebf5f8cd3c2f1c70bb06a0c3d3744be479e4a580c233556109c47fa486383ba35136cdb74cd2aa7ac94004c5d7a5da0cbc794ef0a3909609a2b4a15560096000526130d47fb0fb8c799ed0a9ebd24dd2177f752eb5b4872b0e0f3da30ee877615a016e915d55565b600061279d601b54601c54612ae490919063ffffffff16565b601c546121c790612710614ed1565b6000546001600160a01b031633146127d65760405162461bcd60e51b8152600401610f2790614dc2565b600a8110156128395760405162461bcd60e51b815260206004820152602960248201527f43616e277420646563657265617365206d617877616c6c6574206d6f726520746044820152683430b7103a3430ba1760b91b6064820152608401610f27565b6127108160125461284a9190614ed1565b6128549190614eaf565b601e5550565b6000546001600160a01b031633146128845760405162461bcd60e51b8152600401610f2790614dc2565b611689600a826130e2565b6000546001600160a01b031633146128b95760405162461bcd60e51b8152600401610f2790614dc2565b6001600160a01b03811661291e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f27565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b031633146129a45760405162461bcd60e51b8152600401610f2790614dc2565b506002546001600160a01b031690565b6000546001600160a01b031633146129de5760405162461bcd60e51b8152600401610f2790614dc2565b603155565b6000546001600160a01b03163314612a0d5760405162461bcd60e51b8152600401610f2790614dc2565b61014d8111612a6a5760405162461bcd60e51b8152602060048201526024808201527f4669626f6e616363692063616e6e6f74206265206c6f776572207468616e20746044820152633434b99760e11b6064820152608401610f27565b610384811115612aca5760405162461bcd60e51b815260206004820152602560248201527f4669626f6e616363692063616e6e6f7420626520686967686572207468616e206044820152643a3434b99760d91b6064820152608401610f27565b602855565b60006112ed836001600160a01b03841661325a565b600080612af18385614e97565b9050838110156112ed5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f27565b6001600160a01b038316612ba55760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f27565b6001600160a01b038216612c065760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f27565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612ccb5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f27565b6001600160a01b038216612d2d5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f27565b6002546001600160a01b0383811691161415612d9c5760405162461bcd60e51b815260206004820152602860248201527f4465762077616c6c657420616464726573732063616e6e6f74207265636569766044820152676520746f6b656e7360c01b6064820152608401610f27565b6002546001600160a01b0384811691161415612e085760405162461bcd60e51b815260206004820152602560248201527f4465762077616c6c657420616464726573732063616e6e6f742073656e6420746044820152646f6b656e7360d81b6064820152608401610f27565b60008111612e6a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f27565b6000546001600160a01b03848116911614801590612e9657506000546001600160a01b03838116911614155b15612efe57601f54811115612efe5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610f27565b6000612f0930611de2565b9050601f548110612f195750601f545b60205481108015908190612f355750602a54610100900460ff16155b8015612f495750612f47600c866130c0565b155b8015612f575750602a5460ff165b15612f6757612f676020546132a9565b6001612f74600a876130c0565b80612f855750612f85600a866130c0565b15612f8e575060005b612f9a86868684613396565b505050505050565b60008184841115612fc65760405162461bcd60e51b8152600401610f279190614d21565b506000612fd38486614ef0565b95945050505050565b600082612feb57506000610fcb565b6000612ff78385614ed1565b9050826130048583614eaf565b146112ed5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f27565b60006112ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c5c565b60008060006130aa613c8a565b90925090506130b9828261305b565b9250505090565b6001600160a01b038116600090815260018301602052604081205415156112ed565b60006112ed836001600160a01b038416613d9d565b600080600080600061311a61271061126460165489612fdc90919063ffffffff16565b9050600061314561271061126461313e601854601754612ae490919063ffffffff16565b8a90612fdc565b905060006131646127106112646019548b612fdc90919063ffffffff16565b90506000613172898561320e565b905061317e818461320e565b905061318a818361320e565b9993985091965094509092505050565b60008080806131a98986612fdc565b905060006131b78987612fdc565b905060006131c58988612fdc565b905060006131d38989612fdc565b905060006131e1858561320e565b90506131ed818461320e565b90506131f9818361320e565b949d949c50929a509298505050505050505050565b60006112ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fa2565b6000610fcb825490565b60008181526001830160205260408120546132a157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fcb565b506000610fcb565b602a805461ff00191661010017905560006132d2614e206112646132cb61219f565b8590612fdc565b905060006132e0838361320e565b905060006132fa826112646132f3612784565b8790612fdc565b90504761330683613e8a565b6000613312478361320e565b905060006133266127106112648487612fdc565b90506000613334838361320e565b90506133408782614010565b60408051878152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602a805461ff0019169055505050505050565b6032546301000000900460ff1661346557602b546001600160a01b038481169116148015906133d357506027546001600160a01b03848116911614155b80156133ed5750602d546001600160a01b03848116911614155b1561346557601e54826133ff85611de2565b6134099190614e97565b11156134655760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61782060448201526439b4bd329760d91b6064820152608401610f27565b603254610100900460ff161561351957613480600e856130c0565b156134c75760405162461bcd60e51b815260206004820152601760248201527620b2323932b9b99034b990313630b1b5b634b9ba32b21760491b6044820152606401610f27565b6134d2600e846130c0565b156135195760405162461bcd60e51b815260206004820152601760248201527620b2323932b9b99034b990313630b1b5b634b9ba32b21760491b6044820152606401610f27565b60325460ff16156135d25761352f6010856130c0565b61357b5760405162461bcd60e51b815260206004820152601b60248201527f41646472657373206973206e6f742077686974656c69737465642e00000000006044820152606401610f27565b6135866010846130c0565b6135d25760405162461bcd60e51b815260206004820152601b60248201527f41646472657373206973206e6f742077686974656c69737465642e00000000006044820152606401610f27565b6032546301000000900460ff161561365757602b546001600160a01b0384811691161415613657576000546001600160a01b038581169116146136575760405162461bcd60e51b815260206004820152601760248201527f4f6e6c79206f776e65722063616e20616464206c69712e0000000000000000006044820152606401610f27565b602b546001600160a01b0384811691161480156136765750602f5460ff165b156139615760408051600280825260608201835260009260208301908036833701905050905030816000815181106136b0576136b0614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561371e57600080fd5b505afa158015613732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137569190614a29565b8160018151811061376957613769614f4e565b6001600160a01b039283166020918202929092010152602a5460405163d06ca61f60e01b8152600092620100009092049091169063d06ca61f906137b39087908690600401614e3a565b60006040518083038186803b1580156137cb57600080fd5b505afa1580156137df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138079190810190614b21565b60018151811061381957613819614f4e565b60200260200101519050600061382f8286612340565b905060285461384f6024546112646103e885612fdc90919063ffffffff16565b10156138cd5760405162461bcd60e51b815260206004820152604160248201527f5472616e73616374696f6e2077696c6c2064726f70207468652070726963652060448201527f62656c6f772074686520476f6c64656e526174696f202c2072657665727465646064820152601760f91b608482015260a401610f27565b60285460295410156139405760405162461bcd60e51b815260206004820152603660248201527f49646b20686f7720796f7520706173736564207468617420726571756972656d60448201527532b73a10313aba1034ba1039ba37b839903432b9329760511b6064820152608401610f27565b61394a8286614101565b5061395487614242565b61395c6143aa565b505050505b602b546001600160a01b0385811691161480156139805750602f5460ff165b15613b3b5760408051600280825260608201835260009260208301908036833701905050905030816000815181106139ba576139ba614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a2857600080fd5b505afa158015613a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a609190614a29565b81600181518110613a7357613a73614f4e565b6001600160a01b039283166020918202929092010152602a5460405163d06ca61f60e01b8152600092620100009092049091169063d06ca61f90613abd9087908690600401614e3a565b60006040518083038186803b158015613ad557600080fd5b505afa158015613ae9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613b119190810190614b21565b600181518110613b2357613b23614f4e565b60200260200101519050613b37818561443e565b5050505b602b546001600160a01b03858116911614801590613b675750602b546001600160a01b03848116911614155b15613b7557613b7584614242565b801580613b8b57506032546301000000900460ff165b15613ba55760006016819055601781905560188190556019555b6000613bb26008866130c0565b90506000613bc16008866130c0565b9050818015613bce575080155b15613be357613bde86868661451b565b613c3f565b81158015613bee5750805b15613bfe57613bde868686614672565b81158015613c0a575080155b15613c1a57613bde868686614745565b818015613c245750805b15613c3457613bde8686866147b3565b613c3f868686614745565b612f9a601a54601655601b54601755601c54601855601d54601955565b60008183613c7d5760405162461bcd60e51b8152600401610f279190614d21565b506000612fd38486614eaf565b6013546012546000918291825b613ca16008613250565b811015613d6d576000613cb5600883614850565b6001600160a01b038116600090815260036020526040902054909150841080613cf557506001600160a01b03811660009081526004602052604090205483105b15613d0c5760135460125495509550505050509091565b6001600160a01b038116600090815260036020526040902054613d3090859061320e565b6001600160a01b038216600090815260046020526040902054909450613d5790849061320e565b9250508080613d6590614f07565b915050613c97565b50601254601354613d7d9161305b565b821015613d94576013546012549350935050509091565b90939092509050565b60008181526001830160205260408120548015613e80576000613dc1600183614ef0565b8554909150600090613dd590600190614ef0565b90506000866000018281548110613dee57613dee614f4e565b9060005260206000200154905080876000018481548110613e1157613e11614f4e565b600091825260208083209091019290925582815260018901909152604090208490558654879080613e4457613e44614f38565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610fcb565b6000915050610fcb565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ebf57613ebf614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f2d57600080fd5b505afa158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190614a29565b81600181518110613f7857613f78614f4e565b6001600160a01b039283166020918202929092010152602a54613fa49130916201000090041684612b43565b602a5460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790613fe2908590600090869030904290600401614e5b565b600060405180830381600087803b158015613ffc57600080fd5b505af1158015612f9a573d6000803e3d6000fd5b602a5461402e9030906201000090046001600160a01b031684612b43565b602a546001600160a01b03620100009091041663f305d71982308560008061405e6001546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156140c157600080fd5b505af11580156140d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140fa9190614caf565b5050505050565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561415857600080fd5b505afa15801561416c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141909190614c01565b63ffffffff1692506001600160701b031692506001600160701b03169250818311156141c1578294508193506141c8565b8194508293505b6141d28588612ae4565b94506141de848961320e565b9350846141f357600195505050505050610fcb565b600061420e8661126460265488612fdc90919063ffffffff16565b90506024548111156142205760248190555b60245461423390611264836103e8612fdc565b60295598975050505050505050565b6001600160a01b0381166000908152600660209081526040808320546007909252822054602f5442939062010000900460ff161561434157602b546001600160a01b0386811691161461434157818411156143415760006142a3858461320e565b6001600160a01b0387166000908152600760209081526040808320899055878352603090915290205492509050811580156142de5750600384115b156142e95760315491505b602e548110614310576001600160a01b038616600090815260066020526040812081905591505b602e5481101561433f57614325846001614e97565b6001600160a01b0387166000908152600660205260409020555b505b80601760008282546143539190614e97565b92505081905550806019600082825461436c9190614e97565b9250508190555080601660008282546143859190614e97565b92505081905550806018600082825461439e9190614e97565b90915550505050505050565b602d546000908190600160a01b900460ff16156144395760235460295411156144395760019050602254601760008282546143e59190614e97565b9091555050602254601980546000906143ff908490614e97565b909155505060225460168054600090614419908490614e97565b909155505060225460188054600090614433908490614e97565b90915550505b919050565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561449557600080fd5b505afa1580156144a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cd9190614c01565b63ffffffff1692506001600160701b031692506001600160701b03169250818311156144fe57829450819350614505565b8194508293505b61450f858861320e565b94506141de8489612ae4565b60008060008061452a856130f7565b9350935093509350600061453c61309d565b90506000806000614550898888888861319a565b9194509250905060006145638686612fdc565b6001600160a01b038d16600090815260046020526040902054909150614589908b61320e565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546145b8908561320e565b6001600160a01b03808e1660009081526003602052604080822093909355908d16815220546145e79084612ae4565b6001600160a01b038c1660009081526003602052604090205561460b30888761485c565b61461782828a89614907565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b60405161465c91815260200190565b60405180910390a3505050505050505050505050565b600080600080614681856130f7565b9350935093509350600061469361309d565b905060008060006146a7898888888861319a565b9194509250905060006146ba8686612fdc565b6001600160a01b038d166000908152600360205260409020549091506146e0908561320e565b6001600160a01b03808e16600090815260036020908152604080832094909455918e16815260049091522054614716908a612ae4565b6001600160a01b038c166000908152600460209081526040808320939093556003905220546145e79084612ae4565b600080600080614754856130f7565b9350935093509350600061476661309d565b9050600080600061477a898888888861319a565b91945092509050600061478d8686612fdc565b6001600160a01b038d166000908152600360205260409020549091506145b8908561320e565b6000806000806147c2856130f7565b935093509350935060006147d461309d565b905060008060006147e8898888888861319a565b9194509250905060006147fb8686612fdc565b6001600160a01b038d16600090815260046020526040902054909150614821908b61320e565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546146e0908561320e565b60006112ed838361495f565b6000821161486957505050565b60006148758383612fdc565b6001600160a01b03851660009081526003602052604090205490915061489b9082612ae4565b6001600160a01b0385166000908152600360205260409020556148bf6008856130c0565b15614901576001600160a01b0384166000908152600460205260409020546148e79084612ae4565b6001600160a01b0385166000908152600460205260409020555b50505050565b614926836149208660135461320e90919063ffffffff16565b9061320e565b6013556014546149369083612ae4565b6014556015546149469082612ae4565b601555601254614956908261320e565b60125550505050565b815460009082106149bd5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610f27565b8260000182815481106149d2576149d2614f4e565b9060005260206000200154905092915050565b8035801515811461443957600080fd5b80516001600160701b038116811461443957600080fd5b600060208284031215614a1e57600080fd5b81356112ed81614f7a565b600060208284031215614a3b57600080fd5b81516112ed81614f7a565b60008060408385031215614a5957600080fd5b8235614a6481614f7a565b91506020830135614a7481614f7a565b809150509250929050565b600080600060608486031215614a9457600080fd5b8335614a9f81614f7a565b92506020840135614aaf81614f7a565b929592945050506040919091013590565b60008060408385031215614ad357600080fd5b8235614ade81614f7a565b9150614aec602084016149e5565b90509250929050565b60008060408385031215614b0857600080fd5b8235614b1381614f7a565b946020939093013593505050565b60006020808385031215614b3457600080fd5b825167ffffffffffffffff80821115614b4c57600080fd5b818501915085601f830112614b6057600080fd5b815181811115614b7257614b72614f64565b8060051b604051601f19603f83011681018181108582111715614b9757614b97614f64565b604052828152858101935084860182860187018a1015614bb657600080fd5b600095505b83861015614bd9578051855260019590950194938601938601614bbb565b5098975050505050505050565b600060208284031215614bf857600080fd5b6112ed826149e5565b600080600060608486031215614c1657600080fd5b614c1f846149f5565b9250614c2d602085016149f5565b9150604084015163ffffffff81168114614c4657600080fd5b809150509250925092565b600060208284031215614c6357600080fd5b5035919050565b60008060408385031215614c7d57600080fd5b82359150614aec602084016149e5565b60008060408385031215614ca057600080fd5b50508035926020909101359150565b600080600060608486031215614cc457600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015614d165781516001600160a01b031687529582019590820190600101614cf1565b509495945050505050565b600060208083528351808285015260005b81811015614d4e57858101830151858201604001528201614d32565b81811115614d60576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252602c908201527f546f74616c20666565732063616e206e6f74206578636565642074686520646560408201526b18db185c9959081b1a5b5a5d60a21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526023908201527f43616c6c6572206973206e6f74207468652064657657616c6c6574206164647260408201526265737360e81b606082015260800190565b828152604060208201526000614e536040830184614cdd565b949350505050565b85815284602082015260a060408201526000614e7a60a0830186614cdd565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115614eaa57614eaa614f22565b500190565b600082614ecc57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614eeb57614eeb614f22565b500290565b600082821015614f0257614f02614f22565b500390565b6000600019821415614f1b57614f1b614f22565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461181857600080fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207d52faad9126e7edca84c4398699b70936f3c9404abbb4b780e9eee212c3cb9f64736f6c634300080700330000000000000000000000007f8751b6567871b703090363284c6deb5e8fbd3d
Deployed Bytecode
0x6080604052600436106104b95760003560e01c8063735d1cb81161026b578063b6b28a331161014f578063dd2a62e2116100c1578063f2fde38b11610085578063f2fde38b14610e5c578063f5c52ceb14610e7c578063f80e82b614610e92578063fda3947514610ea7578063fdc86c2f14610ebd578063ff35d22014610edd57600080fd5b8063dd2a62e214610dac578063dd62ed3e14610dc1578063e3c2578614610e07578063ea1644d514610e1c578063ea2f0b3714610e3c57600080fd5b8063c49b9a8011610113578063c49b9a8014610cf2578063cbecede014610d12578063cea2695814610d2c578063cf6a8e5114610d4c578063d543dbeb14610d6c578063d5aed6bf14610d8c57600080fd5b8063b6b28a3314610c72578063ba40007314610c87578063bea9849e14610c9c578063c0b0fda214610cbc578063c21ebd0714610cd257600080fd5b80639c74daf0116101e8578063a457c2d7116101ac578063a457c2d714610bd3578063a9059cbb14610bf3578063aa45026b14610c13578063ac41860e14610c29578063b3f22ce314610c3e578063b439824414610c5457600080fd5b80639c74daf014610b485780639c9c249214610b685780639e37da4314610b7e578063a19bd31914610b9e578063a3e4be6714610bbe57600080fd5b80638da5cb5b1161022f5780638da5cb5b14610aa85780638eb2406514610ac65780638ee88c5314610ae65780638f9a55c014610b0657806395d89b4114610b1c57600080fd5b8063735d1cb814610a1d5780637d1db4a514610a325780637d520dde14610a4857806387b27dec14610a6857806388f8202014610a8857600080fd5b80633bd5d1731161039d5780635054e8bf1161030f578063583e0568116102d3578063583e056814610944578063664e4ed1146109825780636833b55a146109a25780636bc87c3a146109d257806370a08231146109e8578063715018a614610a0857600080fd5b80635054e8bf146108b957806351bd2611146108ce57806352390c02146108ee5780635342acb41461090e57806354a417671461092e57600080fd5b80634549b039116103615780634549b0391461080357806345ed22c114610823578063479e72e01461084357806347ee03941461086357806348a8fe2e146108835780634ebe3cf2146108a357600080fd5b80633bd5d1731461076e5780633c9f861d1461078e57806340927952146107a3578063417c73a7146107c3578063437823ec146107e357600080fd5b806323b872dd116104365780633685d419116103fa5780633685d419146106c2578063379e2919146106e2578063380a21f81461070257806339509351146107185780633b03f45a146107385780633b124fe71461075857600080fd5b806323b872dd146106315780632a9319cb146106515780632d838119146106715780632eb2e9f414610691578063313ce567146106a657600080fd5b8063109fa9be1161047d578063109fa9be1461059f578063120a0612146105bf57806313114a9d146105df57806318160ddd146105f45780631e452d0d1461060957600080fd5b8063052d9e7e146104c5578063061c82d0146104e757806306fdde0314610507578063095ea7b31461054b5780630cffa75e1461057b57600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104e56104e0366004614be6565b610efd565b005b3480156104f357600080fd5b506104e5610502366004614c51565b610f43565b34801561051357600080fd5b506040805180820190915260098152684669626f6e6163636960b81b60208201525b6040516105429190614d21565b60405180910390f35b34801561055757600080fd5b5061056b610566366004614af5565b610fba565b6040519015158152602001610542565b34801561058757600080fd5b5061059160195481565b604051908152602001610542565b3480156105ab57600080fd5b506104e56105ba366004614be6565b610fd1565b3480156105cb57600080fd5b506104e56105da366004614a0c565b611015565b3480156105eb57600080fd5b50601454610591565b34801561060057600080fd5b50601254610591565b34801561061557600080fd5b5060295460245460408051928352602083019190915201610542565b34801561063d57600080fd5b5061056b61064c366004614a7f565b6110d0565b34801561065d57600080fd5b506104e561066c366004614c51565b611139565b34801561067d57600080fd5b5061059161068c366004614c51565b611270565b34801561069d57600080fd5b506104e56112f4565b3480156106b257600080fd5b5060405160128152602001610542565b3480156106ce57600080fd5b506104e56106dd366004614a0c565b61132e565b3480156106ee57600080fd5b506104e56106fd366004614c51565b6113e3565b34801561070e57600080fd5b5061059160185481565b34801561072457600080fd5b5061056b610733366004614af5565b6114b8565b34801561074457600080fd5b506104e5610753366004614be6565b6114ee565b34801561076457600080fd5b50610591601a5481565b34801561077a57600080fd5b506104e5610789366004614c51565b611536565b34801561079a57600080fd5b50601554610591565b3480156107af57600080fd5b506104e56107be366004614ac0565b61163e565b3480156107cf57600080fd5b506104e56107de366004614a0c565b61168d565b3480156107ef57600080fd5b506104e56107fe366004614a0c565b6116c2565b34801561080f57600080fd5b5061059161081e366004614c6a565b6116f7565b34801561082f57600080fd5b506104e561083e366004614be6565b6117cf565b34801561084f57600080fd5b506104e561085e366004614c51565b61181b565b34801561086f57600080fd5b506104e561087e366004614a0c565b61190c565b34801561088f57600080fd5b506104e561089e366004614a0c565b611941565b3480156108af57600080fd5b5061059160175481565b3480156108c557600080fd5b506104e5611a02565b3480156108da57600080fd5b506104e56108e9366004614be6565b611aab565b3480156108fa57600080fd5b506104e5610909366004614a0c565b611af3565b34801561091a57600080fd5b5061056b610929366004614a0c565b611c57565b34801561093a57600080fd5b5061059160165481565b34801561095057600080fd5b50602a5461096a906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610542565b34801561098e57600080fd5b506104e561099d366004614c51565b611c64565b3480156109ae57600080fd5b506109b7611d75565b60408051938452602084019290925290820152606001610542565b3480156109de57600080fd5b50610591601b5481565b3480156109f457600080fd5b50610591610a03366004614a0c565b611de2565b348015610a1457600080fd5b506104e5611e32565b348015610a2957600080fd5b506104e5611ea6565b348015610a3e57600080fd5b50610591601f5481565b348015610a5457600080fd5b506104e5610a63366004614be6565b611ee4565b348015610a7457600080fd5b506104e5610a83366004614c8d565b611f85565b348015610a9457600080fd5b5061056b610aa3366004614a0c565b611fc1565b348015610ab457600080fd5b506000546001600160a01b031661096a565b348015610ad257600080fd5b506104e5610ae1366004614be6565b611fce565b348015610af257600080fd5b506104e5610b01366004614c51565b612022565b348015610b1257600080fd5b50610591601e5481565b348015610b2857600080fd5b506040805180820190915260038152622324a160e91b6020820152610535565b348015610b5457600080fd5b50602b5461096a906001600160a01b031681565b348015610b7457600080fd5b5061059160235481565b348015610b8a57600080fd5b50602c5461096a906001600160a01b031681565b348015610baa57600080fd5b506104e5610bb9366004614c51565b612093565b348015610bca57600080fd5b506104e56120c2565b348015610bdf57600080fd5b5061056b610bee366004614af5565b612102565b348015610bff57600080fd5b5061056b610c0e366004614af5565b612151565b348015610c1f57600080fd5b50610591601c5481565b348015610c3557600080fd5b506104e561215e565b348015610c4a57600080fd5b5061059160205481565b348015610c6057600080fd5b506001546001600160a01b031661096a565b348015610c7e57600080fd5b5061059161219f565b348015610c9357600080fd5b506105916121d6565b348015610ca857600080fd5b506104e5610cb7366004614a0c565b61220a565b348015610cc857600080fd5b50610591601d5481565b348015610cde57600080fd5b50602d5461096a906001600160a01b031681565b348015610cfe57600080fd5b506104e5610d0d366004614be6565b61225e565b348015610d1e57600080fd5b50602a5461056b9060ff1681565b348015610d3857600080fd5b506104e5610d47366004614c51565b6122cf565b348015610d5857600080fd5b50610591610d67366004614c8d565b612340565b348015610d7857600080fd5b506104e5610d87366004614c51565b61245b565b348015610d9857600080fd5b506104e5610da7366004614a0c565b612595565b348015610db857600080fd5b506104e56125e1565b348015610dcd57600080fd5b50610591610ddc366004614a46565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610e1357600080fd5b50610591612784565b348015610e2857600080fd5b506104e5610e37366004614c51565b6127ac565b348015610e4857600080fd5b506104e5610e57366004614a0c565b61285a565b348015610e6857600080fd5b506104e5610e77366004614a0c565b61288f565b348015610e8857600080fd5b5061059160225481565b348015610e9e57600080fd5b5061096a612979565b348015610eb357600080fd5b5061059160285481565b348015610ec957600080fd5b506104e5610ed8366004614c51565b6129b4565b348015610ee957600080fd5b506104e5610ef8366004614c51565b6129e3565b6000546001600160a01b03163314610f305760405162461bcd60e51b8152600401610f2790614dc2565b60405180910390fd5b6032805460ff1916911515919091179055565b6000546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610f2790614dc2565b6107d0610f97601d54610f91601c54610f91601b5487612ae490919063ffffffff16565b90612ae4565b1115610fb55760405162461bcd60e51b8152600401610f2790614d76565b601a55565b6000610fc7338484612b43565b5060015b92915050565b6000546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610f2790614dc2565b603280549115156101000261ff0019909216919091179055565b6000546001600160a01b0316331461103f5760405162461bcd60e51b8152600401610f2790614dc2565b6002546001600160a01b0316156110ae5760405162461bcd60e51b815260206004820152602d60248201527f4465762077616c6c657420616464726573732063616e6e6f742062652063686160448201526c1b99d959081bdb98d9481cd95d609a1b6064820152608401610f27565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006110dd848484612c67565b61112f843361112a85604051806060016040528060288152602001614f90602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612fa2565b612b43565b5060019392505050565b6000546001600160a01b031633146111635760405162461bcd60e51b8152600401610f2790614dc2565b6127108111156111db5760405162461bcd60e51b815260206004820152603f60248201527f4d696e696d756d206c69717569646974792070657263656e746167652070657260448201527f63656e746167652063616e2774206265206d6f7265207468616e2031303025006064820152608401610f27565b600081116112495760405162461bcd60e51b815260206004820152603560248201527f4d696e696d756d206c69717569646974792070657263656e746167652070657260448201527463656e746167652063616e2774206265207a65726f60581b6064820152608401610f27565b61126a61271061126483601254612fdc90919063ffffffff16565b9061305b565b60205550565b60006013548211156112d75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f27565b60006112e161309d565b90506112ed838261305b565b9392505050565b6000546001600160a01b0316331461131e5760405162461bcd60e51b8152600401610f2790614dc2565b602f805461ffff19166001179055565b6000546001600160a01b031633146113585760405162461bcd60e51b8152600401610f2790614dc2565b6113636008826130c0565b6113bd5760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e2072604482015264195dd85c9960da1b6064820152608401610f27565b6113c86008826130e2565b506001600160a01b0316600090815260046020526040812055565b6000546001600160a01b0316331461140d5760405162461bcd60e51b8152600401610f2790614dc2565b60968111156114715760405162461bcd60e51b815260206004820152602a60248201527f44657620666565732063616e206e6f742065786365656420746865206465636c604482015269185c9959081b1a5b5a5d60b21b6064820152608401610f27565b6107d0611495601d54610f9184610f91601b54601a54612ae490919063ffffffff16565b11156114b35760405162461bcd60e51b8152600401610f2790614d76565b601c55565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610fc791859061112a9086612ae4565b6000546001600160a01b031633146115185760405162461bcd60e51b8152600401610f2790614dc2565b602f805491151563010000000263ff00000019909216919091179055565b336115426008826130c0565b156115a45760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610f27565b60008060006115b2856130f7565b9350935093505060006115c361309d565b905060006115d4878686868661319a565b50506001600160a01b0387166000908152600360205260409020549091506115fc908261320e565b6001600160a01b038716600090815260036020526040902055601354611622908261320e565b6013556014546116329088612ae4565b60145550505050505050565b6000546001600160a01b031633146116685760405162461bcd60e51b8152600401610f2790614dc2565b801561167e57611679600c83612acf565b505050565b611679600c836130e2565b5050565b6000546001600160a01b031633146116b75760405162461bcd60e51b8152600401610f2790614dc2565b611689600e82612acf565b6000546001600160a01b031633146116ec5760405162461bcd60e51b8152600401610f2790614dc2565b611689600a82612acf565b600060125483111561174b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f27565b8161179057600080600061175e866130f7565b93509350935050600061176f61309d565b90506000611780888686868661319a565b50909650610fcb95505050505050565b600080600061179e866130f7565b9350935093505060006117af61309d565b905060006117c0888686868661319a565b509650610fcb95505050505050565b6000546001600160a01b031633146117f95760405162461bcd60e51b8152600401610f2790614dc2565b602f54610100900460ff161561181857602f805460ff19168215151790555b50565b6000546001600160a01b031633146118455760405162461bcd60e51b8152600401610f2790614dc2565b6102268111156118bd5760405162461bcd60e51b815260206004820152603860248201527f49206b6e6f7720796f752077616e7420746f2070756e697368207468656d202c60448201527f206275742074686579206172652068756d616e20746f6f2e00000000000000006064820152608401610f27565b60fa8110156119075760405162461bcd60e51b8152602060048201526016602482015275249030b4b713ba103a3430ba1036b2b931b4b33ab61760511b6044820152606401610f27565b602255565b6000546001600160a01b031633146119365760405162461bcd60e51b8152600401610f2790614dc2565b611689601082612acf565b6000546001600160a01b0316331461196b5760405162461bcd60e51b8152600401610f2790614dc2565b6001546001600160a01b0316156119e05760405162461bcd60e51b815260206004820152603360248201527f4c6f636b6564206c697175696469747920616464726573732063616e6e6f742060448201527218994818da185b99d959081bdb98d9481cd95d606a1b6064820152608401610f27565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610f2790614df7565b602154611a399047612ae4565b6021556002546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611a75573d6000803e3d6000fd5b506040514781527f2163423df8c81336c4fbc2223f77e05e2d04aab842e4a5edf894b539ca7955309060200160405180910390a1565b6000546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610f2790614dc2565b602d8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314611b1d5760405162461bcd60e51b8152600401610f2790614dc2565b611b286008826130c0565b15611b835760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c7265616479206578636c7564656420696e2072604482015264195dd85c9960da1b6064820152608401610f27565b610400611b906008613250565b10611bf25760405162461bcd60e51b815260206004820152602c60248201527f4578636c7564656420726577617264207365742072656163686564206d61786960448201526b6d756d20636170616369747960a01b6064820152608401610f27565b6001600160a01b03811660009081526003602052604090205415611c4c576001600160a01b038116600090815260036020526040902054611c3290611270565b6001600160a01b0382166000908152600460205260409020555b611689600882612acf565b6000610fcb600a836130c0565b6000546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610f2790614dc2565b6103cf811115611cff5760405162461bcd60e51b815260206004820152603660248201527f43616e277420696e637265617365204154482073656c6c20746178207065726360448201527532b73a30b3b29036b7b932903a3430b7103a3434b99760511b6064820152608401610f27565b610343811015611d705760405162461bcd60e51b815260206004820152603660248201527f43616e2774206465637265617365204154482073656c6c20746178207065726360448201527532b73a30b3b29036b7b932903a3430b7103a3434b99760511b6064820152608401610f27565b602355565b336000908152600660209081526040808320546007835281842054818552603090935290832054839283924292909190849082851115611dbc57611db9858461320e565b91505b80158015611dca5750600384115b15611dd457506031545b929792965094509092505050565b6000611def6008836130c0565b15611e1057506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610fcb90611270565b6000546001600160a01b03163314611e5c5760405162461bcd60e51b8152600401610f2790614dc2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611ed05760405162461bcd60e51b8152600401610f2790614dc2565b6032805463ffff0000191662010000179055565b6000546001600160a01b03163314611f0e5760405162461bcd60e51b8152600401610f2790614dc2565b60325462010000900460ff1615611f675760405162461bcd60e51b815260206004820152601b60248201527f446576206d6f646520697320636c6f73656420666f72657665722e00000000006044820152606401610f27565b6032805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b03163314611faf5760405162461bcd60e51b8152600401610f2790614dc2565b60009182526030602052604090912055565b6000610fcb6008836130c0565b6000546001600160a01b03163314611ff85760405162461bcd60e51b8152600401610f2790614dc2565b602f54610100900460ff161561181857602f8054821515620100000262ff00001990911617905550565b6000546001600160a01b0316331461204c5760405162461bcd60e51b8152600401610f2790614dc2565b6107d0612070601d54610f91601c54610f9186601a54612ae490919063ffffffff16565b111561208e5760405162461bcd60e51b8152600401610f2790614d76565b601b55565b6000546001600160a01b031633146120bd5760405162461bcd60e51b8152600401610f2790614dc2565b602e55565b6000546001600160a01b031633146120ec5760405162461bcd60e51b8152600401610f2790614dc2565b6000601681905560178190556018819055601955565b6000610fc7338461112a85604051806060016040528060258152602001614fb8602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612fa2565b6000610fc7338484612c67565b6000546001600160a01b031633146121885760405162461bcd60e51b8152600401610f2790614dc2565b6032601a81905561012c601b556096601c55601d55565b60006121b8601b54601c54612ae490919063ffffffff16565b601b546121c790612710614ed1565b6121d19190614eaf565b905090565b6002546000906001600160a01b031633146122035760405162461bcd60e51b8152600401610f2790614df7565b5060215490565b6000546001600160a01b031633146122345760405162461bcd60e51b8152600401610f2790614dc2565b602a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000546001600160a01b031633146122885760405162461bcd60e51b8152600401610f2790614dc2565b602a805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b6000546001600160a01b031633146122f95760405162461bcd60e51b8152600401610f2790614dc2565b6107d061231d82610f91601c54610f91601b54601a54612ae490919063ffffffff16565b111561233b5760405162461bcd60e51b8152600401610f2790614d76565b601d55565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561239757600080fd5b505afa1580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cf9190614c01565b63ffffffff1692506001600160701b031692506001600160701b031692508183111561240057829450819350612407565b8194508293505b8461241a57600195505050505050610fcb565b60006124268689612ae4565b9050600061244d826112646026546124478e8b61320e90919063ffffffff16565b90612fdc565b9a9950505050505050505050565b6000546001600160a01b031633146124855760405162461bcd60e51b8152600401610f2790614dc2565b6127108111156124fd5760405162461bcd60e51b815260206004820152603c60248201527f4d6178696d756d207472616e73616374696f6e206c696d69742070657263656e60448201527f746167652063616e2774206265206d6f7265207468616e2031303025000000006064820152608401610f27565b60648110156125745760405162461bcd60e51b815260206004820152603f60248201527f4d6178696d756d207472616e73616374696f6e206c696d69742063616e27742060448201527f6265206c657373207468616e20746865206465636c61726564206c696d6974006064820152608401610f27565b61258f61271061126483601254612fdc90919063ffffffff16565b601f5550565b6000546001600160a01b031633146125bf5760405162461bcd60e51b8152600401610f2790614dc2565b602b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461260b5760405162461bcd60e51b8152600401610f2790614dc2565b603060205260197f686dc217b182b1fe88c7defdc5cd77807fc691ce05a160638669d7322051eee05560377fc7874712a1c7fb891b421aa6c0d42dbf3cd912d7a18f183783fb32e938cbaa0155603c7f89a47dfbb363dd4e64da56b4585033c9abd8a425d24b94630469c44bee7189c25560787f11a30d68d5ffd3a101d3683e9a6997d49d9351e95dc004c6a4e652b897626df75560b47f2f780f5a40ea4901ca784926540b83b7459f13a98fc8f78e5634eb2a01df3af55561015e7f9d0b70a39d4b3569f175af8ea51ae318eac80460c467ee4a16ee63ec5720706e556102e47fd558ed0e54509c62efb2aedb46e6ad1b04c7bdca351e3613e136c946b91686d85561049c7f4ebb69666752feecd656ebf5f8cd3c2f1c70bb06a0c3d3744be479e4a580c233556109c47fa486383ba35136cdb74cd2aa7ac94004c5d7a5da0cbc794ef0a3909609a2b4a15560096000526130d47fb0fb8c799ed0a9ebd24dd2177f752eb5b4872b0e0f3da30ee877615a016e915d55565b600061279d601b54601c54612ae490919063ffffffff16565b601c546121c790612710614ed1565b6000546001600160a01b031633146127d65760405162461bcd60e51b8152600401610f2790614dc2565b600a8110156128395760405162461bcd60e51b815260206004820152602960248201527f43616e277420646563657265617365206d617877616c6c6574206d6f726520746044820152683430b7103a3430ba1760b91b6064820152608401610f27565b6127108160125461284a9190614ed1565b6128549190614eaf565b601e5550565b6000546001600160a01b031633146128845760405162461bcd60e51b8152600401610f2790614dc2565b611689600a826130e2565b6000546001600160a01b031633146128b95760405162461bcd60e51b8152600401610f2790614dc2565b6001600160a01b03811661291e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f27565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b031633146129a45760405162461bcd60e51b8152600401610f2790614dc2565b506002546001600160a01b031690565b6000546001600160a01b031633146129de5760405162461bcd60e51b8152600401610f2790614dc2565b603155565b6000546001600160a01b03163314612a0d5760405162461bcd60e51b8152600401610f2790614dc2565b61014d8111612a6a5760405162461bcd60e51b8152602060048201526024808201527f4669626f6e616363692063616e6e6f74206265206c6f776572207468616e20746044820152633434b99760e11b6064820152608401610f27565b610384811115612aca5760405162461bcd60e51b815260206004820152602560248201527f4669626f6e616363692063616e6e6f7420626520686967686572207468616e206044820152643a3434b99760d91b6064820152608401610f27565b602855565b60006112ed836001600160a01b03841661325a565b600080612af18385614e97565b9050838110156112ed5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f27565b6001600160a01b038316612ba55760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f27565b6001600160a01b038216612c065760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f27565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612ccb5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f27565b6001600160a01b038216612d2d5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f27565b6002546001600160a01b0383811691161415612d9c5760405162461bcd60e51b815260206004820152602860248201527f4465762077616c6c657420616464726573732063616e6e6f74207265636569766044820152676520746f6b656e7360c01b6064820152608401610f27565b6002546001600160a01b0384811691161415612e085760405162461bcd60e51b815260206004820152602560248201527f4465762077616c6c657420616464726573732063616e6e6f742073656e6420746044820152646f6b656e7360d81b6064820152608401610f27565b60008111612e6a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f27565b6000546001600160a01b03848116911614801590612e9657506000546001600160a01b03838116911614155b15612efe57601f54811115612efe5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610f27565b6000612f0930611de2565b9050601f548110612f195750601f545b60205481108015908190612f355750602a54610100900460ff16155b8015612f495750612f47600c866130c0565b155b8015612f575750602a5460ff165b15612f6757612f676020546132a9565b6001612f74600a876130c0565b80612f855750612f85600a866130c0565b15612f8e575060005b612f9a86868684613396565b505050505050565b60008184841115612fc65760405162461bcd60e51b8152600401610f279190614d21565b506000612fd38486614ef0565b95945050505050565b600082612feb57506000610fcb565b6000612ff78385614ed1565b9050826130048583614eaf565b146112ed5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f27565b60006112ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c5c565b60008060006130aa613c8a565b90925090506130b9828261305b565b9250505090565b6001600160a01b038116600090815260018301602052604081205415156112ed565b60006112ed836001600160a01b038416613d9d565b600080600080600061311a61271061126460165489612fdc90919063ffffffff16565b9050600061314561271061126461313e601854601754612ae490919063ffffffff16565b8a90612fdc565b905060006131646127106112646019548b612fdc90919063ffffffff16565b90506000613172898561320e565b905061317e818461320e565b905061318a818361320e565b9993985091965094509092505050565b60008080806131a98986612fdc565b905060006131b78987612fdc565b905060006131c58988612fdc565b905060006131d38989612fdc565b905060006131e1858561320e565b90506131ed818461320e565b90506131f9818361320e565b949d949c50929a509298505050505050505050565b60006112ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fa2565b6000610fcb825490565b60008181526001830160205260408120546132a157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fcb565b506000610fcb565b602a805461ff00191661010017905560006132d2614e206112646132cb61219f565b8590612fdc565b905060006132e0838361320e565b905060006132fa826112646132f3612784565b8790612fdc565b90504761330683613e8a565b6000613312478361320e565b905060006133266127106112648487612fdc565b90506000613334838361320e565b90506133408782614010565b60408051878152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602a805461ff0019169055505050505050565b6032546301000000900460ff1661346557602b546001600160a01b038481169116148015906133d357506027546001600160a01b03848116911614155b80156133ed5750602d546001600160a01b03848116911614155b1561346557601e54826133ff85611de2565b6134099190614e97565b11156134655760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61782060448201526439b4bd329760d91b6064820152608401610f27565b603254610100900460ff161561351957613480600e856130c0565b156134c75760405162461bcd60e51b815260206004820152601760248201527620b2323932b9b99034b990313630b1b5b634b9ba32b21760491b6044820152606401610f27565b6134d2600e846130c0565b156135195760405162461bcd60e51b815260206004820152601760248201527620b2323932b9b99034b990313630b1b5b634b9ba32b21760491b6044820152606401610f27565b60325460ff16156135d25761352f6010856130c0565b61357b5760405162461bcd60e51b815260206004820152601b60248201527f41646472657373206973206e6f742077686974656c69737465642e00000000006044820152606401610f27565b6135866010846130c0565b6135d25760405162461bcd60e51b815260206004820152601b60248201527f41646472657373206973206e6f742077686974656c69737465642e00000000006044820152606401610f27565b6032546301000000900460ff161561365757602b546001600160a01b0384811691161415613657576000546001600160a01b038581169116146136575760405162461bcd60e51b815260206004820152601760248201527f4f6e6c79206f776e65722063616e20616464206c69712e0000000000000000006044820152606401610f27565b602b546001600160a01b0384811691161480156136765750602f5460ff165b156139615760408051600280825260608201835260009260208301908036833701905050905030816000815181106136b0576136b0614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561371e57600080fd5b505afa158015613732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137569190614a29565b8160018151811061376957613769614f4e565b6001600160a01b039283166020918202929092010152602a5460405163d06ca61f60e01b8152600092620100009092049091169063d06ca61f906137b39087908690600401614e3a565b60006040518083038186803b1580156137cb57600080fd5b505afa1580156137df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138079190810190614b21565b60018151811061381957613819614f4e565b60200260200101519050600061382f8286612340565b905060285461384f6024546112646103e885612fdc90919063ffffffff16565b10156138cd5760405162461bcd60e51b815260206004820152604160248201527f5472616e73616374696f6e2077696c6c2064726f70207468652070726963652060448201527f62656c6f772074686520476f6c64656e526174696f202c2072657665727465646064820152601760f91b608482015260a401610f27565b60285460295410156139405760405162461bcd60e51b815260206004820152603660248201527f49646b20686f7720796f7520706173736564207468617420726571756972656d60448201527532b73a10313aba1034ba1039ba37b839903432b9329760511b6064820152608401610f27565b61394a8286614101565b5061395487614242565b61395c6143aa565b505050505b602b546001600160a01b0385811691161480156139805750602f5460ff165b15613b3b5760408051600280825260608201835260009260208301908036833701905050905030816000815181106139ba576139ba614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a2857600080fd5b505afa158015613a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a609190614a29565b81600181518110613a7357613a73614f4e565b6001600160a01b039283166020918202929092010152602a5460405163d06ca61f60e01b8152600092620100009092049091169063d06ca61f90613abd9087908690600401614e3a565b60006040518083038186803b158015613ad557600080fd5b505afa158015613ae9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613b119190810190614b21565b600181518110613b2357613b23614f4e565b60200260200101519050613b37818561443e565b5050505b602b546001600160a01b03858116911614801590613b675750602b546001600160a01b03848116911614155b15613b7557613b7584614242565b801580613b8b57506032546301000000900460ff165b15613ba55760006016819055601781905560188190556019555b6000613bb26008866130c0565b90506000613bc16008866130c0565b9050818015613bce575080155b15613be357613bde86868661451b565b613c3f565b81158015613bee5750805b15613bfe57613bde868686614672565b81158015613c0a575080155b15613c1a57613bde868686614745565b818015613c245750805b15613c3457613bde8686866147b3565b613c3f868686614745565b612f9a601a54601655601b54601755601c54601855601d54601955565b60008183613c7d5760405162461bcd60e51b8152600401610f279190614d21565b506000612fd38486614eaf565b6013546012546000918291825b613ca16008613250565b811015613d6d576000613cb5600883614850565b6001600160a01b038116600090815260036020526040902054909150841080613cf557506001600160a01b03811660009081526004602052604090205483105b15613d0c5760135460125495509550505050509091565b6001600160a01b038116600090815260036020526040902054613d3090859061320e565b6001600160a01b038216600090815260046020526040902054909450613d5790849061320e565b9250508080613d6590614f07565b915050613c97565b50601254601354613d7d9161305b565b821015613d94576013546012549350935050509091565b90939092509050565b60008181526001830160205260408120548015613e80576000613dc1600183614ef0565b8554909150600090613dd590600190614ef0565b90506000866000018281548110613dee57613dee614f4e565b9060005260206000200154905080876000018481548110613e1157613e11614f4e565b600091825260208083209091019290925582815260018901909152604090208490558654879080613e4457613e44614f38565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610fcb565b6000915050610fcb565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ebf57613ebf614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f2d57600080fd5b505afa158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190614a29565b81600181518110613f7857613f78614f4e565b6001600160a01b039283166020918202929092010152602a54613fa49130916201000090041684612b43565b602a5460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790613fe2908590600090869030904290600401614e5b565b600060405180830381600087803b158015613ffc57600080fd5b505af1158015612f9a573d6000803e3d6000fd5b602a5461402e9030906201000090046001600160a01b031684612b43565b602a546001600160a01b03620100009091041663f305d71982308560008061405e6001546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156140c157600080fd5b505af11580156140d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140fa9190614caf565b5050505050565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561415857600080fd5b505afa15801561416c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141909190614c01565b63ffffffff1692506001600160701b031692506001600160701b03169250818311156141c1578294508193506141c8565b8194508293505b6141d28588612ae4565b94506141de848961320e565b9350846141f357600195505050505050610fcb565b600061420e8661126460265488612fdc90919063ffffffff16565b90506024548111156142205760248190555b60245461423390611264836103e8612fdc565b60295598975050505050505050565b6001600160a01b0381166000908152600660209081526040808320546007909252822054602f5442939062010000900460ff161561434157602b546001600160a01b0386811691161461434157818411156143415760006142a3858461320e565b6001600160a01b0387166000908152600760209081526040808320899055878352603090915290205492509050811580156142de5750600384115b156142e95760315491505b602e548110614310576001600160a01b038616600090815260066020526040812081905591505b602e5481101561433f57614325846001614e97565b6001600160a01b0387166000908152600660205260409020555b505b80601760008282546143539190614e97565b92505081905550806019600082825461436c9190614e97565b9250508190555080601660008282546143859190614e97565b92505081905550806018600082825461439e9190614e97565b90915550505050505050565b602d546000908190600160a01b900460ff16156144395760235460295411156144395760019050602254601760008282546143e59190614e97565b9091555050602254601980546000906143ff908490614e97565b909155505060225460168054600090614419908490614e97565b909155505060225460188054600090614433908490614e97565b90915550505b919050565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561449557600080fd5b505afa1580156144a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cd9190614c01565b63ffffffff1692506001600160701b031692506001600160701b03169250818311156144fe57829450819350614505565b8194508293505b61450f858861320e565b94506141de8489612ae4565b60008060008061452a856130f7565b9350935093509350600061453c61309d565b90506000806000614550898888888861319a565b9194509250905060006145638686612fdc565b6001600160a01b038d16600090815260046020526040902054909150614589908b61320e565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546145b8908561320e565b6001600160a01b03808e1660009081526003602052604080822093909355908d16815220546145e79084612ae4565b6001600160a01b038c1660009081526003602052604090205561460b30888761485c565b61461782828a89614907565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b60405161465c91815260200190565b60405180910390a3505050505050505050505050565b600080600080614681856130f7565b9350935093509350600061469361309d565b905060008060006146a7898888888861319a565b9194509250905060006146ba8686612fdc565b6001600160a01b038d166000908152600360205260409020549091506146e0908561320e565b6001600160a01b03808e16600090815260036020908152604080832094909455918e16815260049091522054614716908a612ae4565b6001600160a01b038c166000908152600460209081526040808320939093556003905220546145e79084612ae4565b600080600080614754856130f7565b9350935093509350600061476661309d565b9050600080600061477a898888888861319a565b91945092509050600061478d8686612fdc565b6001600160a01b038d166000908152600360205260409020549091506145b8908561320e565b6000806000806147c2856130f7565b935093509350935060006147d461309d565b905060008060006147e8898888888861319a565b9194509250905060006147fb8686612fdc565b6001600160a01b038d16600090815260046020526040902054909150614821908b61320e565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546146e0908561320e565b60006112ed838361495f565b6000821161486957505050565b60006148758383612fdc565b6001600160a01b03851660009081526003602052604090205490915061489b9082612ae4565b6001600160a01b0385166000908152600360205260409020556148bf6008856130c0565b15614901576001600160a01b0384166000908152600460205260409020546148e79084612ae4565b6001600160a01b0385166000908152600460205260409020555b50505050565b614926836149208660135461320e90919063ffffffff16565b9061320e565b6013556014546149369083612ae4565b6014556015546149469082612ae4565b601555601254614956908261320e565b60125550505050565b815460009082106149bd5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610f27565b8260000182815481106149d2576149d2614f4e565b9060005260206000200154905092915050565b8035801515811461443957600080fd5b80516001600160701b038116811461443957600080fd5b600060208284031215614a1e57600080fd5b81356112ed81614f7a565b600060208284031215614a3b57600080fd5b81516112ed81614f7a565b60008060408385031215614a5957600080fd5b8235614a6481614f7a565b91506020830135614a7481614f7a565b809150509250929050565b600080600060608486031215614a9457600080fd5b8335614a9f81614f7a565b92506020840135614aaf81614f7a565b929592945050506040919091013590565b60008060408385031215614ad357600080fd5b8235614ade81614f7a565b9150614aec602084016149e5565b90509250929050565b60008060408385031215614b0857600080fd5b8235614b1381614f7a565b946020939093013593505050565b60006020808385031215614b3457600080fd5b825167ffffffffffffffff80821115614b4c57600080fd5b818501915085601f830112614b6057600080fd5b815181811115614b7257614b72614f64565b8060051b604051601f19603f83011681018181108582111715614b9757614b97614f64565b604052828152858101935084860182860187018a1015614bb657600080fd5b600095505b83861015614bd9578051855260019590950194938601938601614bbb565b5098975050505050505050565b600060208284031215614bf857600080fd5b6112ed826149e5565b600080600060608486031215614c1657600080fd5b614c1f846149f5565b9250614c2d602085016149f5565b9150604084015163ffffffff81168114614c4657600080fd5b809150509250925092565b600060208284031215614c6357600080fd5b5035919050565b60008060408385031215614c7d57600080fd5b82359150614aec602084016149e5565b60008060408385031215614ca057600080fd5b50508035926020909101359150565b600080600060608486031215614cc457600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015614d165781516001600160a01b031687529582019590820190600101614cf1565b509495945050505050565b600060208083528351808285015260005b81811015614d4e57858101830151858201604001528201614d32565b81811115614d60576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252602c908201527f546f74616c20666565732063616e206e6f74206578636565642074686520646560408201526b18db185c9959081b1a5b5a5d60a21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526023908201527f43616c6c6572206973206e6f74207468652064657657616c6c6574206164647260408201526265737360e81b606082015260800190565b828152604060208201526000614e536040830184614cdd565b949350505050565b85815284602082015260a060408201526000614e7a60a0830186614cdd565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115614eaa57614eaa614f22565b500190565b600082614ecc57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614eeb57614eeb614f22565b500290565b600082821015614f0257614f02614f22565b500390565b6000600019821415614f1b57614f1b614f22565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461181857600080fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207d52faad9126e7edca84c4398699b70936f3c9404abbb4b780e9eee212c3cb9f64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007f8751b6567871b703090363284c6deb5e8fbd3d
-----Decoded View---------------
Arg [0] : cOwner (address): 0x7F8751b6567871b703090363284c6DeB5e8Fbd3D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007f8751b6567871b703090363284c6deb5e8fbd3d
Deployed Bytecode Sourcemap
4917:42415:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35582:111;;;;;;;;;;-1:-1:-1;35582:111:0;;;;;:::i;:::-;;:::i;:::-;;21616:290;;;;;;;;;;-1:-1:-1;21616:290:0;;;;;:::i;:::-;;:::i;10201:83::-;;;;;;;;;;-1:-1:-1;10271:5:0;;;;;;;;;;;;-1:-1:-1;;;10271:5:0;;;;10201:83;;;;;;;:::i;:::-;;;;;;;;15856:193;;;;;;;;;;-1:-1:-1;15856:193:0;;;;;:::i;:::-;;:::i;:::-;;;7072:14:2;;7065:22;7047:41;;7035:2;7020:18;15856:193:0;6907:187:2;6239:35:0;;;;;;;;;;;;;;;;;;;25242:25:2;;;25230:2;25215:18;6239:35:0;25096:177:2;35701:111:0;;;;;;;;;;-1:-1:-1;35701:111:0;;;;;:::i;:::-;;:::i;22188:298:1:-;;;;;;;;;;-1:-1:-1;22188:298:1;;;;;:::i;:::-;;:::i;20589:87:0:-;;;;;;;;;;-1:-1:-1;20658:10:0;;20589:87;;10478:95;;;;;;;;;;-1:-1:-1;10558:7:0;;10478:95;;13208:126;;;;;;;;;;-1:-1:-1;13294:8:0;;13303:14;;13208:126;;;26376:25:2;;;26432:2;26417:18;;26410:34;;;;26349:18;13208:126:0;26202:248:2;16436:446:0;;;;;;;;;;-1:-1:-1;16436:446:0;;;;;:::i;:::-;;:::i;23401:511::-;;;;;;;;;;-1:-1:-1;23401:511:0;;;;;:::i;:::-;;:::i;19431:324::-;;;;;;;;;;-1:-1:-1;19431:324:0;;;;;:::i;:::-;;:::i;30571:119::-;;;;;;;;;;;;;:::i;10387:83::-;;;;;;;;;;-1:-1:-1;10387:83:0;;6099:2;26921:36:2;;26909:2;26894:18;10387:83:0;26779:184:2;20294:287:0;;;;;;;;;;-1:-1:-1;20294:287:0;;;;;:::i;:::-;;:::i;22236:417::-;;;;;;;;;;-1:-1:-1;22236:417:0;;;;;:::i;:::-;;:::i;6198:34::-;;;;;;;;;;;;;;;;16890:300;;;;;;;;;;-1:-1:-1;16890:300:0;;;;;:::i;:::-;;:::i;31226:108::-;;;;;;;;;;-1:-1:-1;31226:108:0;;;;;:::i;:::-;;:::i;6285:26::-;;;;;;;;;;;;;;;;17625:703;;;;;;;;;;-1:-1:-1;17625:703:0;;;;;:::i;:::-;;:::i;20684:88::-;;;;;;;;;;-1:-1:-1;20753:11:0;;20684:88;;24385:262;;;;;;;;;;-1:-1:-1;24385:262:0;;;;;:::i;:::-;;:::i;35467:107::-;;;;;;;;;;-1:-1:-1;35467:107:0;;;;;:::i;:::-;;:::i;21383:108::-;;;;;;;;;;-1:-1:-1;21383:108:0;;;;;:::i;:::-;;:::i;18336:1087::-;;;;;;;;;;-1:-1:-1;18336:1087:0;;;;;:::i;:::-;;:::i;30696:142::-;;;;;;;;;;-1:-1:-1;30696:142:0;;;;;:::i;:::-;;:::i;14808:287::-;;;;;;;;;;-1:-1:-1;14808:287:0;;;;;:::i;:::-;;:::i;35350:107::-;;;;;;;;;;-1:-1:-1;35350:107:0;;;;;:::i;:::-;;:::i;22494:314:1:-;;;;;;;;;;-1:-1:-1;22494:314:1;;;;;:::i;:::-;;:::i;6151:40:0:-;;;;;;;;;;;;;;;;26786:267;;;;;;;;;;;;;:::i;30239:98::-;;;;;;;;;;-1:-1:-1;30239:98:0;;;;;:::i;:::-;;:::i;19763:523::-;;;;;;;;;;-1:-1:-1;19763:523:0;;;;;:::i;:::-;;:::i;24097:133::-;;;;;;;;;;-1:-1:-1;24097:133:0;;;;;:::i;:::-;;:::i;6110:34::-;;;;;;;;;;;;;;;;8151:42;;;;;;;;;;-1:-1:-1;8151:42:0;;;;;;;-1:-1:-1;;;;;8151:42:0;;;;;;-1:-1:-1;;;;;6027:32:2;;;6009:51;;5997:2;5982:18;8151:42:0;5863:203:2;15103:342:0;;;;;;;;;;-1:-1:-1;15103:342:0;;;;;:::i;:::-;;:::i;32498:725::-;;;;;;;;;;;;;:::i;:::-;;;;26657:25:2;;;26713:2;26698:18;;26691:34;;;;26741:18;;;26734:34;26645:2;26630:18;32498:725:0;26455:319:2;6318:32:0;;;;;;;;;;;;;;;;10581:217;;;;;;;;;;-1:-1:-1;10581:217:0;;;;;:::i;:::-;;:::i;23159:148:1:-;;;;;;;;;;;;;:::i;35856:109:0:-;;;;;;;;;;;;;:::i;6674:48::-;;;;;;;;;;;;;;;;36004:145;;;;;;;;;;-1:-1:-1;36004:145:0;;;;;:::i;:::-;;:::i;31913:129::-;;;;;;;;;;-1:-1:-1;31913:129:0;;;;;:::i;:::-;;:::i;24238:139::-;;;;;;;;;;-1:-1:-1;24238:139:0;;;;;:::i;:::-;;:::i;21382:79:1:-;;;;;;;;;;-1:-1:-1;21420:7:1;21447:6;-1:-1:-1;;;;;21447:6:1;21382:79;;30923:144:0;;;;;;;;;;-1:-1:-1;30923:144:0;;;;;:::i;:::-;;:::i;21914:314::-;;;;;;;;;;-1:-1:-1;21914:314:0;;;;;:::i;:::-;;:::i;6430:51::-;;;;;;;;;;;;;;;;10292:87;;;;;;;;;;-1:-1:-1;10364:7:0;;;;;;;;;;;;-1:-1:-1;;;10364:7:0;;;;10292:87;;8200:29;;;;;;;;;;-1:-1:-1;8200:29:0;;;;-1:-1:-1;;;;;8200:29:0;;;7288:42;;;;;;;;;;;;;;;;8236:43;;;;;;;;;;-1:-1:-1;8236:43:0;;;;-1:-1:-1;;;;;8236:43:0;;;30345:95;;;;;;;;;;-1:-1:-1;30345:95:0;;;;;:::i;:::-;;:::i;29634:190::-;;;;;;;;;;;;;:::i;17198:400::-;;;;;;;;;;-1:-1:-1;17198:400:0;;;;;:::i;:::-;;:::i;15457:199::-;;;;;;;;;;-1:-1:-1;15457:199:0;;;;;:::i;:::-;;:::i;6357:26::-;;;;;;;;;;;;;;;;29832:168;;;;;;;;;;;;;:::i;6729:62::-;;;;;;;;;;;;;;;;21469:99:1;;;;;;;;;;-1:-1:-1;21544:16:1;;-1:-1:-1;;;;;21544:16:1;21469:99;;21101:145:0;;;;;;;;;;;;;:::i;21254:121::-;;;;;;;;;;;;;:::i;24655:178::-;;;;;;;;;;-1:-1:-1;24655:178:0;;;;;:::i;:::-;;:::i;6390:27::-;;;;;;;;;;;;;;;;8290:73;;;;;;;;;;-1:-1:-1;8290:73:0;;;;-1:-1:-1;;;;;8290:73:0;;;23920:169;;;;;;;;;;-1:-1:-1;23920:169:0;;;;;:::i;:::-;;:::i;8064:41::-;;;;;;;;;;-1:-1:-1;8064:41:0;;;;;;;;22661:294;;;;;;;;;;-1:-1:-1;22661:294:0;;;;;:::i;:::-;;:::i;13347:919::-;;;;;;;;;;-1:-1:-1;13347:919:0;;;;;:::i;:::-;;:::i;22963:430::-;;;;;;;;;;-1:-1:-1;22963:430:0;;;;;:::i;:::-;;:::i;24841:91::-;;;;;;;;;;-1:-1:-1;24841:91:0;;;;;:::i;:::-;;:::i;32050:440::-;;;;;;;;;;;;;:::i;15664:184::-;;;;;;;;;;-1:-1:-1;15664:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;15813:18:0;;;15781:7;15813:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15664:184;20780:140;;;;;;;;;;;;;:::i;14301:212::-;;;;;;;;;;-1:-1:-1;14301:212:0;;;;;:::i;:::-;;:::i;21499:109::-;;;;;;;;;;-1:-1:-1;21499:109:0;;;;;:::i;:::-;;:::i;23315:281:1:-;;;;;;;;;;-1:-1:-1;23315:281:1;;;;;:::i;:::-;;:::i;7083:38:0:-;;;;;;;;;;;;;;;;21685:114:1;;;;;;;;;;;;;:::i;7881:40:0:-;;;;;;;;;;;;;;;;33274:96;;;;;;;;;;-1:-1:-1;33274:96:0;;;;;:::i;:::-;;:::i;14525:277::-;;;;;;;;;;-1:-1:-1;14525:277:0;;;;;:::i;:::-;;:::i;35582:111::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;;;;;;;;;35657:16:0::1;:28:::0;;-1:-1:-1;;35657:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35582:111::o;21616:290::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;6539:4:0::1;21710:52;21753:8;;21710:38;21740:7;;21710:25;21721:13;;21710:6;:10;;:25;;;;:::i;:::-;:29:::0;::::1;:38::i;:52::-;:89;;21688:183;;;;-1:-1:-1::0;;;21688:183:0::1;;;;;;;:::i;:::-;21882:7;:16:::0;21616:290::o;15856:193::-;15958:4;15980:39;20028:10:1;16003:7:0;16012:6;15980:8;:39::i;:::-;-1:-1:-1;16037:4:0;15856:193;;;;;:::o;35701:111::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;35776:16:0::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;35776:28:0;;::::1;::::0;;;::::1;::::0;;35701:111::o;22188:298:1:-;21932:6;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;22341:10:::1;::::0;-1:-1:-1;;;;;22341:10:1::1;:24:::0;22319:119:::1;;;::::0;-1:-1:-1;;;22319:119:1;;20255:2:2;22319:119:1::1;::::0;::::1;20237:21:2::0;20294:2;20274:18;;;20267:30;20333:34;20313:18;;;20306:62;-1:-1:-1;;;20384:18:2;;;20377:43;20437:19;;22319:119:1::1;20053:409:2::0;22319:119:1::1;22449:10;:29:::0;;-1:-1:-1;;;;;;22449:29:1::1;-1:-1:-1::0;;;;;22449:29:1;;;::::1;::::0;;;::::1;::::0;;22188:298::o;16436:446:0:-;16568:4;16585:36;16595:6;16603:9;16614:6;16585:9;:36::i;:::-;16632:220;16655:6;20028:10:1;16703:138:0;16759:6;16703:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16703:19:0;;;;;;:11;:19;;;;;;;;20028:10:1;16703:33:0;;;;;;;;;;:37;:138::i;:::-;16632:8;:220::i;:::-;-1:-1:-1;16870:4:0;16436:446;;;;;:::o;23401:511::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;23560:5:0::1;23537:19;:28;;23515:141;;;::::0;-1:-1:-1;;;23515:141:0;;18709:2:2;23515:141:0::1;::::0;::::1;18691:21:2::0;18748:2;18728:18;;;18721:30;18787:34;18767:18;;;18760:62;18858:33;18838:18;;;18831:61;18909:19;;23515:141:0::1;18507:427:2::0;23515:141:0::1;23711:1;23689:19;:23;23667:126;;;::::0;-1:-1:-1;;;23667:126:0;;16630:2:2;23667:126:0::1;::::0;::::1;16612:21:2::0;16669:2;16649:18;;;16642:30;16708:34;16688:18;;;16681:62;-1:-1:-1;;;16759:18:2;;;16752:51;16820:19;;23667:126:0::1;16428:417:2::0;23667:126:0::1;23837:67;23888:5;23837:32;23849:19;23837:7;;:11;;:32;;;;:::i;:::-;:36:::0;::::1;:67::i;:::-;23804:30;:100:::0;-1:-1:-1;23401:511:0:o;19431:324::-;19525:7;19583;;19572;:18;;19550:110;;;;-1:-1:-1;;;19550:110:0;;10406:2:2;19550:110:0;;;10388:21:2;10445:2;10425:18;;;10418:30;10484:34;10464:18;;;10457:62;-1:-1:-1;;;10535:18:2;;;10528:40;10585:19;;19550:110:0;10204:406:2;19550:110:0;19673:19;19695:10;:8;:10::i;:::-;19673:32;-1:-1:-1;19723:24:0;:7;19673:32;19723:11;:24::i;:::-;19716:31;19431:324;-1:-1:-1;;;19431:324:0:o;30571:119::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;30626:21:0::1;:28:::0;;-1:-1:-1;;30665:17:0;30650:4:::1;30665:17:::0;;;30571:119::o;20294:287::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;20388:39:0::1;:21;20419:7:::0;20388:30:::1;:39::i;:::-;20366:126;;;::::0;-1:-1:-1;;;20366:126:0;;12747:2:2;20366:126:0::1;::::0;::::1;12729:21:2::0;12786:2;12766:18;;;12759:30;12825:34;12805:18;;;12798:62;-1:-1:-1;;;12876:18:2;;;12869:35;12921:19;;20366:126:0::1;12545:401:2::0;20366:126:0::1;20505:37;:21;20534:7:::0;20505:28:::1;:37::i;:::-;-1:-1:-1::0;;;;;;20553:16:0::1;20572:1;20553:16:::0;;;:7:::1;:16;::::0;;;;:20;20294:287::o;22236:417::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;6598:3:0::1;22330:6;:24;;22308:116;;;::::0;-1:-1:-1;;;22308:116:0;;12336:2:2;22308:116:0::1;::::0;::::1;12318:21:2::0;12375:2;12355:18;;;12348:30;12414:34;12394:18;;;12387:62;-1:-1:-1;;;12465:18:2;;;12458:40;12515:19;;22308:116:0::1;12134:406:2::0;22308:116:0::1;6539:4;22457:52;22500:8;;22457:38;22488:6;22457:26;22469:13;;22457:7;;:11;;:26;;;;:::i;:52::-;:89;;22435:183;;;;-1:-1:-1::0;;;22435:183:0::1;;;;;;;:::i;:::-;22629:7;:16:::0;22236:417::o;16890:300::-;20028:10:1;17005:4:0;17099:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17099:34:0;;;;;;;;;;17005:4;;17027:133;;17077:7;;17099:50;;17138:10;17099:38;:50::i;31226:108::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;31297:22:0::1;:29:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31297:29:0;;::::1;::::0;;;::::1;::::0;;31226:108::o;17625:703::-;20028:10:1;17740:38:0;:21;20028:10:1;17740:30:0;:38::i;:::-;17739:39;17717:133;;;;-1:-1:-1;;;17717:133:0;;23660:2:2;17717:133:0;;;23642:21:2;23699:2;23679:18;;;23672:30;23738:34;23718:18;;;23711:62;-1:-1:-1;;;23789:18:2;;;23782:42;23841:19;;17717:133:0;23458:408:2;17717:133:0;17866:12;17880:18;17900:13;17917:44;17943:7;17917:11;:44::i;:::-;17863:98;;;;;;;17972:19;17994:10;:8;:10::i;:::-;17972:32;;18016:15;18039:134;18065:7;18087:4;18106:10;18131:5;18151:11;18039;:134::i;:::-;-1:-1:-1;;;;;;;18204:15:0;;;;;;:7;:15;;;;;;18015:158;;-1:-1:-1;18204:28:0;;18015:158;18204:19;:28::i;:::-;-1:-1:-1;;;;;18186:15:0;;;;;;:7;:15;;;;;:46;18253:7;;:20;;18265:7;18253:11;:20::i;:::-;18243:7;:30;18297:10;;:23;;18312:7;18297:14;:23::i;:::-;18284:10;:36;-1:-1:-1;;;;;;;17625:703:0:o;24385:262::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;24502:1:0::1;24498:142;;;24520:36;:29;24554:1:::0;24520:33:::1;:36::i;:::-;;24385:262:::0;;:::o;24498:142::-:1;24589:39;:29;24626:1:::0;24589:36:::1;:39::i;24498:142::-;24385:262:::0;;:::o;35467:107::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;35541:25:0::1;:14;35560:5:::0;35541:18:::1;:25::i;21383:108::-:0;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;21452:31:0::1;:18;21475:7:::0;21452:22:::1;:31::i;18336:1087::-:0;18454:7;18498;;18487;:18;;18479:62;;;;-1:-1:-1;;;18479:62:0;;13911:2:2;18479:62:0;;;13893:21:2;13950:2;13930:18;;;13923:30;13989:33;13969:18;;;13962:61;14040:18;;18479:62:0;13709:355:2;18479:62:0;18559:17;18554:862;;18596:12;18610:18;18630:13;18647:52;18677:7;18647:11;:52::i;:::-;18593:106;;;;;;;18714:19;18736:10;:8;:10::i;:::-;18714:32;;18762:15;18785:158;18815:7;18841:4;18864:10;18893:5;18917:11;18785;:158::i;:::-;-1:-1:-1;18761:182:0;;-1:-1:-1;18960:14:0;;-1:-1:-1;;;;;;18960:14:0;18554:862;19010:12;19024:18;19044:13;19061:52;19091:7;19061:11;:52::i;:::-;19007:106;;;;;;;19128:19;19150:10;:8;:10::i;:::-;19128:32;;19178:23;19207:158;19237:7;19263:4;19286:10;19315:5;19339:11;19207;:158::i;:::-;-1:-1:-1;19175:190:0;-1:-1:-1;19382:22:0;;-1:-1:-1;;;;;;19382:22:0;30696:142;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;30766:9:0::1;::::0;::::1;::::0;::::1;;;30763:68;;;30791:21;:28:::0;;-1:-1:-1;;30791:28:0::1;::::0;::::1;;;::::0;;30763:68:::1;30696:142:::0;:::o;14808:287::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;7073:3:0::1;14884;:31;;14876:99;;;::::0;-1:-1:-1;;;14876:99:0;;16205:2:2;14876:99:0::1;::::0;::::1;16187:21:2::0;16244:2;16224:18;;;16217:30;16283:34;16263:18;;;16256:62;16354:26;16334:18;;;16327:54;16398:19;;14876:99:0::1;16003:420:2::0;14876:99:0::1;7011:3;14994;:31;;14986:66;;;::::0;-1:-1:-1;;;14986:66:0;;11224:2:2;14986:66:0::1;::::0;::::1;11206:21:2::0;11263:2;11243:18;;;11236:30;-1:-1:-1;;;11282:18:2;;;11275:52;11344:18;;14986:66:0::1;11022:346:2::0;14986:66:0::1;15064:17;:23:::0;14808:287::o;35350:107::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;35424:25:0::1;:14;35443:5:::0;35424:18:::1;:25::i;22494:314:1:-:0;21932:6;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;22645:16:::1;::::0;-1:-1:-1;;;;;22645:16:1::1;:30:::0;22623:131:::1;;;::::0;-1:-1:-1;;;22623:131:1;;17885:2:2;22623:131:1::1;::::0;::::1;17867:21:2::0;17924:2;17904:18;;;17897:30;17963:34;17943:18;;;17936:62;-1:-1:-1;;;18014:18:2;;;18007:49;18073:19;;22623:131:1::1;17683:415:2::0;22623:131:1::1;22765:16;:35:::0;;-1:-1:-1;;;;;;22765:35:1::1;-1:-1:-1::0;;;;;22765:35:1;;;::::1;::::0;;;::::1;::::0;;22494:314::o;26786:267:0:-;22071:10:1;;-1:-1:-1;;;;;22071:10:1;20028;22071:26;22049:111;;;;-1:-1:-1;;;22049:111:1;;;;;;;:::i;:::-;26863:22:0::1;::::0;:73:::1;::::0;26904:21:::1;26863:26;:73::i;:::-;26838:22;:98:::0;21655:10:1;;26947:43:0::1;::::0;-1:-1:-1;;;;;21655:10:1;;;;26968:21:0::1;26947:43:::0;::::1;;;::::0;::::1;::::0;;;26968:21;21655:10:1;26947:43:0;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27006:39:0::1;::::0;27023:21:::1;25242:25:2::0;;27006:39:0::1;::::0;25230:2:2;25215:18;27006:39:0::1;;;;;;;26786:267::o:0;30239:98::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;30307:15:0::1;:22:::0;;;::::1;;-1:-1:-1::0;;;30307:22:0::1;-1:-1:-1::0;;;;30307:22:0;;::::1;::::0;;;::::1;::::0;;30239:98::o;19763:523::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;19858:39:0::1;:21;19889:7:::0;19858:30:::1;:39::i;:::-;19857:40;19835:127;;;::::0;-1:-1:-1;;;19835:127:0;;15438:2:2;19835:127:0::1;::::0;::::1;15420:21:2::0;15477:2;15457:18;;;15450:30;15516:34;15496:18;;;15489:62;-1:-1:-1;;;15567:18:2;;;15560:35;15612:19;;19835:127:0::1;15236:401:2::0;19835:127:0::1;5430:4;19995:30;:21;:28;:30::i;:::-;:45;19973:139;;;::::0;-1:-1:-1;;;19973:139:0;;24482:2:2;19973:139:0::1;::::0;::::1;24464:21:2::0;24521:2;24501:18;;;24494:30;24560:34;24540:18;;;24533:62;-1:-1:-1;;;24611:18:2;;;24604:42;24663:19;;19973:139:0::1;24280:408:2::0;19973:139:0::1;-1:-1:-1::0;;;;;20129:16:0;::::1;20148:1;20129:16:::0;;;:7:::1;:16;::::0;;;;;:20;20125:109:::1;;-1:-1:-1::0;;;;;20205:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20185:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20166:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20125:109:::1;20244:34;:21;20270:7:::0;20244:25:::1;:34::i;24097:133::-:0;24162:4;24186:36;:18;24214:7;24186:27;:36::i;15103:342::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;7277:3:0::1;15193:10;:31;;15185:97;;;::::0;-1:-1:-1;;;15185:97:0;;17462:2:2;15185:97:0::1;::::0;::::1;17444:21:2::0;17501:2;17481:18;;;17474:30;17540:34;17520:18;;;17513:62;-1:-1:-1;;;17591:18:2;;;17584:52;17653:19;;15185:97:0::1;17260:418:2::0;15185:97:0::1;7222:3;15301:10;:31;;15293:98;;;::::0;-1:-1:-1;;;15293:98:0;;21075:2:2;15293:98:0::1;::::0;::::1;21057:21:2::0;21114:2;21094:18;;;21087:30;21153:34;21133:18;;;21126:62;-1:-1:-1;;;21204:18:2;;;21197:52;21266:19;;15293:98:0::1;20873:418:2::0;15293:98:0::1;15403:21;:34:::0;15103:342::o;32498:725::-;32692:10;32551:12;32681:22;;;:10;:22;;;;;;;;;32747:19;:31;;;;;;32842:39;;;:17;:39;;;;;;;32551:12;;;;32624:15;;32681:22;;32747:31;32551:12;;32895:34;;;32892:110;;;32952:37;:9;32966:22;32952:13;:37::i;:::-;32945:44;;32892:110;33025:20;;:48;;;;;33072:1;33049:20;:24;33025:48;33022:133;;;-1:-1:-1;33119:10:0;;33022:133;33173:20;;33194:15;;-1:-1:-1;33210:4:0;-1:-1:-1;32498:725:0;;-1:-1:-1;;;32498:725:0:o;10581:217::-;10647:7;10671:39;:21;10702:7;10671:30;:39::i;:::-;10667:68;;;-1:-1:-1;;;;;;10719:16:0;;;;;:7;:16;;;;;;;10581:217::o;10667:68::-;-1:-1:-1;;;;;10773:16:0;;;;;;:7;:16;;;;;;10753:37;;:19;:37::i;23159:148:1:-;21932:6;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;23266:1:::1;23250:6:::0;;23229:40:::1;::::0;-1:-1:-1;;;;;23250:6:1;;::::1;::::0;23229:40:::1;::::0;23266:1;;23229:40:::1;23297:1;23280:19:::0;;-1:-1:-1;;;;;;23280:19:1::1;::::0;;23159:148::o;35856:109:0:-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;35911:10:0::1;:17:::0;;-1:-1:-1;;35939:14:0;35911:17;35939:14;;;35856:109::o;36004:145::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;36076:10:0::1;::::0;;;::::1;;;36075:11;36067:50;;;::::0;-1:-1:-1;;;36067:50:0;;14680:2:2;36067:50:0::1;::::0;::::1;14662:21:2::0;14719:2;14699:18;;;14692:30;14758:29;14738:18;;;14731:57;14805:18;;36067:50:0::1;14478:351:2::0;36067:50:0::1;36128:6;:13:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36128:13:0;;::::1;::::0;;;::::1;::::0;;36004:145::o;31913:129::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;31999:28:0::1;::::0;;;:17:::1;:28;::::0;;;;;:34;31913:129::o;24238:139::-;24306:4;24330:39;:21;24361:7;24330:30;:39::i;30923:144::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;31007:9:0::1;::::0;::::1;::::0;::::1;;;31004:56;;;31028:13;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31028:20:0;;::::1;;::::0;;30923:144;:::o;21914:314::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;6539:4:0::1;22020:52;22063:8;;22020:38;22050:7;;22020:25;22032:12;22020:7;;:11;;:25;;;;:::i;:52::-;:89;;21998:183;;;;-1:-1:-1::0;;;21998:183:0::1;;;;;;;:::i;:::-;22192:13;:28:::0;21914:314::o;30345:95::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;30413:12:0::1;:19:::0;30345:95::o;29634:190::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;29716:1:0::1;29698:15;:19:::0;;;29728:21:::1;:25:::0;;;29764:15:::1;:19:::0;;;29794:16:::1;:20:::0;29634:190::o;17198:400::-;17318:4;17340:228;20028:10:1;17390:7:0;17412:145;17469:15;17412:145;;;;;;;;;;;;;;;;;20028:10:1;17412:25:0;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17412:34:0;;;;;;;;;;;;:38;:145::i;15457:199::-;15562:4;15584:42;20028:10:1;15608:9:0;15619:6;15584:9;:42::i;29832:168::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;29905:2:0::1;29895:7;:12:::0;;;29934:3:::1;29918:13;:19:::0;29958:3:::1;29948:7;:13:::0;29972:8:::1;:13:::0;29832:168::o;21101:145::-;21157:7;21211:26;21223:13;;21211:7;;:11;;:26;;;;:::i;:::-;21185:13;;:21;;21201:5;21185:21;:::i;:::-;21184:54;;;;:::i;:::-;21177:61;;21101:145;:::o;21254:121::-;22071:10:1;;21318:7:0;;-1:-1:-1;;;;;22071:10:1;20028;22071:26;22049:111;;;;-1:-1:-1;;;22049:111:1;;;;;;;:::i;:::-;-1:-1:-1;21345:22:0::1;::::0;21254:121;:::o;24655:178::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;24791:16:0::1;:34:::0;;-1:-1:-1;;;;;24791:34:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;24791:34:0;;::::1;::::0;;;::::1;::::0;;24655:178::o;23920:169::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;23996:22:0::1;:32:::0;;-1:-1:-1;;23996:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24044:37:::1;::::0;7047:41:2;;;24044:37:0::1;::::0;7035:2:2;7020:18;24044:37:0::1;;;;;;;23920:169:::0;:::o;22661:294::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;6539:4:0::1;22757:52;22801:7;22757:39;22788:7;;22757:26;22769:13;;22757:7;;:11;;:26;;;;:::i;:52::-;:89;;22735:183;;;;-1:-1:-1::0;;;22735:183:0::1;;;;;;;:::i;:::-;22929:8;:18:::0;22661:294::o;13347:919::-;13448:7;13473:23;13498:12;13588:14;13603;13619:22;13645:21;;;;;;;;;-1:-1:-1;;;;;13645:21:0;-1:-1:-1;;;;;13645:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13587:93;;;;-1:-1:-1;;;;;13587:93:0;;;-1:-1:-1;;;;;13587:93:0;;;13722:6;13713;:15;13710:186;;;13761:6;13743:24;;13789:6;13782:13;;13710:186;;;13850:6;13832:24;;13878:6;13871:13;;13710:186;13938:20;13935:73;;13995:1;13988:8;;;;;;;;;13935:73;14075:17;14095:37;:15;14115:16;14095:19;:37::i;:::-;14075:57;;14143:18;14164:62;14216:9;14165:45;14196:13;;14166:24;14175:14;14166:4;:8;;:24;;;;:::i;:::-;14165:30;;:45::i;14164:62::-;14143:83;13347:919;-1:-1:-1;;;;;;;;;;13347:919:0:o;22963:430::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;23078:5:0::1;23062:12;:21;;23040:131;;;::::0;-1:-1:-1;;;23040:131:0;;21930:2:2;23040:131:0::1;::::0;::::1;21912:21:2::0;21969:2;21949:18;;;21942:30;22008:34;21988:18;;;21981:62;22079:30;22059:18;;;22052:58;22127:19;;23040:131:0::1;21728:424:2::0;23040:131:0::1;6664:3;23204:12;:28;;23182:141;;;::::0;-1:-1:-1;;;23182:141:0;;21498:2:2;23182:141:0::1;::::0;::::1;21480:21:2::0;21537:2;21517:18;;;21510:30;21576:34;21556:18;;;21549:62;21647:33;21627:18;;;21620:61;21698:19;;23182:141:0::1;21296:427:2::0;23182:141:0::1;23349:36;23379:5;23349:25;23361:12;23349:7;;:11;;:25;;;;:::i;:36::-;23334:12;:51:::0;-1:-1:-1;22963:430:0:o;24841:91::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;24906:14:0::1;:18:::0;;-1:-1:-1;;;;;;24906:18:0::1;-1:-1:-1::0;;;;;24906:18:0;;;::::1;::::0;;;::::1;::::0;;24841:91::o;32050:440::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;32122:17:0::1;:20;::::0;32145:2:::1;32122:20:::0;:25;32181:2:::1;32158:20:::0;:25;32217:2:::1;32194:20:::0;:25;32253:3:::1;32230:20:::0;:26;32290:3:::1;32267:20:::0;:26;32327:3:::1;32304:20:::0;:26;32364:3:::1;32341:20:::0;:26;32401:4:::1;32378:20:::0;:27;32439:4:::1;32416:20:::0;:27;32472:1:::1;32122:20;32454::::0;32477:5:::1;32454:20:::0;:28;32050:440::o;20780:140::-;20837:7;20885:26;20897:13;;20885:7;;:11;;:26;;;;:::i;:::-;20865:7;;:15;;20875:5;20865:15;:::i;14301:212::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;14396:2:0::1;14383:9;:15;;14375:70;;;::::0;-1:-1:-1;;;14375:70:0;;8772:2:2;14375:70:0::1;::::0;::::1;8754:21:2::0;8811:2;8791:18;;;8784:30;8850:34;8830:18;;;8823:62;-1:-1:-1;;;8901:18:2;;;8894:39;8950:19;;14375:70:0::1;8570:405:2::0;14375:70:0::1;14497:5;14484:9;14474:7;;:19;;;;:::i;:::-;14473:29;;;;:::i;:::-;14456:14;:46:::0;-1:-1:-1;14301:212:0:o;21499:109::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;21566:34:0::1;:18;21592:7:::0;21566:25:::1;:34::i;23315:281:1:-:0;21932:6;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;23418:22:1;::::1;23396:110;;;::::0;-1:-1:-1;;;23396:110:1;;10817:2:2;23396:110:1::1;::::0;::::1;10799:21:2::0;10856:2;10836:18;;;10829:30;10895:34;10875:18;;;10868:62;-1:-1:-1;;;10946:18:2;;;10939:36;10992:19;;23396:110:1::1;10615:402:2::0;23396:110:1::1;23543:6;::::0;;23522:38:::1;::::0;-1:-1:-1;;;;;23522:38:1;;::::1;::::0;23543:6;::::1;::::0;23522:38:::1;::::0;::::1;23571:6;:17:::0;;-1:-1:-1;;;;;;23571:17:1::1;-1:-1:-1::0;;;;;23571:17:1;;;::::1;::::0;;;::::1;::::0;;23315:281::o;21685:114::-;21746:15;21932:6;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;-1:-1:-1;21781:10:1::1;::::0;-1:-1:-1;;;;;21781:10:1::1;21685:114:::0;:::o;33274:96:0:-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;33343:10:0::1;:19:::0;33274:96::o;14525:277::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;7826:3:0::1;14601:5;:23;14593:71;;;::::0;-1:-1:-1;;;14593:71:0;;11575:2:2;14593:71:0::1;::::0;::::1;11557:21:2::0;11614:2;11594:18;;;11587:30;11653:34;11633:18;;;11626:62;-1:-1:-1;;;11704:18:2;;;11697:34;11748:19;;14593:71:0::1;11373:400:2::0;14593:71:0::1;7996:3;14683:5;:24;;14675:73;;;::::0;-1:-1:-1;;;14675:73:0;;13153:2:2;14675:73:0::1;::::0;::::1;13135:21:2::0;13192:2;13172:18;;;13165:30;13231:34;13211:18;;;13204:62;-1:-1:-1;;;13282:18:2;;;13275:35;13327:19;;14675:73:0::1;12951:401:2::0;14675:73:0::1;14759:18;:26:::0;14525:277::o;13246:175:1:-;13334:4;13363:50;13368:3;-1:-1:-1;;;;;13388:23:1;;13363:4;:50::i;33061:181::-;33119:7;;33151:5;33155:1;33151;:5;:::i;:::-;33139:17;;33180:1;33175;:6;;33167:46;;;;-1:-1:-1;;;33167:46:1;;11980:2:2;33167:46:1;;;11962:21:2;12019:2;11999:18;;;11992:30;12058:29;12038:18;;;12031:57;12105:18;;33167:46:1;11778:351:2;16057:371:0;-1:-1:-1;;;;;16184:19:0;;16176:68;;;;-1:-1:-1;;;16176:68:0;;10001:2:2;16176:68:0;;;9983:21:2;10040:2;10020:18;;;10013:30;10079:34;10059:18;;;10052:62;-1:-1:-1;;;10130:18:2;;;10123:34;10174:19;;16176:68:0;9799:400:2;16176:68:0;-1:-1:-1;;;;;16263:21:0;;16255:68;;;;-1:-1:-1;;;16255:68:0;;24895:2:2;16255:68:0;;;24877:21:2;24934:2;24914:18;;;24907:30;24973:34;24953:18;;;24946:62;-1:-1:-1;;;25024:18:2;;;25017:32;25066:19;;16255:68:0;24693:398:2;16255:68:0;-1:-1:-1;;;;;16336:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16388:32;;25242:25:2;;;16388:32:0;;25215:18:2;16388:32:0;;;;;;;16057:371;;;:::o;24963:1815::-;-1:-1:-1;;;;;25085:18:0;;25077:68;;;;-1:-1:-1;;;25077:68:0;;9182:2:2;25077:68:0;;;9164:21:2;9221:2;9201:18;;;9194:30;9260:34;9240:18;;;9233:62;-1:-1:-1;;;9311:18:2;;;9304:35;9356:19;;25077:68:0;8980:401:2;25077:68:0;-1:-1:-1;;;;;25164:16:0;;25156:64;;;;-1:-1:-1;;;25156:64:0;;18305:2:2;25156:64:0;;;18287:21:2;18344:2;18324:18;;;18317:30;18383:34;18363:18;;;18356:62;-1:-1:-1;;;18434:18:2;;;18427:33;18477:19;;25156:64:0;18103:399:2;25156:64:0;21655:10:1;;-1:-1:-1;;;;;25239:17:0;;;21655:10:1;;25239:17:0;;25231:70;;;;-1:-1:-1;;;25231:70:0;;24073:2:2;25231:70:0;;;24055:21:2;24112:2;24092:18;;;24085:30;24151:34;24131:18;;;24124:62;-1:-1:-1;;;24202:18:2;;;24195:38;24250:19;;25231:70:0;23871:404:2;25231:70:0;21655:10:1;;-1:-1:-1;;;;;25320:19:0;;;21655:10:1;;25320:19:0;;25312:69;;;;-1:-1:-1;;;25312:69:0;;19497:2:2;25312:69:0;;;19479:21:2;19536:2;19516:18;;;19509:30;19575:34;19555:18;;;19548:62;-1:-1:-1;;;19626:18:2;;;19619:35;19671:19;;25312:69:0;19295:401:2;25312:69:0;25409:1;25400:6;:10;25392:64;;;;-1:-1:-1;;;25392:64:0;;17052:2:2;25392:64:0;;;17034:21:2;17091:2;17071:18;;;17064:30;17130:34;17110:18;;;17103:62;-1:-1:-1;;;17181:18:2;;;17174:39;17230:19;;25392:64:0;16850:405:2;25392:64:0;21420:7:1;21447:6;-1:-1:-1;;;;;25473:15:0;;;21447:6:1;;25473:15:0;;;;:32;;-1:-1:-1;21420:7:1;21447:6;-1:-1:-1;;;;;25492:13:0;;;21447:6:1;;25492:13:0;;25473:32;25469:189;;;25558:12;;25548:6;:22;;25522:124;;;;-1:-1:-1;;;25522:124:0;;14271:2:2;25522:124:0;;;14253:21:2;14310:2;14290:18;;;14283:30;14349:34;14329:18;;;14322:62;-1:-1:-1;;;14400:18:2;;;14393:38;14448:19;;25522:124:0;14069:404:2;25522:124:0;25986:28;26017:24;26035:4;26017:9;:24::i;:::-;25986:55;;26082:12;;26058:20;:36;26054:104;;-1:-1:-1;26134:12:0;;26054:104;26236:30;;26199:67;;;;;;;26295:56;;-1:-1:-1;26334:17:0;;;;;;;26333:18;26295:56;:118;;;;-1:-1:-1;26369:44:0;:29;26408:4;26369:38;:44::i;:::-;26368:45;26295:118;:157;;;;-1:-1:-1;26430:22:0;;;;26295:157;26277:260;;;26479:46;26494:30;;26479:14;:46::i;:::-;26564:4;26597:33;:18;26625:4;26597:27;:33::i;:::-;:68;;;-1:-1:-1;26634:31:0;:18;26662:2;26634:27;:31::i;:::-;26579:140;;;-1:-1:-1;26702:5:0;26579:140;26729:41;26744:4;26750:2;26754:6;26762:7;26729:14;:41::i;:::-;25066:1712;;;24963:1815;;;:::o;33394:226:1:-;33514:7;33550:12;33542:6;;;;33534:29;;;;-1:-1:-1;;;33534:29:1;;;;;;;;:::i;:::-;-1:-1:-1;33574:9:1;33586:5;33590:1;33586;:5;:::i;:::-;33574:17;33394:226;-1:-1:-1;;;;;33394:226:1:o;33628:250::-;33686:7;33710:6;33706:47;;-1:-1:-1;33740:1:1;33733:8;;33706:47;33765:9;33777:5;33781:1;33777;:5;:::i;:::-;33765:17;-1:-1:-1;33810:1:1;33801:5;33805:1;33765:17;33801:5;:::i;:::-;:10;33793:56;;;;-1:-1:-1;;;33793:56:1;;15036:2:2;33793:56:1;;;15018:21:2;15075:2;15055:18;;;15048:30;15114:34;15094:18;;;15087:62;-1:-1:-1;;;15165:18:2;;;15158:31;15206:19;;33793:56:1;14834:397:2;33886:132:1;33944:7;33971:39;33975:1;33978;33971:39;;;;;;;;;;;;;;;;;:3;:39::i;46042:164:0:-;46084:7;46105:15;46122;46141:19;:17;:19::i;:::-;46104:56;;-1:-1:-1;46104:56:0;-1:-1:-1;46178:20:0;46104:56;;46178:11;:20::i;:::-;46171:27;;;;46042:164;:::o;13864:199:1:-;-1:-1:-1;;;;;14030:23:1;;13971:4;10428:19;;;:12;;;:19;;;;;;:24;;14000:55;10299:161;13597:181;13688:4;13717:53;13725:3;-1:-1:-1;;;;;13745:23:1;;13717:7;:53::i;44574:726:0:-;44675:7;44697;44719;44741;44776:12;44791:39;44824:5;44791:28;44803:15;;44791:7;:11;;:28;;;;:::i;:39::-;44776:54;;44909:18;44930:66;44990:5;44930:55;44942:42;44968:15;;44942:21;;:25;;:42;;;;:::i;:::-;44930:7;;:11;:55::i;:66::-;44909:87;;45007:13;45023:40;45057:5;45023:29;45035:16;;45023:7;:11;;:29;;;;:::i;:40::-;45007:56;-1:-1:-1;45074:23:0;45100:17;:7;45112:4;45100:11;:17::i;:::-;45074:43;-1:-1:-1;45146:31:0;45074:43;45166:10;45146:19;:31::i;:::-;45128:49;-1:-1:-1;45206:26:0;45128:49;45226:5;45206:19;:26::i;:::-;45188:44;45268:4;;-1:-1:-1;45274:10:0;;-1:-1:-1;45274:10:0;-1:-1:-1;44574:726:0;;-1:-1:-1;;;44574:726:0:o;45308:::-;45531:7;;;;45628:24;:7;45640:11;45628;:24::i;:::-;45610:42;-1:-1:-1;45663:12:0;45678:21;:4;45687:11;45678:8;:21::i;:::-;45663:36;-1:-1:-1;45710:18:0;45731:27;:10;45746:11;45731:14;:27::i;:::-;45710:48;-1:-1:-1;45769:13:0;45785:22;:5;45795:11;45785:9;:22::i;:::-;45769:38;-1:-1:-1;45818:23:0;45844:17;:7;45856:4;45844:11;:17::i;:::-;45818:43;-1:-1:-1;45890:31:0;45818:43;45910:10;45890:19;:31::i;:::-;45872:49;-1:-1:-1;45950:26:0;45872:49;45970:5;45950:19;:26::i;:::-;45995:7;;;;-1:-1:-1;46021:4:0;;-1:-1:-1;45308:726:0;;-1:-1:-1;;;;;;;;;45308:726:0:o;33250:136:1:-;33308:7;33335:43;33339:1;33342;33335:43;;;;;;;;;;;;;;;;;:3;:43::i;14149:117::-;14212:7;14239:19;14247:3;10629:18;;10546:109;8057:414;8120:4;10428:19;;;:12;;;:19;;;;;;8137:327;;-1:-1:-1;8180:23:1;;;;;;;;:11;:23;;;;;;;;;;;;;8363:18;;8341:19;;;:12;;;:19;;;;;;:40;;;;8396:11;;8137:327;-1:-1:-1;8447:5:1;8440:12;;27061:1355:0;8765:17;:24;;-1:-1:-1;;8765:24:0;;;;;;27234:77:::1;27295:5;27234:42;27250:25;:23;:25::i;:::-;27234:11:::0;;:15:::1;:42::i;:77::-;27214:97:::0;-1:-1:-1;27386:28:0::1;27417:26;:11:::0;27214:97;27417:15:::1;:26::i;:::-;27386:57;;27679:18;27700:93;27762:20;27700:43;27716:26;:24;:26::i;:::-;27700:11:::0;;:15:::1;:43::i;:93::-;27679:114:::0;-1:-1:-1;27831:21:0::1;27865:38;27882:20:::0;27865:16:::1;:38::i;:::-;27977:17;27997:41;:21;28023:14:::0;27997:25:::1;:41::i;:::-;27977:61:::0;-1:-1:-1;28120:20:0::1;28143:38;28175:5;28144:25;27977:61:::0;28158:10;28144:13:::1;:25::i;28143:38::-;28120:61:::0;-1:-1:-1;28247:14:0::1;28264:27;:9:::0;28120:61;28264:13:::1;:27::i;:::-;28247:44;;28304:31;28317:9;28328:6;28304:12;:31::i;:::-;28353:55;::::0;;26657:25:2;;;26713:2;26698:18;;26691:34;;;26741:18;;;26734:34;;;28353:55:0::1;::::0;26645:2:2;26630:18;28353:55:0::1;;;;;;;-1:-1:-1::0;;8812:17:0;:25;;-1:-1:-1;;8812:25:0;;;-1:-1:-1;;;;;;27061:1355:0:o;36159:4164::-;36361:6;;;;;;;36357:260;;36398:14;;-1:-1:-1;;;;;36385:27:0;;;36398:14;;36385:27;;;;:48;;-1:-1:-1;36429:4:0;;-1:-1:-1;;;;;36416:17:0;;;36429:4;;36416:17;;36385:48;:78;;;;-1:-1:-1;36450:13:0;;-1:-1:-1;;;;;36437:26:0;;;36450:13;;36437:26;;36385:78;36381:225;;;36524:14;;36514:6;36491:20;36501:9;36491;:20::i;:::-;:29;;;;:::i;:::-;:47;;36483:97;;;;-1:-1:-1;;;36483:97:0;;20669:2:2;36483:97:0;;;20651:21:2;20708:2;20688:18;;;20681:30;20747:34;20727:18;;;20720:62;-1:-1:-1;;;20798:18:2;;;20791:35;20843:19;;36483:97:0;20467:401:2;36483:97:0;36651:16;;;;;;;36648:203;;;36692:31;:14;36716:6;36692:23;:31::i;:::-;36691:32;36683:69;;;;-1:-1:-1;;;36683:69:0;;19903:2:2;36683:69:0;;;19885:21:2;19942:2;19922:18;;;19915:30;-1:-1:-1;;;19961:18:2;;;19954:53;20024:18;;36683:69:0;19701:347:2;36683:69:0;36776:34;:14;36800:9;36776:23;:34::i;:::-;36775:35;36767:72;;;;-1:-1:-1;;;36767:72:0;;19903:2:2;36767:72:0;;;19885:21:2;19942:2;19922:18;;;19915:30;-1:-1:-1;;;19961:18:2;;;19954:53;20024:18;;36767:72:0;19701:347:2;36767:72:0;36886:16;;;;36883:209;;;36926:31;:14;36950:6;36926:23;:31::i;:::-;36918:72;;;;-1:-1:-1;;;36918:72:0;;19141:2:2;36918:72:0;;;19123:21:2;19180:2;19160:18;;;19153:30;19219:29;19199:18;;;19192:57;19266:18;;36918:72:0;18939:351:2;36918:72:0;37013:34;:14;37037:9;37013:23;:34::i;:::-;37005:75;;;;-1:-1:-1;;;37005:75:0;;19141:2:2;37005:75:0;;;19123:21:2;19180:2;19160:18;;;19153:30;19219:29;19199:18;;;19192:57;19266:18;;37005:75:0;18939:351:2;37005:75:0;37168:6;;;;;;;37165:158;;;37208:14;;-1:-1:-1;;;;;37195:27:0;;;37208:14;;37195:27;37192:118;;;21420:7:1;21447:6;-1:-1:-1;;;;;37250:17:0;;;21447:6:1;;37250:17:0;37242:52;;;;-1:-1:-1;;;37242:52:0;;13559:2:2;37242:52:0;;;13541:21:2;13598:2;13578:18;;;13571:30;13637:25;13617:18;;;13610:53;13680:18;;37242:52:0;13357:347:2;37242:52:0;37411:14;;-1:-1:-1;;;;;37398:27:0;;;37411:14;;37398:27;:52;;;;-1:-1:-1;37429:21:0;;;;37398:52;37395:1158;;;37519:16;;;37533:1;37519:16;;;;;;;;37495:21;;37519:16;;;;;;;;;;-1:-1:-1;37519:16:0;37495:40;;37572:4;37554;37559:1;37554:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;37554:23:0;;;-1:-1:-1;;;;;37554:23:0;;;;;37606:16;;;;;;;;;-1:-1:-1;;;;;37606:16:0;-1:-1:-1;;;;;37606:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37596:4;37601:1;37596:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37596:33:0;;;:7;;;;;;;;;:33;37692:16;;:43;;-1:-1:-1;;;37692:43:0;;37665:24;;37692:16;;;;;;;;:30;;:43;;37723:6;;37730:4;;37692:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37692:43:0;;;;;;;;;;;;:::i;:::-;37736:1;37692:46;;;;;;;;:::i;:::-;;;;;;;37665:73;;37756:19;37778:46;37800:16;37817:6;37778:21;:46::i;:::-;37756:68;;38042:18;;37997:41;38023:14;;37997:21;38013:4;37997:11;:15;;:21;;;;:::i;:41::-;:63;;37989:140;;;;-1:-1:-1;;;37989:140:0;;22782:2:2;37989:140:0;;;22764:21:2;22821:2;22801:18;;;22794:30;22860:34;22840:18;;;22833:62;22931:34;22911:18;;;22904:62;-1:-1:-1;;;22982:19:2;;;22975:32;23024:19;;37989:140:0;22580:469:2;37989:140:0;38168:18;;38156:8;;:30;;38148:96;;;;-1:-1:-1;;;38148:96:0;;22359:2:2;38148:96:0;;;22341:21:2;22398:2;22378:18;;;22371:30;22437:34;22417:18;;;22410:62;-1:-1:-1;;;22488:18:2;;;22481:52;22550:19;;38148:96:0;22157:418:2;38148:96:0;38329:50;38355:16;38372:6;38329:25;:50::i;:::-;;38437:25;38455:6;38437:17;:25::i;:::-;38515:12;:10;:12::i;:::-;;37451:1102;;;37395:1158;38578:14;;-1:-1:-1;;;;;38568:24:0;;;38578:14;;38568:24;:49;;;;-1:-1:-1;38596:21:0;;;;38568:49;38565:493;;;38678:16;;;38692:1;38678:16;;;;;;;;38654:21;;38678:16;;;;;;;;;;-1:-1:-1;38678:16:0;38654:40;;38731:4;38713;38718:1;38713:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;38713:23:0;;;-1:-1:-1;;;;;38713:23:0;;;;;38765:16;;;;;;;;;-1:-1:-1;;;;;38765:16:0;-1:-1:-1;;;;;38765:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38755:4;38760:1;38755:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38755:33:0;;;:7;;;;;;;;;:33;38929:16;;:43;;-1:-1:-1;;;38929:43:0;;38904:22;;38929:16;;;;;;;;:30;;:43;;38960:6;;38967:4;;38929:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38929:43:0;;;;;;;;;;;;:::i;:::-;38973:1;38929:46;;;;;;;;:::i;:::-;;;;;;;38904:71;;38993:50;39021:14;39036:6;38993:27;:50::i;:::-;;38618:440;;38565:493;39194:14;;-1:-1:-1;;;;;39184:24:0;;;39194:14;;39184:24;;;;:55;;-1:-1:-1;39225:14:0;;-1:-1:-1;;;;;39212:27:0;;;39225:14;;39212:27;;39184:55;39181:149;;;39292:25;39310:6;39292:17;:25::i;:::-;39347:7;39346:8;:18;;;-1:-1:-1;39358:6:0;;;;;;;39346:18;39342:179;;;39399:1;39381:15;:19;;;39415:21;:25;;;39455:15;:19;;;39489:16;:20;39342:179;39533:19;39555:38;:21;39586:6;39555:30;:38::i;:::-;39533:60;-1:-1:-1;39604:22:0;39629:41;:21;39660:9;39629:30;:41::i;:::-;39604:66;;39685:14;:36;;;;;39704:17;39703:18;39685:36;39681:557;;;39738:48;39760:6;39768:9;39779:6;39738:21;:48::i;:::-;39681:557;;;39809:14;39808:15;:36;;;;;39827:17;39808:36;39804:434;;;39861:46;39881:6;39889:9;39900:6;39861:19;:46::i;39804:434::-;39930:14;39929:15;:37;;;;;39949:17;39948:18;39929:37;39925:313;;;39983:44;40001:6;40009:9;40020:6;39983:17;:44::i;39925:313::-;40049:14;:35;;;;;40067:17;40049:35;40045:193;;;40101:48;40123:6;40131:9;40142:6;40101:21;:48::i;40045:193::-;40182:44;40200:6;40208:9;40219:6;40182:17;:44::i;:::-;40255:29;30087:7;;30069:15;:25;30129:13;;30105:21;:37;30171:7;;30153:15;:25;30208:8;;30189:16;:27;30008:223;34026:225:1;34146:7;34181:12;34174:5;34166:28;;;;-1:-1:-1;;;34166:28:1;;;;;;;;:::i;:::-;-1:-1:-1;34205:9:1;34217:5;34221:1;34217;:5;:::i;46214:699:0:-;46312:7;;46348;;46265;;;;;46366:432;46390:30;:21;:28;:30::i;:::-;46386:1;:34;46366:432;;;46442:23;46468:27;:21;46493:1;46468:24;:27::i;:::-;-1:-1:-1;;;;;46532:24:0;;;;;;:7;:24;;;;;;46442:53;;-1:-1:-1;46532:34:0;-1:-1:-1;46532:34:0;:89;;-1:-1:-1;;;;;;46587:24:0;;;;;;:7;:24;;;;;;:34;-1:-1:-1;46532:89:0;46510:152;;;46645:7;;46654;;46637:25;;;;;;;;46214:699;;:::o;46510:152::-;-1:-1:-1;;;;;46699:24:0;;;;;;:7;:24;;;;;;46687:37;;:7;;:11;:37::i;:::-;-1:-1:-1;;;;;46761:24:0;;;;;;:7;:24;;;;;;46677:47;;-1:-1:-1;46749:37:0;;:7;;:11;:37::i;:::-;46739:47;;46427:371;46422:3;;;;;:::i;:::-;;;;46366:432;;;-1:-1:-1;46834:7:0;;46822;;:20;;:11;:20::i;:::-;46812:7;:30;46808:61;;;46852:7;;46861;;46844:25;;;;;;46214:699;;:::o;46808:61::-;46888:7;;46897;;-1:-1:-1;46214:699:0;-1:-1:-1;46214:699:0:o;8647:1566:1:-;8713:4;8852:19;;;:12;;;:19;;;;;;8888:15;;8884:1322;;9263:21;9287:14;9300:1;9287:10;:14;:::i;:::-;9336:18;;9263:38;;-1:-1:-1;9316:17:1;;9336:22;;9357:1;;9336:22;:::i;:::-;9316:42;;9603:17;9623:3;:11;;9635:9;9623:22;;;;;;;;:::i;:::-;;;;;;;;;9603:42;;9769:9;9740:3;:11;;9752:13;9740:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;9846:23;;;:12;;;:23;;;;;;:36;;;10007:17;;9846:3;;10007:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10102:3;:12;;:19;10115:5;10102:19;;;;;;;;;;;10095:26;;;10145:4;10138:11;;;;;;;;8884:1322;10189:5;10182:12;;;;;28424:476:0;28514:16;;;28528:1;28514:16;;;;;;;;28490:21;;28514:16;;;;;;;;;;-1:-1:-1;28514:16:0;28490:40;;28559:4;28541;28546:1;28541:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28541:23:0;;;-1:-1:-1;;;;;28541:23:0;;;;;28585:16;;;;;;;;;-1:-1:-1;;;;;28585:16:0;-1:-1:-1;;;;;28585:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28575:4;28580:1;28575:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28575:33:0;;;:7;;;;;;;;;:33;28653:16;;28621:63;;28638:4;;28653:16;;;;28672:11;28621:8;:63::i;:::-;28695:16;;:197;;-1:-1:-1;;;28695:197:0;;:16;;;;-1:-1:-1;;;;;28695:16:0;;:67;;:197;;28777:11;;28803:1;;28819:4;;28846;;28866:15;;28695:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28908:525;29088:16;;29056:63;;29073:4;;29088:16;;;-1:-1:-1;;;;;29088:16:0;29107:11;29056:8;:63::i;:::-;29162:16;;-1:-1:-1;;;;;29162:16:0;;;;;:32;29202:9;29235:4;29255:11;29281:1;;29367:17;21544:16:1;;-1:-1:-1;;;;;21544:16:1;;21469:99;29367:17:0;29162:263;;;;;;-1:-1:-1;;;;;;29162:263:0;;;-1:-1:-1;;;;;6654:15:2;;;29162:263:0;;;6636:34:2;6686:18;;;6679:34;;;;6729:18;;;6722:34;;;;6772:18;;;6765:34;6836:15;;;6815:19;;;6808:44;29399:15:0;6868:19:2;;;6861:35;6570:19;;29162:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28908:525;;:::o;10854:1153::-;10939:7;10960:23;10985:12;11075:14;11090;11106:22;11132:21;;;;;;;;;-1:-1:-1;;;;;11132:21:0;-1:-1:-1;;;;;11132:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11074:93;;;;-1:-1:-1;;;;;11074:93:0;;;-1:-1:-1;;;;;11074:93:0;;;11199:6;11190;:15;11187:208;;;11238:6;11220:24;;11266:6;11259:13;;11187:208;;;11339:6;11321:24;;11367:6;11360:13;;11187:208;11425:27;:15;11445:6;11425:19;:27::i;:::-;11407:45;-1:-1:-1;11470:17:0;:4;11479:7;11470:8;:17::i;:::-;11463:24;-1:-1:-1;11530:20:0;11527:73;;11587:1;11580:8;;;;;;;;;11527:73;11676:18;11697:46;11727:15;11698:23;11707:13;;11698:4;:8;;:23;;;;:::i;11697:46::-;11676:67;;11793:14;;11780:10;:27;11777:87;;;11824:14;:27;;;11777:87;11934:14;;11907:42;;11908:20;:10;11923:4;11908:14;:20::i;11907:42::-;11896:8;:53;11978:10;10854:1153;-1:-1:-1;;;;;;;;10854:1153:0:o;33378:1345::-;-1:-1:-1;;;;;33517:18:0;;33440:17;33517:18;;;:10;:18;;;;;;;;;33579:19;:27;;;;;;33660:13;;33460:15;;33440:17;33660:13;;;;;33657:858;;;33704:14;;-1:-1:-1;;;;;33694:24:0;;;33704:14;;33694:24;33691:807;;33753:22;33741:9;:34;33738:741;;;33801:12;33816:37;:9;33830:22;33816:13;:37::i;:::-;-1:-1:-1;;;;;33876:27:0;;;;;;:19;:27;;;;;;;;:39;;;33956;;;:17;:39;;;;;;;-1:-1:-1;33801:52:0;-1:-1:-1;34021:20:0;;:48;;;;;34068:1;34045:20;:24;34021:48;34018:131;;;34115:10;;34097:28;;34018:131;34184:12;;34176:4;:20;34173:143;;-1:-1:-1;;;;;34224:18:0;;34245:1;34224:18;;;:10;:18;;;;;:22;;;34245:1;-1:-1:-1;34173:143:0;34349:12;;34342:4;:19;34339:119;;;34410:24;:20;34433:1;34410:24;:::i;:::-;-1:-1:-1;;;;;34389:18:0;;;;;;:10;:18;;;;;:45;34339:119;33776:703;33738:741;34553:15;34528:21;;:40;;;;;;;:::i;:::-;;;;;;;;34600:15;34580:16;;:35;;;;;;;:::i;:::-;;;;;;;;34646:15;34627;;:34;;;;;;;:::i;:::-;;;;;;;;34692:15;34673;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;33378:1345:0:o;31342:497::-;31435:15;;31382:4;;;;-1:-1:-1;;;31435:15:0;;;;31432:365;;;31476:21;;31465:8;;:32;31462:318;;;31529:4;31517:16;;31586:17;;31561:21;;:42;;;;;;;:::i;:::-;;;;-1:-1:-1;;31639:17:0;;31619:16;:37;;:16;;:37;;31639:17;;31619:37;:::i;:::-;;;;-1:-1:-1;;31691:17:0;;31672:15;:36;;:15;;:36;;31691:17;;31672:36;:::i;:::-;;;;-1:-1:-1;;31743:17:0;;31724:15;:36;;:15;;:36;;31743:17;;31724:36;:::i;:::-;;;;-1:-1:-1;;31462:318:0;31814:9;31342:497;-1:-1:-1;31342:497:0:o;12020:1177::-;12112:7;12131:23;12156:12;12250:14;12265;12281:22;12307:21;;;;;;;;;-1:-1:-1;;;;;12307:21:0;-1:-1:-1;;;;;12307:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12249:93;;;;-1:-1:-1;;;;;12249:93:0;;;-1:-1:-1;;;;;12249:93:0;;;12384:6;12375;:15;12372:208;;;12423:6;12405:24;;12451:6;12444:13;;12372:208;;;12524:6;12506:24;;12552:6;12545:13;;12372:208;12611:31;:15;12631:10;12611:19;:31::i;:::-;12593:49;-1:-1:-1;12659:18:0;:4;12668:8;12659;:18::i;43275:966::-;43426:23;43464:12;43491:18;43524:13;43551:20;43563:7;43551:11;:20::i;:::-;43411:160;;;;;;;;43582:19;43604:10;:8;:10::i;:::-;43582:32;;43626:15;43643:23;43668:12;43684:134;43710:7;43732:4;43751:10;43776:5;43796:11;43684;:134::i;:::-;43625:193;;-1:-1:-1;43625:193:0;-1:-1:-1;43625:193:0;-1:-1:-1;43829:13:0;43845:22;:5;43855:11;43845:9;:22::i;:::-;-1:-1:-1;;;;;43898:15:0;;;;;;:7;:15;;;;;;43829:38;;-1:-1:-1;43898:28:0;;43918:7;43898:19;:28::i;:::-;-1:-1:-1;;;;;43880:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43955:7;:15;;;;:28;;43975:7;43955:19;:28::i;:::-;-1:-1:-1;;;;;43937:15:0;;;;;;;:7;:15;;;;;;:46;;;;44015:18;;;;;;;:39;;44038:15;44015:22;:39::i;:::-;-1:-1:-1;;;;;43994:18:0;;;;;;:7;:18;;;;;:60;44067:58;44094:4;44101:10;44113:11;44067:18;:58::i;:::-;44136:37;44148:4;44154:5;44161:4;44167:5;44136:11;:37::i;:::-;44206:9;-1:-1:-1;;;;;44189:44:0;44198:6;-1:-1:-1;;;;;44189:44:0;;44217:15;44189:44;;;;25242:25:2;;25230:2;25215:18;;25096:177;44189:44:0;;;;;;;;43400:841;;;;;;;;;43275:966;;;:::o;42289:978::-;42438:23;42476:12;42503:18;42536:13;42563:20;42575:7;42563:11;:20::i;:::-;42423:160;;;;;;;;42594:19;42616:10;:8;:10::i;:::-;42594:32;;42638:15;42655:23;42680:12;42696:134;42722:7;42744:4;42763:10;42788:5;42808:11;42696;:134::i;:::-;42637:193;;-1:-1:-1;42637:193:0;-1:-1:-1;42637:193:0;-1:-1:-1;42841:13:0;42857:22;:5;42867:11;42857:9;:22::i;:::-;-1:-1:-1;;;;;42910:15:0;;;;;;:7;:15;;;;;;42841:38;;-1:-1:-1;42910:28:0;;42930:7;42910:19;:28::i;:::-;-1:-1:-1;;;;;42892:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;42970:18;;;;;:7;:18;;;;;:39;;42993:15;42970:22;:39::i;:::-;-1:-1:-1;;;;;42949:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43041:7;:18;;;;:39;;43064:15;43041:22;:39::i;40331:905::-;40478:23;40516:12;40543:18;40576:13;40603:20;40615:7;40603:11;:20::i;:::-;40463:160;;;;;;;;40634:19;40656:10;:8;:10::i;:::-;40634:32;;40678:15;40695:23;40720:12;40736:134;40762:7;40784:4;40803:10;40828:5;40848:11;40736;:134::i;:::-;40677:193;;-1:-1:-1;40677:193:0;-1:-1:-1;40677:193:0;-1:-1:-1;40881:13:0;40897:22;:5;40907:11;40897:9;:22::i;:::-;-1:-1:-1;;;;;40950:15:0;;;;;;:7;:15;;;;;;40881:38;;-1:-1:-1;40950:28:0;;40970:7;40950:19;:28::i;41244:1037::-;41395:23;41433:12;41460:18;41493:13;41520:20;41532:7;41520:11;:20::i;:::-;41380:160;;;;;;;;41551:19;41573:10;:8;:10::i;:::-;41551:32;;41595:15;41612:23;41637:12;41653:134;41679:7;41701:4;41720:10;41745:5;41765:11;41653;:134::i;:::-;41594:193;;-1:-1:-1;41594:193:0;-1:-1:-1;41594:193:0;-1:-1:-1;41798:13:0;41814:22;:5;41824:11;41814:9;:22::i;:::-;-1:-1:-1;;;;;41867:15:0;;;;;;:7;:15;;;;;;41798:38;;-1:-1:-1;41867:28:0;;41887:7;41867:19;:28::i;:::-;-1:-1:-1;;;;;41849:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41924:7;:15;;;;:28;;41944:7;41924:19;:28::i;14620:190:1:-;14721:7;14777:22;14781:3;14793:5;14777:3;:22::i;46921:408:0:-;47067:1;47056:7;:12;47052:51;;46921:408;;;:::o;47052:51::-;47115:15;47133:24;:7;47145:11;47133;:24::i;:::-;-1:-1:-1;;;;;47182:11:0;;;;;;:7;:11;;;;;;47115:42;;-1:-1:-1;47182:24:0;;47115:42;47182:15;:24::i;:::-;-1:-1:-1;;;;;47168:11:0;;;;;;:7;:11;;;;;:38;47221:34;:21;47176:2;47221:30;:34::i;:::-;47217:105;;;-1:-1:-1;;;;;47286:11:0;;;;;;:7;:11;;;;;;:24;;47302:7;47286:15;:24::i;:::-;-1:-1:-1;;;;;47272:11:0;;;;;;:7;:11;;;;;:38;47217:105;47041:288;46921:408;;;:::o;44249:317::-;44400:28;44422:5;44400:17;44412:4;44400:7;;:11;;:17;;;;:::i;:::-;:21;;:28::i;:::-;44390:7;:38;44452:10;;:20;;44467:4;44452:14;:20::i;:::-;44439:10;:33;44497:11;;:22;;44513:5;44497:15;:22::i;:::-;44483:11;:36;44540:7;;:18;;44552:5;44540:11;:18::i;:::-;44530:7;:28;-1:-1:-1;;;;44249:317:0:o;11009:273:1:-;11150:18;;11103:7;;11150:26;-1:-1:-1;11128:110:1;;;;-1:-1:-1;;;11128:110:1;;8369:2:2;11128:110:1;;;8351:21:2;8408:2;8388:18;;;8381:30;8447:34;8427:18;;;8420:62;-1:-1:-1;;;8498:18:2;;;8491:32;8540:19;;11128:110:1;8167:398:2;11128:110:1;11256:3;:11;;11268:5;11256:18;;;;;;;;:::i;:::-;;;;;;;;;11249:25;;11009:273;;;;:::o;14:160:2:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;179:188;258:13;;-1:-1:-1;;;;;300:42:2;;290:53;;280:81;;357:1;354;347:12;372:247;431:6;484:2;472:9;463:7;459:23;455:32;452:52;;;500:1;497;490:12;452:52;539:9;526:23;558:31;583:5;558:31;:::i;624:251::-;694:6;747:2;735:9;726:7;722:23;718:32;715:52;;;763:1;760;753:12;715:52;795:9;789:16;814:31;839:5;814:31;:::i;1140:388::-;1208:6;1216;1269:2;1257:9;1248:7;1244:23;1240:32;1237:52;;;1285:1;1282;1275:12;1237:52;1324:9;1311:23;1343:31;1368:5;1343:31;:::i;:::-;1393:5;-1:-1:-1;1450:2:2;1435:18;;1422:32;1463:33;1422:32;1463:33;:::i;:::-;1515:7;1505:17;;;1140:388;;;;;:::o;1533:456::-;1610:6;1618;1626;1679:2;1667:9;1658:7;1654:23;1650:32;1647:52;;;1695:1;1692;1685:12;1647:52;1734:9;1721:23;1753:31;1778:5;1753:31;:::i;:::-;1803:5;-1:-1:-1;1860:2:2;1845:18;;1832:32;1873:33;1832:32;1873:33;:::i;:::-;1533:456;;1925:7;;-1:-1:-1;;;1979:2:2;1964:18;;;;1951:32;;1533:456::o;1994:315::-;2059:6;2067;2120:2;2108:9;2099:7;2095:23;2091:32;2088:52;;;2136:1;2133;2126:12;2088:52;2175:9;2162:23;2194:31;2219:5;2194:31;:::i;:::-;2244:5;-1:-1:-1;2268:35:2;2299:2;2284:18;;2268:35;:::i;:::-;2258:45;;1994:315;;;;;:::o;2314:::-;2382:6;2390;2443:2;2431:9;2422:7;2418:23;2414:32;2411:52;;;2459:1;2456;2449:12;2411:52;2498:9;2485:23;2517:31;2542:5;2517:31;:::i;:::-;2567:5;2619:2;2604:18;;;;2591:32;;-1:-1:-1;;;2314:315:2:o;2634:1116::-;2729:6;2760:2;2803;2791:9;2782:7;2778:23;2774:32;2771:52;;;2819:1;2816;2809:12;2771:52;2852:9;2846:16;2881:18;2922:2;2914:6;2911:14;2908:34;;;2938:1;2935;2928:12;2908:34;2976:6;2965:9;2961:22;2951:32;;3021:7;3014:4;3010:2;3006:13;3002:27;2992:55;;3043:1;3040;3033:12;2992:55;3072:2;3066:9;3094:2;3090;3087:10;3084:36;;;3100:18;;:::i;:::-;3146:2;3143:1;3139:10;3178:2;3172:9;3241:2;3237:7;3232:2;3228;3224:11;3220:25;3212:6;3208:38;3296:6;3284:10;3281:22;3276:2;3264:10;3261:18;3258:46;3255:72;;;3307:18;;:::i;:::-;3343:2;3336:22;3393:18;;;3427:15;;;;-1:-1:-1;3462:11:2;;;3492;;;3488:20;;3485:33;-1:-1:-1;3482:53:2;;;3531:1;3528;3521:12;3482:53;3553:1;3544:10;;3563:156;3577:2;3574:1;3571:9;3563:156;;;3634:10;;3622:23;;3595:1;3588:9;;;;;3665:12;;;;3697;;3563:156;;;-1:-1:-1;3738:6:2;2634:1116;-1:-1:-1;;;;;;;;2634:1116:2:o;3755:180::-;3811:6;3864:2;3852:9;3843:7;3839:23;3835:32;3832:52;;;3880:1;3877;3870:12;3832:52;3903:26;3919:9;3903:26;:::i;3940:450::-;4027:6;4035;4043;4096:2;4084:9;4075:7;4071:23;4067:32;4064:52;;;4112:1;4109;4102:12;4064:52;4135:40;4165:9;4135:40;:::i;:::-;4125:50;;4194:49;4239:2;4228:9;4224:18;4194:49;:::i;:::-;4184:59;;4286:2;4275:9;4271:18;4265:25;4330:10;4323:5;4319:22;4312:5;4309:33;4299:61;;4356:1;4353;4346:12;4299:61;4379:5;4369:15;;;3940:450;;;;;:::o;4395:180::-;4454:6;4507:2;4495:9;4486:7;4482:23;4478:32;4475:52;;;4523:1;4520;4513:12;4475:52;-1:-1:-1;4546:23:2;;4395:180;-1:-1:-1;4395:180:2:o;4580:248::-;4645:6;4653;4706:2;4694:9;4685:7;4681:23;4677:32;4674:52;;;4722:1;4719;4712:12;4674:52;4758:9;4745:23;4735:33;;4787:35;4818:2;4807:9;4803:18;4787:35;:::i;4833:248::-;4901:6;4909;4962:2;4950:9;4941:7;4937:23;4933:32;4930:52;;;4978:1;4975;4968:12;4930:52;-1:-1:-1;;5001:23:2;;;5071:2;5056:18;;;5043:32;;-1:-1:-1;4833:248:2:o;5086:306::-;5174:6;5182;5190;5243:2;5231:9;5222:7;5218:23;5214:32;5211:52;;;5259:1;5256;5249:12;5211:52;5288:9;5282:16;5272:26;;5338:2;5327:9;5323:18;5317:25;5307:35;;5382:2;5371:9;5367:18;5361:25;5351:35;;5086:306;;;;;:::o;5397:461::-;5450:3;5488:5;5482:12;5515:6;5510:3;5503:19;5541:4;5570:2;5565:3;5561:12;5554:19;;5607:2;5600:5;5596:14;5628:1;5638:195;5652:6;5649:1;5646:13;5638:195;;;5717:13;;-1:-1:-1;;;;;5713:39:2;5701:52;;5773:12;;;;5808:15;;;;5749:1;5667:9;5638:195;;;-1:-1:-1;5849:3:2;;5397:461;-1:-1:-1;;;;;5397:461:2:o;7565:597::-;7677:4;7706:2;7735;7724:9;7717:21;7767:6;7761:13;7810:6;7805:2;7794:9;7790:18;7783:34;7835:1;7845:140;7859:6;7856:1;7853:13;7845:140;;;7954:14;;;7950:23;;7944:30;7920:17;;;7939:2;7916:26;7909:66;7874:10;;7845:140;;;8003:6;8000:1;7997:13;7994:91;;;8073:1;8068:2;8059:6;8048:9;8044:22;8040:31;8033:42;7994:91;-1:-1:-1;8146:2:2;8125:15;-1:-1:-1;;8121:29:2;8106:45;;;;8153:2;8102:54;;7565:597;-1:-1:-1;;;7565:597:2:o;9386:408::-;9588:2;9570:21;;;9627:2;9607:18;;;9600:30;9666:34;9661:2;9646:18;;9639:62;-1:-1:-1;;;9732:2:2;9717:18;;9710:42;9784:3;9769:19;;9386:408::o;15642:356::-;15844:2;15826:21;;;15863:18;;;15856:30;15922:34;15917:2;15902:18;;15895:62;15989:2;15974:18;;15642:356::o;23054:399::-;23256:2;23238:21;;;23295:2;23275:18;;;23268:30;23334:34;23329:2;23314:18;;23307:62;-1:-1:-1;;;23400:2:2;23385:18;;23378:33;23443:3;23428:19;;23054:399::o;25278:332::-;25485:6;25474:9;25467:25;25528:2;25523;25512:9;25508:18;25501:30;25448:4;25548:56;25600:2;25589:9;25585:18;25577:6;25548:56;:::i;:::-;25540:64;25278:332;-1:-1:-1;;;;25278:332:2:o;25615:582::-;25914:6;25903:9;25896:25;25957:6;25952:2;25941:9;25937:18;25930:34;26000:3;25995:2;25984:9;25980:18;25973:31;25877:4;26021:57;26073:3;26062:9;26058:19;26050:6;26021:57;:::i;:::-;-1:-1:-1;;;;;26114:32:2;;;;26109:2;26094:18;;26087:60;-1:-1:-1;26178:3:2;26163:19;26156:35;26013:65;25615:582;-1:-1:-1;;;25615:582:2:o;26968:128::-;27008:3;27039:1;27035:6;27032:1;27029:13;27026:39;;;27045:18;;:::i;:::-;-1:-1:-1;27081:9:2;;26968:128::o;27101:217::-;27141:1;27167;27157:132;;27211:10;27206:3;27202:20;27199:1;27192:31;27246:4;27243:1;27236:15;27274:4;27271:1;27264:15;27157:132;-1:-1:-1;27303:9:2;;27101:217::o;27323:168::-;27363:7;27429:1;27425;27421:6;27417:14;27414:1;27411:21;27406:1;27399:9;27392:17;27388:45;27385:71;;;27436:18;;:::i;:::-;-1:-1:-1;27476:9:2;;27323:168::o;27496:125::-;27536:4;27564:1;27561;27558:8;27555:34;;;27569:18;;:::i;:::-;-1:-1:-1;27606:9:2;;27496:125::o;27626:135::-;27665:3;-1:-1:-1;;27686:17:2;;27683:43;;;27706:18;;:::i;:::-;-1:-1:-1;27753:1:2;27742:13;;27626:135::o;27766:127::-;27827:10;27822:3;27818:20;27815:1;27808:31;27858:4;27855:1;27848:15;27882:4;27879:1;27872:15;27898:127;27959:10;27954:3;27950:20;27947:1;27940:31;27990:4;27987:1;27980:15;28014:4;28011:1;28004:15;28030:127;28091:10;28086:3;28082:20;28079:1;28072:31;28122:4;28119:1;28112:15;28146:4;28143:1;28136:15;28162:127;28223:10;28218:3;28214:20;28211:1;28204:31;28254:4;28251:1;28244:15;28278:4;28275:1;28268:15;28294:131;-1:-1:-1;;;;;28369:31:2;;28359:42;;28349:70;;28415:1;28412;28405:12
Swarm Source
ipfs://7d52faad9126e7edca84c4398699b70936f3c9404abbb4b780e9eee212c3cb9f
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.