Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 $SSI
Holders
116
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
998.140000000000945083 $SSIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SpookySeasonInu
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-20 */ /* Telegram- https://t.me/SpookySeasonInu Twitter- https://twitter.com/SpookySeasonInu Website - will be pinned in the group */ // SPDX-License-Identifier: MIT pragma solidity 0.8.11; 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; } } interface IDexPair { function sync() external; } interface IERC20 { /** * @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); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string public _name; string public _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _createInitialSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() external virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) external virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); } interface IDexFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract SpookySeasonInu is ERC20, Ownable { IDexRouter public dexRouter; address public lpPair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public devWallet; address public RouterAddress; address public LiquidityReceiver; uint256 private sniperblocks; uint256 public tradingActiveBlock = 0; uint256 public maxTxnAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public amountForAutoBuyBack = 0 ether; bool public autoBuyBackEnabled = false; uint256 public autoBuyBackFrequency = 0 seconds; uint256 public lastAutoBuyBackTime; uint256 public percentForLPMarketing = 0; // 100 = 1% bool public lpMarketingEnabled = false; uint256 public lpMarketingFrequency = 0 seconds; uint256 public lastLpMarketingTime; uint256 public manualMarketingFrequency = 1 hours; uint256 public lastManualLpMarketingTime; bool public tradingActive = false; bool public swapEnabled = false; // prevent more than 1 buy on same block this may cuz rug check bots to fail but helpful on launches mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyBuyBackFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellBuyBackFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForBuyBack; uint256 public tokensForDev; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedmaxTxnAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event DevWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(uint256 amount); event ManualNukeLP(uint256 amount); event BuyBackTriggered(uint256 amount); event OwnerForcedSwapBack(uint256 timestamp); constructor() ERC20("Spooky Season Inu", "$SSI") payable { uint256 _buyMarketingFee = 5; uint256 _buyLiquidityFee = 2; uint256 _buyBuyBackFee = 0; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 80; uint256 _sellLiquidityFee = 19; uint256 _sellBuyBackFee = 0; uint256 _sellDevFee = 0; uint256 totalSupply = 1e7 * 10 * 1e18; maxTxnAmount = totalSupply * 1 / 100; // 1% of supply maxWallet = totalSupply * 2 / 100; // 1% maxWallet swapTokensAtAmount = totalSupply * 5 / 1000; // 0.5% swap amount buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyBuyBackFee = _buyBuyBackFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuyBackFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellBuyBackFee = _sellBuyBackFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuyBackFee + sellDevFee; marketingWallet = address(owner()); devWallet = address(owner()); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); _createInitialSupply(address(this), totalSupply*100/100); } receive() external payable { } mapping (address => bool) private _isBlackListedBot; address[] private _blackListedBots; // Toggle Transfer delay function ToggleTransferDelay() external onlyOwner { if(transferDelayEnabled==true){ transferDelayEnabled = false; }else{ transferDelayEnabled = true; } } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTxnAmount lower than 0.5%");//1e18 means 10**18 (18 means decimals lol) maxTxnAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set maxWallet lower than 1%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedmaxTxnAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _MarketingFee, uint256 _liquidityFee, uint256 _buyBackFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _MarketingFee; buyLiquidityFee = _liquidityFee; buyBuyBackFee = _buyBackFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuyBackFee + buyDevFee; require(buyTotalFees <= 100, "Must keep fees at 100% or less"); } function updateSellFees(uint256 _MarketingFee, uint256 _liquidityFee, uint256 _buyBackFee, uint256 _devFee) external onlyOwner { sellMarketingFee = _MarketingFee; sellLiquidityFee = _liquidityFee; sellBuyBackFee = _buyBackFee; sellDevFee = _devFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuyBackFee + sellDevFee; require(sellTotalFees <= 100, "Must keep fees at 100% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updatemarketingWallet(address newmarketingWallet) external onlyOwner { marketingWallet = newmarketingWallet; } function updateLiquidityReceiverWallet(address newWallet) external onlyOwner { LiquidityReceiver = newWallet; } function updateDevWallet(address newWallet) external onlyOwner { devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_isBlackListedBot[to], "You have no power here!"); require(!_isBlackListedBot[tx.origin], "You have no power here!"); if(amount == 0) { super._transfer(from, to, 0); return; } if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping && !_isExcludedFromFees[to] && !_isExcludedFromFees[from] ){ // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != address(dexRouter) && to != address(lpPair)){ require(_holderLastTransferBlock[tx.origin] < block.number - 1 && _holderLastTransferBlock[to] < block.number - 1, "_transfer:: Transfer Delay enabled. Try again later."); _holderLastTransferBlock[tx.origin] = block.number; _holderLastTransferBlock[to] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedmaxTxnAmount[to]) { require(amount <= maxTxnAmount, "Buy transfer amount exceeds the maxTxnAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTxnAmount[from]) { require(amount <= maxTxnAmount, "Sell transfer amount exceeds the maxTxnAmount."); } else if (!_isExcludedmaxTxnAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } if(!swapping && automatedMarketMakerPairs[to] && lpMarketingEnabled && block.timestamp >= lastLpMarketingTime + lpMarketingFrequency && !_isExcludedFromFees[from]){ autoMarketingLiquidityPairTokens(); } if(!swapping && automatedMarketMakerPairs[to] && autoBuyBackEnabled && block.timestamp >= lastAutoBuyBackTime + autoBuyBackFrequency && !_isExcludedFromFees[from] && address(this).balance >= amountForAutoBuyBack){ autoBuyBack(amountForAutoBuyBack); } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // bot/sniper penalty. Tokens get transferred to Marketing wallet to allow potential refund. if(isSnipersFestActive() && automatedMarketMakerPairs[from]){ fees = amount * 99 / 100; tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForBuyBack += fees * sellBuyBackFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; } // on sell else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount * sellTotalFees / 100; tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForBuyBack += fees * sellBuyBackFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount * buyTotalFees / 100; tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForBuyBack += fees * buyBuyBackFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(dexRouter), tokenAmount); // add the liquidity dexRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable LiquidityReceiver, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForBuyBack + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance - liquidityTokens; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance - initialETHBalance; uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2)); uint256 ethForBuyBack = ethBalance * tokensForBuyBack / (totalTokensToSwap - (tokensForLiquidity/2)); uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2)); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForBuyBack - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForBuyBack = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); (success,) = address(marketingWallet).call{value: ethForMarketing}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } // keep leftover ETH for buyback } // force Swap back if slippage issues. function forceSwapBack() external onlyOwner { require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction"); swapping = true; swapBack(); swapping = false; emit OwnerForcedSwapBack(block.timestamp); } // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders. function buyBackTokens(uint256 amountInWei) external onlyOwner { require(amountInWei <= 10 ether, "May not buy more than 10 ETH in a single buy to reduce sandwich attacks"); address[] memory path = new address[](2); path[0] = dexRouter.WETH(); path[1] = address(this); // make the swap dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}( 0, // accept any amount of Ethereum path, address(0xdead), block.timestamp ); emit BuyBackTriggered(amountInWei); } function setAutoBuyBackSettings(uint256 _frequencyInSeconds, uint256 _buyBackAmount, bool _autoBuyBackEnabled) external onlyOwner { require(_frequencyInSeconds >= 30, "cannot set buyback more often than every 30 seconds"); require(_buyBackAmount <= 2 ether && _buyBackAmount >= 0.05 ether, "Must set auto buyback amount between .05 and 2 ETH"); autoBuyBackFrequency = _frequencyInSeconds; amountForAutoBuyBack = _buyBackAmount; autoBuyBackEnabled = _autoBuyBackEnabled; } function setAutoLPMarketingSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner { require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes"); require(_percent <= 1000 && _percent >= 0, "Must set auto LP Marketing percent between 1% and 10%"); lpMarketingFrequency = _frequencyInSeconds; percentForLPMarketing = _percent; lpMarketingEnabled = _Enabled; } // automated buyback function autoBuyBack(uint256 amountInWei) internal { lastAutoBuyBackTime = block.timestamp; address[] memory path = new address[](2); path[0] = dexRouter.WETH(); path[1] = address(this); // make the swap dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}( 0, // accept any amount of Ethereum path, address(0xdead), block.timestamp ); emit BuyBackTriggered(amountInWei); } function isSnipersFestActive() public view returns (bool) { return tradingActiveBlock >= block.number - sniperblocks; } function autoMarketingLiquidityPairTokens() internal{ lastLpMarketingTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(lpPair); // calculate amount to Marketing uint256 amountToMarketing = liquidityPairBalance * percentForLPMarketing / 10000; if (amountToMarketing > 0){ super._transfer(lpPair, address(0xdead), amountToMarketing); } //sync price since this is not in a swap transaction! IDexPair pair = IDexPair(lpPair); pair.sync(); emit AutoNukeLP(amountToMarketing); } function manualMarketingLiquidityPairTokens(uint256 percent) external onlyOwner { require(block.timestamp > lastManualLpMarketingTime + manualMarketingFrequency , "Must wait for cooldown to finish"); require(percent <= 1000, "May not nuke more than 10% of tokens in LP"); lastManualLpMarketingTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(lpPair); // calculate amount to Marketing uint256 amountToMarketing = liquidityPairBalance * percent / 10000; if (amountToMarketing > 0){ super._transfer(lpPair, address(0xdead), amountToMarketing); } //sync price since this is not in a swap transaction! IDexPair pair = IDexPair(lpPair); pair.sync(); emit ManualNukeLP(amountToMarketing); } function EnableTrading(uint256 _blocknumbers) external onlyOwner { require(!tradingActive, "Trading is already active, cannot relaunch."); //standard enable trading tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; sniperblocks = _blocknumbers; } function InitiateLP(address _router,address _marketingwallet,address _liquidityreceiver,address[] memory AirdropAddresses,uint256[] memory AirdropAmounts) external onlyOwner { require(!tradingActive, "Trading is already active, cannot relaunch."); //setup wallets marketingWallet=_marketingwallet; LiquidityReceiver=_liquidityreceiver; excludeFromMaxTransaction(marketingWallet, true); excludeFromMaxTransaction(LiquidityReceiver, true); //airdrop wallets for (uint256 i; i < AirdropAddresses.length; ++i) { super._transfer( address(this), AirdropAddresses[i], (totalSupply() * AirdropAmounts[i] / 10000 ) //base 10000 ); } lastLpMarketingTime = block.timestamp; // initialize router RouterAddress = _router; IDexRouter _dexRouter = IDexRouter(RouterAddress); dexRouter = _dexRouter; // create pair lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH()); excludeFromMaxTransaction(address(lpPair), true); _setAutomatedMarketMakerPair(address(lpPair), true); // add the liquidity require(address(this).balance > 0, "Must have ETH on contract to launch"); require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch"); _approve(address(this), address(dexRouter), balanceOf(address(this))); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, LiquidityReceiver, block.timestamp ); } // withdraw ETH if stuck before launch function withdrawStuckETH() external onlyOwner { require(!tradingActive, "Can only withdraw if trading hasn't started"); bool success; (success,) = address(msg.sender).call{value: address(this).balance}(""); } function isBot(address account) public view returns (bool) { return _isBlackListedBot[account]; } function addBotToBlackList(address account) external onlyOwner() { require(account != RouterAddress, 'We can not blacklist router.'); require(account != lpPair, 'We can not blacklist pair address.'); _isBlackListedBot[account] = true; _blackListedBots.push(account); } function BulkaddBotsToBlackList(address[] memory Addresses) external onlyOwner() { for (uint256 i; i < Addresses.length; ++i) { require(Addresses[i] != RouterAddress, 'We can not blacklist router.'); require(Addresses[i] != lpPair, 'We can not blacklist pair address.'); _isBlackListedBot[Addresses[i]] = true; _blackListedBots.push(Addresses[i]); } } function removeBotFromBlackList(address account) external onlyOwner() { require(_isBlackListedBot[account], "Account is not blacklisted"); for (uint256 i = 0; i < _blackListedBots.length; i++) { if (_blackListedBots[i] == account) { _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1]; _isBlackListedBot[account] = false; _blackListedBots.pop(); break; } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","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":"amount","type":"uint256"}],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"Addresses","type":"address[]"}],"name":"BulkaddBotsToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocknumbers","type":"uint256"}],"name":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_marketingwallet","type":"address"},{"internalType":"address","name":"_liquidityreceiver","type":"address"},{"internalType":"address[]","name":"AirdropAddresses","type":"address[]"},{"internalType":"uint256[]","name":"AirdropAmounts","type":"uint256[]"}],"name":"InitiateLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ToggleTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTxnAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","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":[],"name":"amountForAutoBuyBack","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":[],"name":"autoBuyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuyBackFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","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":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSnipersFestActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastAutoBuyBackTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpMarketingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpMarketingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpMarketingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpMarketingFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualMarketingFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualMarketingLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_buyBackAmount","type":"uint256"},{"internalType":"bool","name":"_autoBuyBackEnabled","type":"bool"}],"name":"setAutoBuyBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPMarketingSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MarketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateLiquidityReceiverWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MarketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketingWallet","type":"address"}],"name":"updatemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6000600d81905560118181556012805460ff19908116909155601383905560158390556016805482169055601792909255610e10601955601b805461ffff19169055601d805490921660011790915560808181527053706f6f6b7920536561736f6e20496e7560781b60a0908152610100604052600460c0908152632453534960e01b60e05291926200009591600391620004b2565b508051620000ab906004906020840190620004b2565b5050506000620000c0620002a560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600560026000806050601382806a52b7d2dcc80cd2e40000006064620001368260016200056e565b62000142919062000590565b600e556064620001548260026200056e565b62000160919062000590565b6010556103e8620001738260056200056e565b6200017f919062000590565b600f55601f8990556020889055602187905560228690558587620001a48a8c620005b3565b620001b09190620005b3565b620001bc9190620005b3565b601e5560248590556025849055602683905560278290558183620001e18688620005b3565b620001ed9190620005b3565b620001f99190620005b3565b602355600554600880546001600160a01b03199081166001600160a01b03909316928317909155600980549091168217905562000238906001620002a9565b62000245306001620002a9565b620002646200025c6005546001600160a01b031690565b600162000357565b6200027130600162000357565b620002963060646200028484826200056e565b62000290919062000590565b620003cd565b5050505050505050506200060b565b3390565b6005546001600160a01b03163314620002f85760405162461bcd60e51b8152602060048201819052602482015260008051602062004dd983398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314620003a25760405162461bcd60e51b8152602060048201819052602482015260008051602062004dd98339815191526044820152606401620002ef565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6001600160a01b038216620004255760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620002ef565b8060026000828254620004399190620005b3565b90915550506001600160a01b0382166000908152602081905260408120805483929062000468908490620005b3565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620004c090620005ce565b90600052602060002090601f016020900481019282620004e457600085556200052f565b82601f10620004ff57805160ff19168380011785556200052f565b828001600101855582156200052f579182015b828111156200052f57825182559160200191906001019062000512565b506200053d92915062000541565b5090565b5b808211156200053d576000815560010162000542565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200058b576200058b62000558565b500290565b600082620005ae57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620005c957620005c962000558565b500190565b600181811c90821680620005e357607f821691505b602082108114156200060557634e487b7160e01b600052602260045260246000fd5b50919050565b6147be806200061b6000396000f3fe6080604052600436106104985760003560e01c8063764c4ce511610260578063c18bc19511610144578063e2f45605116100c1578063f11a24d311610085578063f11a24d314610d98578063f2fde38b14610dae578063f5648a4f14610dce578063f637434214610de3578063f8b45b0514610df9578063fc155d1d14610e0f57600080fd5b8063e2f4560514610d20578063e513e45a14610d36578063e7ad9fcd14610d4c578063ee40166e14610d6c578063ee9623b914610d8257600080fd5b8063d257b34f11610108578063d257b34f14610c6f578063d28d885214610c8f578063d85ba06314610ca4578063db4e7f5414610cba578063dd62ed3e14610cda57600080fd5b8063c18bc19514610be9578063c480b4c614610c09578063c7ff080514610c29578063c876d0b914610c3f578063cf46f24c14610c5957600080fd5b80639a7a23d6116101dd578063a9059cbb116101a1578063a9059cbb14610b2a578063b09f126614610b4a578063b62496f514610b5f578063bbc0c74214610b8f578063bff7816914610ba9578063c024666814610bc957600080fd5b80639a7a23d614610aa85780639c3b4fdc14610ac85780639fccce3214610ade578063a0d82dc514610af4578063a457c2d714610b0a57600080fd5b80638da5cb5b116102245780638da5cb5b14610a1f5780638ea5220f14610a3d5780639213691314610a5d578063924de9b714610a7357806395d89b4114610a9357600080fd5b8063764c4ce5146109a8578063781e812f146109be5780637bce5a04146109d35780637ded4d6a146109e95780638a0de19f14610a0957600080fd5b8063338f6d6c116103875780635f559fba116103045780636ddd1713116102c85780636ddd1713146108fa57806370a0823114610919578063715018a61461093957806375552ea81461094e5780637571336a1461096857806375f0a8741461098857600080fd5b80635f559fba1461085e57806362a7b83b1461088e578063689b08ca146108a457806368a240f9146108c45780636a486a8e146108e457600080fd5b806344f530f91161034b57806344f530f9146107b6578063452ed4f1146107d65780634fbee193146107f657806351f205e41461082f578063551b4ea61461084457600080fd5b8063338f6d6c14610707578063395093511461071d5780633bbac5791461073d5780633fd16d13146107765780634303443d1461079657600080fd5b80631f3fed8f1161041557806327c8f835116103d957806327c8f835146106805780632e6ed7ef1461069657806330a902e2146106b6578063313ce567146106cb57806331dbc932146106e757600080fd5b80631f3fed8f146105f45780631fe70a981461060a578063203e727e1461062057806323b872dd14610640578063256bf92a1461066057600080fd5b8063161c3d931161045c578063161c3d931461057d57806318160ddd146105935780631816467f146105a85780631a221dbb146105c85780631a8145bb146105de57600080fd5b806306fdde03146104a45780630758d924146104cf578063095ea7b3146105075780630b166d501461053757806314d580e71461055b57600080fd5b3661049f57005b600080fd5b3480156104b057600080fd5b506104b9610e2f565b6040516104c69190613fbd565b60405180910390f35b3480156104db57600080fd5b506006546104ef906001600160a01b031681565b6040516001600160a01b0390911681526020016104c6565b34801561051357600080fd5b5061052761052236600461402a565b610ec1565b60405190151581526020016104c6565b34801561054357600080fd5b5061054d602a5481565b6040519081526020016104c6565b34801561056757600080fd5b5061057b610576366004614135565b610ed7565b005b34801561058957600080fd5b5061054d60145481565b34801561059f57600080fd5b5060025461054d565b3480156105b457600080fd5b5061057b6105c3366004614227565b61132b565b3480156105d457600080fd5b5061054d60265481565b3480156105ea57600080fd5b5061054d60295481565b34801561060057600080fd5b5061054d60285481565b34801561061657600080fd5b5061054d60215481565b34801561062c57600080fd5b5061057b61063b36600461424b565b611377565b34801561064c57600080fd5b5061052761065b366004614264565b61144c565b34801561066c57600080fd5b5061057b61067b3660046142a5565b6114f6565b34801561068c57600080fd5b506104ef61dead81565b3480156106a257600080fd5b5061057b6106b13660046142e2565b6116ba565b3480156106c257600080fd5b50610527611773565b3480156106d757600080fd5b50604051601281526020016104c6565b3480156106f357600080fd5b5061057b61070236600461424b565b61178d565b34801561071357600080fd5b5061054d60135481565b34801561072957600080fd5b5061052761073836600461402a565b6119ca565b34801561074957600080fd5b50610527610758366004614227565b6001600160a01b03166000908152602f602052604090205460ff1690565b34801561078257600080fd5b50600b546104ef906001600160a01b031681565b3480156107a257600080fd5b5061057b6107b1366004614227565b611a01565b3480156107c257600080fd5b5061057b6107d1366004614227565b611b1d565b3480156107e257600080fd5b506007546104ef906001600160a01b031681565b34801561080257600080fd5b50610527610811366004614227565b6001600160a01b03166000908152602c602052604090205460ff1690565b34801561083b57600080fd5b5061057b611b69565b34801561085057600080fd5b506016546105279060ff1681565b34801561086a57600080fd5b50610527610879366004614227565b602d6020526000908152604090205460ff1681565b34801561089a57600080fd5b5061054d60115481565b3480156108b057600080fd5b5061057b6108bf366004614324565b611c72565b3480156108d057600080fd5b5061057b6108df36600461424b565b611da0565b3480156108f057600080fd5b5061054d60235481565b34801561090657600080fd5b50601b5461052790610100900460ff1681565b34801561092557600080fd5b5061054d610934366004614227565b611e05565b34801561094557600080fd5b5061057b611e20565b34801561095a57600080fd5b506012546105279060ff1681565b34801561097457600080fd5b5061057b610983366004614359565b611e94565b34801561099457600080fd5b506008546104ef906001600160a01b031681565b3480156109b457600080fd5b5061054d60195481565b3480156109ca57600080fd5b5061057b611ee9565b3480156109df57600080fd5b5061054d601f5481565b3480156109f557600080fd5b5061057b610a04366004614227565b611f3e565b348015610a1557600080fd5b5061054d60185481565b348015610a2b57600080fd5b506005546001600160a01b03166104ef565b348015610a4957600080fd5b506009546104ef906001600160a01b031681565b348015610a6957600080fd5b5061054d60245481565b348015610a7f57600080fd5b5061057b610a8e36600461438e565b6120e8565b348015610a9f57600080fd5b506104b961212c565b348015610ab457600080fd5b5061057b610ac3366004614359565b61213b565b348015610ad457600080fd5b5061054d60225481565b348015610aea57600080fd5b5061054d602b5481565b348015610b0057600080fd5b5061054d60275481565b348015610b1657600080fd5b50610527610b2536600461402a565b6121f3565b348015610b3657600080fd5b50610527610b4536600461402a565b61228c565b348015610b5657600080fd5b506104b9612299565b348015610b6b57600080fd5b50610527610b7a366004614227565b602e6020526000908152604090205460ff1681565b348015610b9b57600080fd5b50601b546105279060ff1681565b348015610bb557600080fd5b5061057b610bc4366004614227565b612327565b348015610bd557600080fd5b5061057b610be4366004614359565b612373565b348015610bf557600080fd5b5061057b610c0436600461424b565b6123fc565b348015610c1557600080fd5b50600a546104ef906001600160a01b031681565b348015610c3557600080fd5b5061054d60175481565b348015610c4b57600080fd5b50601d546105279060ff1681565b348015610c6557600080fd5b5061054d600e5481565b348015610c7b57600080fd5b50610527610c8a36600461424b565b6124cb565b348015610c9b57600080fd5b506104b9612622565b348015610cb057600080fd5b5061054d601e5481565b348015610cc657600080fd5b5061057b610cd5366004614324565b61262f565b348015610ce657600080fd5b5061054d610cf53660046143a9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d2c57600080fd5b5061054d600f5481565b348015610d4257600080fd5b5061054d60155481565b348015610d5857600080fd5b5061057b610d673660046142e2565b612768565b348015610d7857600080fd5b5061054d600d5481565b348015610d8e57600080fd5b5061054d601a5481565b348015610da457600080fd5b5061054d60205481565b348015610dba57600080fd5b5061057b610dc9366004614227565b61281b565b348015610dda57600080fd5b5061057b612906565b348015610def57600080fd5b5061054d60255481565b348015610e0557600080fd5b5061054d60105481565b348015610e1b57600080fd5b5061057b610e2a36600461424b565b6129d9565b606060038054610e3e906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6a906143e2565b8015610eb75780601f10610e8c57610100808354040283529160200191610eb7565b820191906000526020600020905b815481529060010190602001808311610e9a57829003601f168201915b5050505050905090565b6000610ece338484612c37565b50600192915050565b6005546001600160a01b03163314610f0a5760405162461bcd60e51b8152600401610f019061441d565b60405180910390fd5b601b5460ff1615610f2d5760405162461bcd60e51b8152600401610f0190614452565b600880546001600160a01b038087166001600160a01b03199283168117909355600b805491871691909216179055610f66906001611e94565b600b54610f7d906001600160a01b03166001611e94565b60005b8251811015610ff657610fe630848381518110610f9f57610f9f61449d565b6020026020010151612710858581518110610fbc57610fbc61449d565b6020026020010151610fcd60025490565b610fd791906144c9565b610fe191906144e8565b612d5b565b610fef8161450a565b9050610f80565b5042601855600a80546001600160a01b0387166001600160a01b0319918216811790925560068054909116821790556040805163c45a015560e01b81529051829163c45a01559160048281019260209291908290030181865afa158015611061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110859190614525565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f69190614525565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190614525565b600780546001600160a01b0319166001600160a01b03929092169182179055611191906001611e94565b6007546111a8906001600160a01b03166001612eb0565b600047116112045760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f01565b600061120f30611e05565b1161126b5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f01565b60065461128b9030906001600160a01b031661128682611e05565b612c37565b6006546001600160a01b031663f305d71947306112a781611e05565b600b546040516001600160e01b031960e087901b1681526112dd93929160009182916001600160a01b0316904290600401614542565b60606040518083038185885af11580156112fb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611320919061457d565b505050505050505050565b6005546001600160a01b031633146113555760405162461bcd60e51b8152600401610f019061441d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113a15760405162461bcd60e51b8152600401610f019061441d565b670de0b6b3a76400006103e86113b660025490565b6113c19060056144c9565b6113cb91906144e8565b6113d591906144e8565b8110156114345760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610f01565b61144681670de0b6b3a76400006144c9565b600e5550565b6000611459848484612f04565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156114de5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f01565b6114eb8533858403612c37565b506001949350505050565b6005546001600160a01b031633146115205760405162461bcd60e51b8152600401610f019061441d565b60005b81518110156116b657600a5482516001600160a01b039091169083908390811061154f5761154f61449d565b60200260200101516001600160a01b031614156115ae5760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610f01565b60075482516001600160a01b03909116908390839081106115d1576115d161449d565b60200260200101516001600160a01b031614156116005760405162461bcd60e51b8152600401610f01906145ab565b6001602f60008484815181106116185761161861449d565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550603082828151811061166b5761166b61449d565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790556116af8161450a565b9050611523565b5050565b6005546001600160a01b031633146116e45760405162461bcd60e51b8152600401610f019061441d565b601f849055602083905560218290556022819055808261170485876145ed565b61170e91906145ed565b61171891906145ed565b601e8190556064101561176d5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020666565732061742031303025206f72206c65737300006044820152606401610f01565b50505050565b6000600c54436117839190614605565b600d541015905090565b6005546001600160a01b031633146117b75760405162461bcd60e51b8152600401610f019061441d565b601954601a546117c791906145ed565b42116118155760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610f01565b6103e881111561187a5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610f01565b42601a556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156118c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ed919061461c565b905060006127106118fe84846144c9565b61190891906144e8565b9050801561192957600754611929906001600160a01b031661dead83612d5b565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561197357600080fd5b505af1158015611987573d6000803e3d6000fd5b505050507f01dfa9a7a5ffd5f2630a016e754405184a66ca529745e85abd52e47e76ec70d6826040516119bc91815260200190565b60405180910390a150505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ece9185906112869086906145ed565b6005546001600160a01b03163314611a2b5760405162461bcd60e51b8152600401610f019061441d565b600a546001600160a01b0382811691161415611a895760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610f01565b6007546001600160a01b0382811691161415611ab75760405162461bcd60e51b8152600401610f01906145ab565b6001600160a01b03166000818152602f60205260408120805460ff191660019081179091556030805491820181559091527f6ff97a59c90d62cc7236ba3a37cd85351bf564556780cf8c1157a220f31f0cbb0180546001600160a01b0319169091179055565b6005546001600160a01b03163314611b475760405162461bcd60e51b8152600401610f019061441d565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611b935760405162461bcd60e51b8152600401610f019061441d565b600f54611b9f30611e05565b1015611c15576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f01565b6007805460ff60a01b1916600160a01b179055611c306139ac565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b03163314611c9c5760405162461bcd60e51b8152600401610f019061441d565b610258831015611d0a5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f01565b6103e88211158015611d1a575060015b611d845760405162461bcd60e51b815260206004820152603560248201527f4d75737420736574206175746f204c50204d61726b6574696e672070657263656044820152746e74206265747765656e20312520616e642031302560581b6064820152608401610f01565b6017929092556015556016805460ff1916911515919091179055565b6005546001600160a01b03163314611dca5760405162461bcd60e51b8152600401610f019061441d565b601b5460ff1615611ded5760405162461bcd60e51b8152600401610f0190614452565b601b805461ffff191661010117905543600d55600c55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611e4a5760405162461bcd60e51b8152600401610f019061441d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611ebe5760405162461bcd60e51b8152600401610f019061441d565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611f135760405162461bcd60e51b8152600401610f019061441d565b601d5460ff16151560011415611f2f57601d805460ff19169055565b601d805460ff19166001179055565b6005546001600160a01b03163314611f685760405162461bcd60e51b8152600401610f019061441d565b6001600160a01b0381166000908152602f602052604090205460ff16611fd05760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610f01565b60005b6030548110156116b657816001600160a01b031660308281548110611ffa57611ffa61449d565b6000918252602090912001546001600160a01b031614156120d6576030805461202590600190614605565b815481106120355761203561449d565b600091825260209091200154603080546001600160a01b0390921691839081106120615761206161449d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602f90915260409020805460ff1916905560308054806120b0576120b0614635565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806120e08161450a565b915050611fd3565b6005546001600160a01b031633146121125760405162461bcd60e51b8152600401610f019061441d565b601b80549115156101000261ff0019909216919091179055565b606060048054610e3e906143e2565b6005546001600160a01b031633146121655760405162461bcd60e51b8152600401610f019061441d565b6007546001600160a01b03838116911614156121e95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f01565b6116b68282612eb0565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122755760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f01565b6122823385858403612c37565b5060019392505050565b6000610ece338484612f04565b600480546122a6906143e2565b80601f01602080910402602001604051908101604052809291908181526020018280546122d2906143e2565b801561231f5780601f106122f45761010080835404028352916020019161231f565b820191906000526020600020905b81548152906001019060200180831161230257829003601f168201915b505050505081565b6005546001600160a01b031633146123515760405162461bcd60e51b8152600401610f019061441d565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461239d5760405162461bcd60e51b8152600401610f019061441d565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146124265760405162461bcd60e51b8152600401610f019061441d565b670de0b6b3a7640000606461243a60025490565b6124459060016144c9565b61244f91906144e8565b61245991906144e8565b8110156124b35760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610f01565b6124c581670de0b6b3a76400006144c9565b60105550565b6005546000906001600160a01b031633146124f85760405162461bcd60e51b8152600401610f019061441d565b620186a061250560025490565b6125109060016144c9565b61251a91906144e8565b8210156125875760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f01565b6103e861259360025490565b61259e9060056144c9565b6125a891906144e8565b8211156126145760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610f01565b50600f81905560015b919050565b600380546122a6906143e2565b6005546001600160a01b031633146126595760405162461bcd60e51b8152600401610f019061441d565b601e8310156126c65760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203330207365636f6e647360681b6064820152608401610f01565b671bc16d674ec8000082111580156126e5575066b1a2bc2ec500008210155b61274c5760405162461bcd60e51b815260206004820152603260248201527f4d75737420736574206175746f206275796261636b20616d6f756e74206265746044820152710eecacadc405c606a40c2dcc84064408aa8960731b6064820152608401610f01565b6013929092556011556012805460ff1916911515919091179055565b6005546001600160a01b031633146127925760405162461bcd60e51b8152600401610f019061441d565b602484905560258390556026829055602781905580826127b285876145ed565b6127bc91906145ed565b6127c691906145ed565b60238190556064101561176d5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020666565732061742031303025206f72206c65737300006044820152606401610f01565b6005546001600160a01b031633146128455760405162461bcd60e51b8152600401610f019061441d565b6001600160a01b0381166128aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f01565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146129305760405162461bcd60e51b8152600401610f019061441d565b601b5460ff16156129975760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610f01565b604051600090339047908381818185875af1925050503d806000811461176d576040519150601f19603f3d011682016040523d82523d6000602084013e61176d565b6005546001600160a01b03163314612a035760405162461bcd60e51b8152600401610f019061441d565b678ac7230489e80000811115612a915760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610f01565b600060025b604051908082528060200260200182016040528015612abf578160200160208202803683370190505b509050600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b399190614525565b81600081518110612b4c57612b4c61449d565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612b8057612b8061449d565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490612bc890600090869061dead90429060040161468f565b6000604051808303818588803b158015612be157600080fd5b505af1158015612bf5573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051612c2b91815260200190565b60405180910390a15050565b6001600160a01b038316612c995760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f01565b6001600160a01b038216612cfa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f01565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612d815760405162461bcd60e51b8152600401610f01906146c4565b6001600160a01b038216612da75760405162461bcd60e51b8152600401610f0190614709565b6001600160a01b03831660009081526020819052604090205481811015612e1f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f01565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e569084906145ed565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ea291815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612f2a5760405162461bcd60e51b8152600401610f01906146c4565b6001600160a01b038216612f505760405162461bcd60e51b8152600401610f0190614709565b6001600160a01b0382166000908152602f602052604090205460ff1615612fb35760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610f01565b326000908152602f602052604090205460ff161561300d5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610f01565b806130235761301e83836000612d5b565b505050565b601b5460ff166130b1576001600160a01b0383166000908152602c602052604090205460ff168061306c57506001600160a01b0382166000908152602c602052604090205460ff165b6130b15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f01565b6005546001600160a01b038481169116148015906130dd57506005546001600160a01b03838116911614155b80156130f157506001600160a01b03821615155b801561310857506001600160a01b03821661dead14155b801561311e5750600754600160a01b900460ff16155b801561314357506001600160a01b0382166000908152602c602052604090205460ff16155b801561316857506001600160a01b0383166000908152602c602052604090205460ff16155b156134b757601d5460ff1615613281576006546001600160a01b038381169116148015906131a457506007546001600160a01b03838116911614155b15613281576131b4600143614605565b326000908152601c60205260409020541080156131f257506131d7600143614605565b6001600160a01b0383166000908152601c6020526040902054105b61325c5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f01565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff1680156132c257506001600160a01b0382166000908152602d602052604090205460ff16155b1561338e57600e5481111561332f5760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610f01565b60105461333b83611e05565b61334590836145ed565b11156133895760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610f01565b6134b7565b6001600160a01b0382166000908152602e602052604090205460ff1680156133cf57506001600160a01b0383166000908152602d602052604090205460ff16155b1561343d57600e548111156133895760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610f01565b6001600160a01b0382166000908152602d602052604090205460ff166134b75760105461346983611e05565b61347390836145ed565b11156134b75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610f01565b60006134c230611e05565b600f54909150811080159081906134e05750601b54610100900460ff165b80156134f65750600754600160a01b900460ff16155b801561351b57506001600160a01b0385166000908152602e602052604090205460ff16155b801561354057506001600160a01b0385166000908152602c602052604090205460ff16155b801561356557506001600160a01b0384166000908152602c602052604090205460ff16155b15613593576007805460ff60a01b1916600160a01b1790556135856139ac565b6007805460ff60a01b191690555b600754600160a01b900460ff161580156135c557506001600160a01b0384166000908152602e602052604090205460ff165b80156135d3575060165460ff165b80156135ee57506017546018546135ea91906145ed565b4210155b801561361357506001600160a01b0385166000908152602c602052604090205460ff16155b1561362057613620613c61565b600754600160a01b900460ff1615801561365257506001600160a01b0384166000908152602e602052604090205460ff165b8015613660575060125460ff165b801561367b575060135460145461367791906145ed565b4210155b80156136a057506001600160a01b0385166000908152602c602052604090205460ff16155b80156136ae57506011544710155b156136be576136be601154613db4565b6007546001600160a01b0386166000908152602c602052604090205460ff600160a01b90920482161591168061370c57506001600160a01b0385166000908152602c602052604090205460ff165b15613715575060005b6000811561399857613725611773565b801561374957506001600160a01b0387166000908152602e602052604090205460ff165b1561382e57606461375b8660636144c9565b61376591906144e8565b90506023546025548261377891906144c9565b61378291906144e8565b6029600082825461379391906145ed565b90915550506023546026546137a890836144c9565b6137b291906144e8565b602a60008282546137c391906145ed565b90915550506023546024546137d890836144c9565b6137e291906144e8565b602860008282546137f391906145ed565b909155505060235460275461380890836144c9565b61381291906144e8565b602b600082825461382391906145ed565b9091555061397a9050565b6001600160a01b0386166000908152602e602052604090205460ff16801561385857506000602354115b1561386d5760646023548661375b91906144c9565b6001600160a01b0387166000908152602e602052604090205460ff16801561389757506000601e54115b1561397a576064601e54866138ac91906144c9565b6138b691906144e8565b9050601e54602054826138c991906144c9565b6138d391906144e8565b602960008282546138e491906145ed565b9091555050601e546021546138f990836144c9565b61390391906144e8565b602a600082825461391491906145ed565b9091555050601e54601f5461392990836144c9565b61393391906144e8565b6028600082825461394491906145ed565b9091555050601e5460225461395990836144c9565b61396391906144e8565b602b600082825461397491906145ed565b90915550505b801561398b5761398b873083612d5b565b6139958186614605565b94505b6139a3878787612d5b565b50505050505050565b60006139b730611e05565b90506000602b54602a546028546029546139d191906145ed565b6139db91906145ed565b6139e591906145ed565b905060008215806139f4575081155b156139fe57505050565b600f54613a0c9060146144c9565b831115613a2457600f54613a219060146144c9565b92505b600060028360295486613a3791906144c9565b613a4191906144e8565b613a4b91906144e8565b90506000613a598286614605565b905047613a6582613dc1565b6000613a718247614605565b905060006002602954613a8491906144e8565b613a8e9088614605565b602854613a9b90846144c9565b613aa591906144e8565b905060006002602954613ab891906144e8565b613ac29089614605565b602a54613acf90856144c9565b613ad991906144e8565b905060006002602954613aec91906144e8565b613af6908a614605565b602b54613b0390866144c9565b613b0d91906144e8565b905060008183613b1d8688614605565b613b279190614605565b613b319190614605565b600060298190556028819055602a819055602b8190556009546040519293506001600160a01b031691849181818185875af1925050503d8060008114613b93576040519150601f19603f3d011682016040523d82523d6000602084013e613b98565b606091505b5050600854604051919a506001600160a01b0316908590600081818185875af1925050503d8060008114613be8576040519150601f19603f3d011682016040523d82523d6000602084013e613bed565b606091505b50909950508715801590613c015750600081115b15613c5457613c108882613f1b565b602954604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5050505050505050505050565b426018556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cd4919061461c565b9050600061271060155483613ce991906144c9565b613cf391906144e8565b90508015613d1457600754613d14906001600160a01b031661dead83612d5b565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015613d5e57600080fd5b505af1158015613d72573d6000803e3d6000fd5b505050507f6f57447c7d0d492231a83fb5442fa4aab5203af719a9a9ebf5f93ff4dfaa168682604051613da791815260200190565b60405180910390a1505050565b4260145560006002612a96565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613df657613df661449d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e739190614525565b81600181518110613e8657613e8661449d565b6001600160a01b039283166020918202929092010152600654613eac9130911684612c37565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613ee590859060009086903090429060040161474c565b600060405180830381600087803b158015613eff57600080fd5b505af1158015613f13573d6000803e3d6000fd5b505050505050565b600654613f339030906001600160a01b031684612c37565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592613f739230928992600092839216904290600401614542565b60606040518083038185885af1158015613f91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613fb6919061457d565b5050505050565b600060208083528351808285015260005b81811015613fea57858101830151858201604001528201613fce565b81811115613ffc576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461402757600080fd5b50565b6000806040838503121561403d57600080fd5b823561404881614012565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561409557614095614056565b604052919050565b600067ffffffffffffffff8211156140b7576140b7614056565b5060051b60200190565b600082601f8301126140d257600080fd5b813560206140e76140e28361409d565b61406c565b82815260059290921b8401810191818101908684111561410657600080fd5b8286015b8481101561412a57803561411d81614012565b835291830191830161410a565b509695505050505050565b600080600080600060a0868803121561414d57600080fd5b853561415881614012565b945060208681013561416981614012565b9450604087013561417981614012565b9350606087013567ffffffffffffffff8082111561419657600080fd5b6141a28a838b016140c1565b945060808901359150808211156141b857600080fd5b508701601f810189136141ca57600080fd5b80356141d86140e28261409d565b81815260059190911b8201830190838101908b8311156141f757600080fd5b928401925b82841015614215578335825292840192908401906141fc565b80955050505050509295509295909350565b60006020828403121561423957600080fd5b813561424481614012565b9392505050565b60006020828403121561425d57600080fd5b5035919050565b60008060006060848603121561427957600080fd5b833561428481614012565b9250602084013561429481614012565b929592945050506040919091013590565b6000602082840312156142b757600080fd5b813567ffffffffffffffff8111156142ce57600080fd5b6142da848285016140c1565b949350505050565b600080600080608085870312156142f857600080fd5b5050823594602084013594506040840135936060013592509050565b8035801515811461261d57600080fd5b60008060006060848603121561433957600080fd5b833592506020840135915061435060408501614314565b90509250925092565b6000806040838503121561436c57600080fd5b823561437781614012565b915061438560208401614314565b90509250929050565b6000602082840312156143a057600080fd5b61424482614314565b600080604083850312156143bc57600080fd5b82356143c781614012565b915060208301356143d781614012565b809150509250929050565b600181811c908216806143f657607f821691505b6020821081141561441757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156144e3576144e36144b3565b500290565b60008261450557634e487b7160e01b600052601260045260246000fd5b500490565b600060001982141561451e5761451e6144b3565b5060010190565b60006020828403121561453757600080fd5b815161424481614012565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561459257600080fd5b8351925060208401519150604084015190509250925092565b60208082526022908201527f57652063616e206e6f7420626c61636b6c697374207061697220616464726573604082015261399760f11b606082015260800190565b60008219821115614600576146006144b3565b500190565b600082821015614617576146176144b3565b500390565b60006020828403121561462e57600080fd5b5051919050565b634e487b7160e01b600052603160045260246000fd5b600081518084526020808501945080840160005b838110156146845781516001600160a01b03168752958201959082019060010161465f565b509495945050505050565b8481526080602082015260006146a8608083018661464b565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a06040820152600061476b60a083018661464b565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220ce67b8081a45f29ae23fec54bd20890fb08986710055d6692669874aa03610ee64736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106104985760003560e01c8063764c4ce511610260578063c18bc19511610144578063e2f45605116100c1578063f11a24d311610085578063f11a24d314610d98578063f2fde38b14610dae578063f5648a4f14610dce578063f637434214610de3578063f8b45b0514610df9578063fc155d1d14610e0f57600080fd5b8063e2f4560514610d20578063e513e45a14610d36578063e7ad9fcd14610d4c578063ee40166e14610d6c578063ee9623b914610d8257600080fd5b8063d257b34f11610108578063d257b34f14610c6f578063d28d885214610c8f578063d85ba06314610ca4578063db4e7f5414610cba578063dd62ed3e14610cda57600080fd5b8063c18bc19514610be9578063c480b4c614610c09578063c7ff080514610c29578063c876d0b914610c3f578063cf46f24c14610c5957600080fd5b80639a7a23d6116101dd578063a9059cbb116101a1578063a9059cbb14610b2a578063b09f126614610b4a578063b62496f514610b5f578063bbc0c74214610b8f578063bff7816914610ba9578063c024666814610bc957600080fd5b80639a7a23d614610aa85780639c3b4fdc14610ac85780639fccce3214610ade578063a0d82dc514610af4578063a457c2d714610b0a57600080fd5b80638da5cb5b116102245780638da5cb5b14610a1f5780638ea5220f14610a3d5780639213691314610a5d578063924de9b714610a7357806395d89b4114610a9357600080fd5b8063764c4ce5146109a8578063781e812f146109be5780637bce5a04146109d35780637ded4d6a146109e95780638a0de19f14610a0957600080fd5b8063338f6d6c116103875780635f559fba116103045780636ddd1713116102c85780636ddd1713146108fa57806370a0823114610919578063715018a61461093957806375552ea81461094e5780637571336a1461096857806375f0a8741461098857600080fd5b80635f559fba1461085e57806362a7b83b1461088e578063689b08ca146108a457806368a240f9146108c45780636a486a8e146108e457600080fd5b806344f530f91161034b57806344f530f9146107b6578063452ed4f1146107d65780634fbee193146107f657806351f205e41461082f578063551b4ea61461084457600080fd5b8063338f6d6c14610707578063395093511461071d5780633bbac5791461073d5780633fd16d13146107765780634303443d1461079657600080fd5b80631f3fed8f1161041557806327c8f835116103d957806327c8f835146106805780632e6ed7ef1461069657806330a902e2146106b6578063313ce567146106cb57806331dbc932146106e757600080fd5b80631f3fed8f146105f45780631fe70a981461060a578063203e727e1461062057806323b872dd14610640578063256bf92a1461066057600080fd5b8063161c3d931161045c578063161c3d931461057d57806318160ddd146105935780631816467f146105a85780631a221dbb146105c85780631a8145bb146105de57600080fd5b806306fdde03146104a45780630758d924146104cf578063095ea7b3146105075780630b166d501461053757806314d580e71461055b57600080fd5b3661049f57005b600080fd5b3480156104b057600080fd5b506104b9610e2f565b6040516104c69190613fbd565b60405180910390f35b3480156104db57600080fd5b506006546104ef906001600160a01b031681565b6040516001600160a01b0390911681526020016104c6565b34801561051357600080fd5b5061052761052236600461402a565b610ec1565b60405190151581526020016104c6565b34801561054357600080fd5b5061054d602a5481565b6040519081526020016104c6565b34801561056757600080fd5b5061057b610576366004614135565b610ed7565b005b34801561058957600080fd5b5061054d60145481565b34801561059f57600080fd5b5060025461054d565b3480156105b457600080fd5b5061057b6105c3366004614227565b61132b565b3480156105d457600080fd5b5061054d60265481565b3480156105ea57600080fd5b5061054d60295481565b34801561060057600080fd5b5061054d60285481565b34801561061657600080fd5b5061054d60215481565b34801561062c57600080fd5b5061057b61063b36600461424b565b611377565b34801561064c57600080fd5b5061052761065b366004614264565b61144c565b34801561066c57600080fd5b5061057b61067b3660046142a5565b6114f6565b34801561068c57600080fd5b506104ef61dead81565b3480156106a257600080fd5b5061057b6106b13660046142e2565b6116ba565b3480156106c257600080fd5b50610527611773565b3480156106d757600080fd5b50604051601281526020016104c6565b3480156106f357600080fd5b5061057b61070236600461424b565b61178d565b34801561071357600080fd5b5061054d60135481565b34801561072957600080fd5b5061052761073836600461402a565b6119ca565b34801561074957600080fd5b50610527610758366004614227565b6001600160a01b03166000908152602f602052604090205460ff1690565b34801561078257600080fd5b50600b546104ef906001600160a01b031681565b3480156107a257600080fd5b5061057b6107b1366004614227565b611a01565b3480156107c257600080fd5b5061057b6107d1366004614227565b611b1d565b3480156107e257600080fd5b506007546104ef906001600160a01b031681565b34801561080257600080fd5b50610527610811366004614227565b6001600160a01b03166000908152602c602052604090205460ff1690565b34801561083b57600080fd5b5061057b611b69565b34801561085057600080fd5b506016546105279060ff1681565b34801561086a57600080fd5b50610527610879366004614227565b602d6020526000908152604090205460ff1681565b34801561089a57600080fd5b5061054d60115481565b3480156108b057600080fd5b5061057b6108bf366004614324565b611c72565b3480156108d057600080fd5b5061057b6108df36600461424b565b611da0565b3480156108f057600080fd5b5061054d60235481565b34801561090657600080fd5b50601b5461052790610100900460ff1681565b34801561092557600080fd5b5061054d610934366004614227565b611e05565b34801561094557600080fd5b5061057b611e20565b34801561095a57600080fd5b506012546105279060ff1681565b34801561097457600080fd5b5061057b610983366004614359565b611e94565b34801561099457600080fd5b506008546104ef906001600160a01b031681565b3480156109b457600080fd5b5061054d60195481565b3480156109ca57600080fd5b5061057b611ee9565b3480156109df57600080fd5b5061054d601f5481565b3480156109f557600080fd5b5061057b610a04366004614227565b611f3e565b348015610a1557600080fd5b5061054d60185481565b348015610a2b57600080fd5b506005546001600160a01b03166104ef565b348015610a4957600080fd5b506009546104ef906001600160a01b031681565b348015610a6957600080fd5b5061054d60245481565b348015610a7f57600080fd5b5061057b610a8e36600461438e565b6120e8565b348015610a9f57600080fd5b506104b961212c565b348015610ab457600080fd5b5061057b610ac3366004614359565b61213b565b348015610ad457600080fd5b5061054d60225481565b348015610aea57600080fd5b5061054d602b5481565b348015610b0057600080fd5b5061054d60275481565b348015610b1657600080fd5b50610527610b2536600461402a565b6121f3565b348015610b3657600080fd5b50610527610b4536600461402a565b61228c565b348015610b5657600080fd5b506104b9612299565b348015610b6b57600080fd5b50610527610b7a366004614227565b602e6020526000908152604090205460ff1681565b348015610b9b57600080fd5b50601b546105279060ff1681565b348015610bb557600080fd5b5061057b610bc4366004614227565b612327565b348015610bd557600080fd5b5061057b610be4366004614359565b612373565b348015610bf557600080fd5b5061057b610c0436600461424b565b6123fc565b348015610c1557600080fd5b50600a546104ef906001600160a01b031681565b348015610c3557600080fd5b5061054d60175481565b348015610c4b57600080fd5b50601d546105279060ff1681565b348015610c6557600080fd5b5061054d600e5481565b348015610c7b57600080fd5b50610527610c8a36600461424b565b6124cb565b348015610c9b57600080fd5b506104b9612622565b348015610cb057600080fd5b5061054d601e5481565b348015610cc657600080fd5b5061057b610cd5366004614324565b61262f565b348015610ce657600080fd5b5061054d610cf53660046143a9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d2c57600080fd5b5061054d600f5481565b348015610d4257600080fd5b5061054d60155481565b348015610d5857600080fd5b5061057b610d673660046142e2565b612768565b348015610d7857600080fd5b5061054d600d5481565b348015610d8e57600080fd5b5061054d601a5481565b348015610da457600080fd5b5061054d60205481565b348015610dba57600080fd5b5061057b610dc9366004614227565b61281b565b348015610dda57600080fd5b5061057b612906565b348015610def57600080fd5b5061054d60255481565b348015610e0557600080fd5b5061054d60105481565b348015610e1b57600080fd5b5061057b610e2a36600461424b565b6129d9565b606060038054610e3e906143e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6a906143e2565b8015610eb75780601f10610e8c57610100808354040283529160200191610eb7565b820191906000526020600020905b815481529060010190602001808311610e9a57829003601f168201915b5050505050905090565b6000610ece338484612c37565b50600192915050565b6005546001600160a01b03163314610f0a5760405162461bcd60e51b8152600401610f019061441d565b60405180910390fd5b601b5460ff1615610f2d5760405162461bcd60e51b8152600401610f0190614452565b600880546001600160a01b038087166001600160a01b03199283168117909355600b805491871691909216179055610f66906001611e94565b600b54610f7d906001600160a01b03166001611e94565b60005b8251811015610ff657610fe630848381518110610f9f57610f9f61449d565b6020026020010151612710858581518110610fbc57610fbc61449d565b6020026020010151610fcd60025490565b610fd791906144c9565b610fe191906144e8565b612d5b565b610fef8161450a565b9050610f80565b5042601855600a80546001600160a01b0387166001600160a01b0319918216811790925560068054909116821790556040805163c45a015560e01b81529051829163c45a01559160048281019260209291908290030181865afa158015611061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110859190614525565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f69190614525565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190614525565b600780546001600160a01b0319166001600160a01b03929092169182179055611191906001611e94565b6007546111a8906001600160a01b03166001612eb0565b600047116112045760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f01565b600061120f30611e05565b1161126b5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f01565b60065461128b9030906001600160a01b031661128682611e05565b612c37565b6006546001600160a01b031663f305d71947306112a781611e05565b600b546040516001600160e01b031960e087901b1681526112dd93929160009182916001600160a01b0316904290600401614542565b60606040518083038185885af11580156112fb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611320919061457d565b505050505050505050565b6005546001600160a01b031633146113555760405162461bcd60e51b8152600401610f019061441d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113a15760405162461bcd60e51b8152600401610f019061441d565b670de0b6b3a76400006103e86113b660025490565b6113c19060056144c9565b6113cb91906144e8565b6113d591906144e8565b8110156114345760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610f01565b61144681670de0b6b3a76400006144c9565b600e5550565b6000611459848484612f04565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156114de5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f01565b6114eb8533858403612c37565b506001949350505050565b6005546001600160a01b031633146115205760405162461bcd60e51b8152600401610f019061441d565b60005b81518110156116b657600a5482516001600160a01b039091169083908390811061154f5761154f61449d565b60200260200101516001600160a01b031614156115ae5760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610f01565b60075482516001600160a01b03909116908390839081106115d1576115d161449d565b60200260200101516001600160a01b031614156116005760405162461bcd60e51b8152600401610f01906145ab565b6001602f60008484815181106116185761161861449d565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550603082828151811061166b5761166b61449d565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790556116af8161450a565b9050611523565b5050565b6005546001600160a01b031633146116e45760405162461bcd60e51b8152600401610f019061441d565b601f849055602083905560218290556022819055808261170485876145ed565b61170e91906145ed565b61171891906145ed565b601e8190556064101561176d5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020666565732061742031303025206f72206c65737300006044820152606401610f01565b50505050565b6000600c54436117839190614605565b600d541015905090565b6005546001600160a01b031633146117b75760405162461bcd60e51b8152600401610f019061441d565b601954601a546117c791906145ed565b42116118155760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610f01565b6103e881111561187a5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610f01565b42601a556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156118c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ed919061461c565b905060006127106118fe84846144c9565b61190891906144e8565b9050801561192957600754611929906001600160a01b031661dead83612d5b565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561197357600080fd5b505af1158015611987573d6000803e3d6000fd5b505050507f01dfa9a7a5ffd5f2630a016e754405184a66ca529745e85abd52e47e76ec70d6826040516119bc91815260200190565b60405180910390a150505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ece9185906112869086906145ed565b6005546001600160a01b03163314611a2b5760405162461bcd60e51b8152600401610f019061441d565b600a546001600160a01b0382811691161415611a895760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610f01565b6007546001600160a01b0382811691161415611ab75760405162461bcd60e51b8152600401610f01906145ab565b6001600160a01b03166000818152602f60205260408120805460ff191660019081179091556030805491820181559091527f6ff97a59c90d62cc7236ba3a37cd85351bf564556780cf8c1157a220f31f0cbb0180546001600160a01b0319169091179055565b6005546001600160a01b03163314611b475760405162461bcd60e51b8152600401610f019061441d565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611b935760405162461bcd60e51b8152600401610f019061441d565b600f54611b9f30611e05565b1015611c15576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f01565b6007805460ff60a01b1916600160a01b179055611c306139ac565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b03163314611c9c5760405162461bcd60e51b8152600401610f019061441d565b610258831015611d0a5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f01565b6103e88211158015611d1a575060015b611d845760405162461bcd60e51b815260206004820152603560248201527f4d75737420736574206175746f204c50204d61726b6574696e672070657263656044820152746e74206265747765656e20312520616e642031302560581b6064820152608401610f01565b6017929092556015556016805460ff1916911515919091179055565b6005546001600160a01b03163314611dca5760405162461bcd60e51b8152600401610f019061441d565b601b5460ff1615611ded5760405162461bcd60e51b8152600401610f0190614452565b601b805461ffff191661010117905543600d55600c55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611e4a5760405162461bcd60e51b8152600401610f019061441d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611ebe5760405162461bcd60e51b8152600401610f019061441d565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611f135760405162461bcd60e51b8152600401610f019061441d565b601d5460ff16151560011415611f2f57601d805460ff19169055565b601d805460ff19166001179055565b6005546001600160a01b03163314611f685760405162461bcd60e51b8152600401610f019061441d565b6001600160a01b0381166000908152602f602052604090205460ff16611fd05760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610f01565b60005b6030548110156116b657816001600160a01b031660308281548110611ffa57611ffa61449d565b6000918252602090912001546001600160a01b031614156120d6576030805461202590600190614605565b815481106120355761203561449d565b600091825260209091200154603080546001600160a01b0390921691839081106120615761206161449d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602f90915260409020805460ff1916905560308054806120b0576120b0614635565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806120e08161450a565b915050611fd3565b6005546001600160a01b031633146121125760405162461bcd60e51b8152600401610f019061441d565b601b80549115156101000261ff0019909216919091179055565b606060048054610e3e906143e2565b6005546001600160a01b031633146121655760405162461bcd60e51b8152600401610f019061441d565b6007546001600160a01b03838116911614156121e95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f01565b6116b68282612eb0565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122755760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f01565b6122823385858403612c37565b5060019392505050565b6000610ece338484612f04565b600480546122a6906143e2565b80601f01602080910402602001604051908101604052809291908181526020018280546122d2906143e2565b801561231f5780601f106122f45761010080835404028352916020019161231f565b820191906000526020600020905b81548152906001019060200180831161230257829003601f168201915b505050505081565b6005546001600160a01b031633146123515760405162461bcd60e51b8152600401610f019061441d565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461239d5760405162461bcd60e51b8152600401610f019061441d565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146124265760405162461bcd60e51b8152600401610f019061441d565b670de0b6b3a7640000606461243a60025490565b6124459060016144c9565b61244f91906144e8565b61245991906144e8565b8110156124b35760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610f01565b6124c581670de0b6b3a76400006144c9565b60105550565b6005546000906001600160a01b031633146124f85760405162461bcd60e51b8152600401610f019061441d565b620186a061250560025490565b6125109060016144c9565b61251a91906144e8565b8210156125875760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f01565b6103e861259360025490565b61259e9060056144c9565b6125a891906144e8565b8211156126145760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610f01565b50600f81905560015b919050565b600380546122a6906143e2565b6005546001600160a01b031633146126595760405162461bcd60e51b8152600401610f019061441d565b601e8310156126c65760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203330207365636f6e647360681b6064820152608401610f01565b671bc16d674ec8000082111580156126e5575066b1a2bc2ec500008210155b61274c5760405162461bcd60e51b815260206004820152603260248201527f4d75737420736574206175746f206275796261636b20616d6f756e74206265746044820152710eecacadc405c606a40c2dcc84064408aa8960731b6064820152608401610f01565b6013929092556011556012805460ff1916911515919091179055565b6005546001600160a01b031633146127925760405162461bcd60e51b8152600401610f019061441d565b602484905560258390556026829055602781905580826127b285876145ed565b6127bc91906145ed565b6127c691906145ed565b60238190556064101561176d5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020666565732061742031303025206f72206c65737300006044820152606401610f01565b6005546001600160a01b031633146128455760405162461bcd60e51b8152600401610f019061441d565b6001600160a01b0381166128aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f01565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146129305760405162461bcd60e51b8152600401610f019061441d565b601b5460ff16156129975760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610f01565b604051600090339047908381818185875af1925050503d806000811461176d576040519150601f19603f3d011682016040523d82523d6000602084013e61176d565b6005546001600160a01b03163314612a035760405162461bcd60e51b8152600401610f019061441d565b678ac7230489e80000811115612a915760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610f01565b600060025b604051908082528060200260200182016040528015612abf578160200160208202803683370190505b509050600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b399190614525565b81600081518110612b4c57612b4c61449d565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612b8057612b8061449d565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490612bc890600090869061dead90429060040161468f565b6000604051808303818588803b158015612be157600080fd5b505af1158015612bf5573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051612c2b91815260200190565b60405180910390a15050565b6001600160a01b038316612c995760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f01565b6001600160a01b038216612cfa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f01565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612d815760405162461bcd60e51b8152600401610f01906146c4565b6001600160a01b038216612da75760405162461bcd60e51b8152600401610f0190614709565b6001600160a01b03831660009081526020819052604090205481811015612e1f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f01565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e569084906145ed565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ea291815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612f2a5760405162461bcd60e51b8152600401610f01906146c4565b6001600160a01b038216612f505760405162461bcd60e51b8152600401610f0190614709565b6001600160a01b0382166000908152602f602052604090205460ff1615612fb35760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610f01565b326000908152602f602052604090205460ff161561300d5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610f01565b806130235761301e83836000612d5b565b505050565b601b5460ff166130b1576001600160a01b0383166000908152602c602052604090205460ff168061306c57506001600160a01b0382166000908152602c602052604090205460ff165b6130b15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f01565b6005546001600160a01b038481169116148015906130dd57506005546001600160a01b03838116911614155b80156130f157506001600160a01b03821615155b801561310857506001600160a01b03821661dead14155b801561311e5750600754600160a01b900460ff16155b801561314357506001600160a01b0382166000908152602c602052604090205460ff16155b801561316857506001600160a01b0383166000908152602c602052604090205460ff16155b156134b757601d5460ff1615613281576006546001600160a01b038381169116148015906131a457506007546001600160a01b03838116911614155b15613281576131b4600143614605565b326000908152601c60205260409020541080156131f257506131d7600143614605565b6001600160a01b0383166000908152601c6020526040902054105b61325c5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f01565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff1680156132c257506001600160a01b0382166000908152602d602052604090205460ff16155b1561338e57600e5481111561332f5760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610f01565b60105461333b83611e05565b61334590836145ed565b11156133895760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610f01565b6134b7565b6001600160a01b0382166000908152602e602052604090205460ff1680156133cf57506001600160a01b0383166000908152602d602052604090205460ff16155b1561343d57600e548111156133895760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610f01565b6001600160a01b0382166000908152602d602052604090205460ff166134b75760105461346983611e05565b61347390836145ed565b11156134b75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610f01565b60006134c230611e05565b600f54909150811080159081906134e05750601b54610100900460ff165b80156134f65750600754600160a01b900460ff16155b801561351b57506001600160a01b0385166000908152602e602052604090205460ff16155b801561354057506001600160a01b0385166000908152602c602052604090205460ff16155b801561356557506001600160a01b0384166000908152602c602052604090205460ff16155b15613593576007805460ff60a01b1916600160a01b1790556135856139ac565b6007805460ff60a01b191690555b600754600160a01b900460ff161580156135c557506001600160a01b0384166000908152602e602052604090205460ff165b80156135d3575060165460ff165b80156135ee57506017546018546135ea91906145ed565b4210155b801561361357506001600160a01b0385166000908152602c602052604090205460ff16155b1561362057613620613c61565b600754600160a01b900460ff1615801561365257506001600160a01b0384166000908152602e602052604090205460ff165b8015613660575060125460ff165b801561367b575060135460145461367791906145ed565b4210155b80156136a057506001600160a01b0385166000908152602c602052604090205460ff16155b80156136ae57506011544710155b156136be576136be601154613db4565b6007546001600160a01b0386166000908152602c602052604090205460ff600160a01b90920482161591168061370c57506001600160a01b0385166000908152602c602052604090205460ff165b15613715575060005b6000811561399857613725611773565b801561374957506001600160a01b0387166000908152602e602052604090205460ff165b1561382e57606461375b8660636144c9565b61376591906144e8565b90506023546025548261377891906144c9565b61378291906144e8565b6029600082825461379391906145ed565b90915550506023546026546137a890836144c9565b6137b291906144e8565b602a60008282546137c391906145ed565b90915550506023546024546137d890836144c9565b6137e291906144e8565b602860008282546137f391906145ed565b909155505060235460275461380890836144c9565b61381291906144e8565b602b600082825461382391906145ed565b9091555061397a9050565b6001600160a01b0386166000908152602e602052604090205460ff16801561385857506000602354115b1561386d5760646023548661375b91906144c9565b6001600160a01b0387166000908152602e602052604090205460ff16801561389757506000601e54115b1561397a576064601e54866138ac91906144c9565b6138b691906144e8565b9050601e54602054826138c991906144c9565b6138d391906144e8565b602960008282546138e491906145ed565b9091555050601e546021546138f990836144c9565b61390391906144e8565b602a600082825461391491906145ed565b9091555050601e54601f5461392990836144c9565b61393391906144e8565b6028600082825461394491906145ed565b9091555050601e5460225461395990836144c9565b61396391906144e8565b602b600082825461397491906145ed565b90915550505b801561398b5761398b873083612d5b565b6139958186614605565b94505b6139a3878787612d5b565b50505050505050565b60006139b730611e05565b90506000602b54602a546028546029546139d191906145ed565b6139db91906145ed565b6139e591906145ed565b905060008215806139f4575081155b156139fe57505050565b600f54613a0c9060146144c9565b831115613a2457600f54613a219060146144c9565b92505b600060028360295486613a3791906144c9565b613a4191906144e8565b613a4b91906144e8565b90506000613a598286614605565b905047613a6582613dc1565b6000613a718247614605565b905060006002602954613a8491906144e8565b613a8e9088614605565b602854613a9b90846144c9565b613aa591906144e8565b905060006002602954613ab891906144e8565b613ac29089614605565b602a54613acf90856144c9565b613ad991906144e8565b905060006002602954613aec91906144e8565b613af6908a614605565b602b54613b0390866144c9565b613b0d91906144e8565b905060008183613b1d8688614605565b613b279190614605565b613b319190614605565b600060298190556028819055602a819055602b8190556009546040519293506001600160a01b031691849181818185875af1925050503d8060008114613b93576040519150601f19603f3d011682016040523d82523d6000602084013e613b98565b606091505b5050600854604051919a506001600160a01b0316908590600081818185875af1925050503d8060008114613be8576040519150601f19603f3d011682016040523d82523d6000602084013e613bed565b606091505b50909950508715801590613c015750600081115b15613c5457613c108882613f1b565b602954604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5050505050505050505050565b426018556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cd4919061461c565b9050600061271060155483613ce991906144c9565b613cf391906144e8565b90508015613d1457600754613d14906001600160a01b031661dead83612d5b565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015613d5e57600080fd5b505af1158015613d72573d6000803e3d6000fd5b505050507f6f57447c7d0d492231a83fb5442fa4aab5203af719a9a9ebf5f93ff4dfaa168682604051613da791815260200190565b60405180910390a1505050565b4260145560006002612a96565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613df657613df661449d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e739190614525565b81600181518110613e8657613e8661449d565b6001600160a01b039283166020918202929092010152600654613eac9130911684612c37565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613ee590859060009086903090429060040161474c565b600060405180830381600087803b158015613eff57600080fd5b505af1158015613f13573d6000803e3d6000fd5b505050505050565b600654613f339030906001600160a01b031684612c37565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592613f739230928992600092839216904290600401614542565b60606040518083038185885af1158015613f91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613fb6919061457d565b5050505050565b600060208083528351808285015260005b81811015613fea57858101830151858201604001528201613fce565b81811115613ffc576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461402757600080fd5b50565b6000806040838503121561403d57600080fd5b823561404881614012565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561409557614095614056565b604052919050565b600067ffffffffffffffff8211156140b7576140b7614056565b5060051b60200190565b600082601f8301126140d257600080fd5b813560206140e76140e28361409d565b61406c565b82815260059290921b8401810191818101908684111561410657600080fd5b8286015b8481101561412a57803561411d81614012565b835291830191830161410a565b509695505050505050565b600080600080600060a0868803121561414d57600080fd5b853561415881614012565b945060208681013561416981614012565b9450604087013561417981614012565b9350606087013567ffffffffffffffff8082111561419657600080fd5b6141a28a838b016140c1565b945060808901359150808211156141b857600080fd5b508701601f810189136141ca57600080fd5b80356141d86140e28261409d565b81815260059190911b8201830190838101908b8311156141f757600080fd5b928401925b82841015614215578335825292840192908401906141fc565b80955050505050509295509295909350565b60006020828403121561423957600080fd5b813561424481614012565b9392505050565b60006020828403121561425d57600080fd5b5035919050565b60008060006060848603121561427957600080fd5b833561428481614012565b9250602084013561429481614012565b929592945050506040919091013590565b6000602082840312156142b757600080fd5b813567ffffffffffffffff8111156142ce57600080fd5b6142da848285016140c1565b949350505050565b600080600080608085870312156142f857600080fd5b5050823594602084013594506040840135936060013592509050565b8035801515811461261d57600080fd5b60008060006060848603121561433957600080fd5b833592506020840135915061435060408501614314565b90509250925092565b6000806040838503121561436c57600080fd5b823561437781614012565b915061438560208401614314565b90509250929050565b6000602082840312156143a057600080fd5b61424482614314565b600080604083850312156143bc57600080fd5b82356143c781614012565b915060208301356143d781614012565b809150509250929050565b600181811c908216806143f657607f821691505b6020821081141561441757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156144e3576144e36144b3565b500290565b60008261450557634e487b7160e01b600052601260045260246000fd5b500490565b600060001982141561451e5761451e6144b3565b5060010190565b60006020828403121561453757600080fd5b815161424481614012565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561459257600080fd5b8351925060208401519150604084015190509250925092565b60208082526022908201527f57652063616e206e6f7420626c61636b6c697374207061697220616464726573604082015261399760f11b606082015260800190565b60008219821115614600576146006144b3565b500190565b600082821015614617576146176144b3565b500390565b60006020828403121561462e57600080fd5b5051919050565b634e487b7160e01b600052603160045260246000fd5b600081518084526020808501945080840160005b838110156146845781516001600160a01b03168752958201959082019060010161465f565b509495945050505050565b8481526080602082015260006146a8608083018661464b565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a06040820152600061476b60a083018661464b565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220ce67b8081a45f29ae23fec54bd20890fb08986710055d6692669874aa03610ee64736f6c634300080b0033
Deployed Bytecode Sourcemap
10593:25169:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4271:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10645:27;;;;;;;;;;-1:-1:-1;10645:27:0;;;;-1:-1:-1;;;;;10645:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;10645:27:0;616:221:1;5185:169:0;;;;;;;;;;-1:-1:-1;5185:169:0;;;;;:::i;:::-;;:::i;:::-;;;1463:14:1;;1456:22;1438:41;;1426:2;1411:18;5185:169:0;1298:187:1;12456:31:0;;;;;;;;;;;;;;;;;;;1636:25:1;;;1624:2;1609:18;12456:31:0;1490:177:1;32302:1783:0;;;;;;;;;;-1:-1:-1;32302:1783:0;;;;;:::i;:::-;;:::i;:::-;;11295:34;;;;;;;;;;;;;;;;4592:108;;;;;;;;;;-1:-1:-1;4680:12:0;;4592:108;;18812:103;;;;;;;;;;-1:-1:-1;18812:103:0;;;;;:::i;:::-;;:::i;12302:29::-;;;;;;;;;;;;;;;;12416:33;;;;;;;;;;;;;;;;12376;;;;;;;;;;;;;;;;12119:28;;;;;;;;;;;;;;;;16137:261;;;;;;;;;;-1:-1:-1;16137:261:0;;;;;:::i;:::-;;:::i;5362:492::-;;;;;;;;;;-1:-1:-1;5362:492:0;;;;;:::i;:::-;;:::i;34817:436::-;;;;;;;;;;-1:-1:-1;34817:436:0;;;;;:::i;:::-;;:::i;10707:53::-;;;;;;;;;;;;10753:6;10707:53;;16979:446;;;;;;;;;;-1:-1:-1;16979:446:0;;;;;:::i;:::-;;:::i;30201:133::-;;;;;;;;;;;;;:::i;4491:93::-;;;;;;;;;;-1:-1:-1;4491:93:0;;4574:2;6567:36:1;;6555:2;6540:18;4491:93:0;6425:184:1;31046:912:0;;;;;;;;;;-1:-1:-1;31046:912:0;;;;;:::i;:::-;;:::i;11241:47::-;;;;;;;;;;;;;;;;5862:215;;;;;;;;;;-1:-1:-1;5862:215:0;;;;;:::i;:::-;;:::i;34384:112::-;;;;;;;;;;-1:-1:-1;34384:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;34462:26:0;34437:4;34462:26;;;:17;:26;;;;;;;;;34384:112;10902:32;;;;;;;;;;-1:-1:-1;10902:32:0;;;;-1:-1:-1;;;;;10902:32:0;;;34502:309;;;;;;;;;;-1:-1:-1;34502:309:0;;;;;:::i;:::-;;:::i;18674:132::-;;;;;;;;;;-1:-1:-1;18674:132:0;;;;;:::i;:::-;;:::i;10679:21::-;;;;;;;;;;-1:-1:-1;10679:21:0;;;;-1:-1:-1;;;;;10679:21:0;;;18927:125;;;;;;;;;;-1:-1:-1;18927:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;19016:28:0;18992:4;19016:28;;;:19;:28;;;;;;;;;18927:125;27545:312;;;;;;;;;;;;;:::i;11401:38::-;;;;;;;;;;-1:-1:-1;11401:38:0;;;;;;;;12675:56;;;;;;;;;;-1:-1:-1;12675:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11144:45;;;;;;;;;;;;;;;;29121:472;;;;;;;;;;-1:-1:-1;29121:472:0;;;;;:::i;:::-;;:::i;31964:332::-;;;;;;;;;;-1:-1:-1;31964:332:0;;;;;:::i;:::-;;:::i;12191:28::-;;;;;;;;;;;;;;;;11692:31;;;;;;;;;;-1:-1:-1;11692:31:0;;;;;;;;;;;4708:127;;;;;;;;;;-1:-1:-1;4708:127:0;;;;;:::i;:::-;;:::i;8954:150::-;;;;;;;;;;;;;:::i;11196:38::-;;;;;;;;;;-1:-1:-1;11196:38:0;;;;;;;;16630:136;;;;;;;;;;-1:-1:-1;16630:136:0;;;;;:::i;:::-;;:::i;10799:30::-;;;;;;;;;;-1:-1:-1;10799:30:0;;;;-1:-1:-1;;;;;10799:30:0;;;11547:49;;;;;;;;;;;;;;;;15456:219;;;;;;;;;;;;;:::i;12045:30::-;;;;;;;;;;;;;;;;35259:500;;;;;;;;;;-1:-1:-1;35259:500:0;;;;;:::i;:::-;;:::i;11500:34::-;;;;;;;;;;;;;;;;8312:79;;;;;;;;;;-1:-1:-1;8377:6:0;;-1:-1:-1;;;;;8377:6:0;8312:79;;10836:24;;;;;;;;;;-1:-1:-1;10836:24:0;;;;-1:-1:-1;;;;;10836:24:0;;;12226:31;;;;;;;;;;;;;;;;16866:101;;;;;;;;;;-1:-1:-1;16866:101:0;;;;;:::i;:::-;;:::i;4379:104::-;;;;;;;;;;;;;:::i;18092:237::-;;;;;;;;;;-1:-1:-1;18092:237:0;;;;;:::i;:::-;;:::i;12154:24::-;;;;;;;;;;;;;;;;12494:27;;;;;;;;;;;;;;;;12338:25;;;;;;;;;;;;;;;;6085:413;;;;;;;;;;-1:-1:-1;6085:413:0;;;;;:::i;:::-;;:::i;4843:175::-;;;;;;;;;;-1:-1:-1;4843:175:0;;;;;:::i;:::-;;:::i;4117:21::-;;;;;;;;;;;;;:::i;12889:58::-;;;;;;;;;;-1:-1:-1;12889:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11652:33;;;;;;;;;;-1:-1:-1;11652:33:0;;;;;;;;18533:133;;;;;;;;;;-1:-1:-1;18533:133:0;;;;;:::i;:::-;;:::i;17902:182::-;;;;;;;;;;-1:-1:-1;17902:182:0;;;;;:::i;:::-;;:::i;16406:212::-;;;;;;;;;;-1:-1:-1;16406:212:0;;;;;:::i;:::-;;:::i;10867:28::-;;;;;;;;;;-1:-1:-1;10867:28:0;;;;-1:-1:-1;;;;;10867:28:0;;;11446:47;;;;;;;;;;;;;;;;11963:39;;;;;;;;;;-1:-1:-1;11963:39:0;;;;;;;;11035:27;;;;;;;;;;;;;;;;15744:381;;;;;;;;;;-1:-1:-1;15744:381:0;;;;;:::i;:::-;;:::i;4091:19::-;;;;;;;;;;;;;:::i;12011:27::-;;;;;;;;;;;;;;;;28588:521;;;;;;;;;;-1:-1:-1;28588:521:0;;;;;:::i;:::-;;:::i;5026:151::-;;;;;;;;;;-1:-1:-1;5026:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5142:18:0;;;5115:7;5142:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5026:151;11069:33;;;;;;;;;;;;;;;;11342:40;;;;;;;;;;;;;;;;17437:457;;;;;;;;;;-1:-1:-1;17437:457:0;;;;;:::i;:::-;;:::i;10989:37::-;;;;;;;;;;;;;;;;11603:40;;;;;;;;;;;;;;;;12082:30;;;;;;;;;;;;;;;;9259:246;;;;;;;;;;-1:-1:-1;9259:246:0;;;;;:::i;:::-;;:::i;34137:241::-;;;;;;;;;;;;;:::i;12264:31::-;;;;;;;;;;;;;;;;11109:24;;;;;;;;;;;;;;;;27964:616;;;;;;;;;;-1:-1:-1;27964:616:0;;;;;:::i;:::-;;:::i;4271:100::-;4325:13;4358:5;4351:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4271:100;:::o;5185:169::-;5268:4;5285:39;442:10;5308:7;5317:6;5285:8;:39::i;:::-;-1:-1:-1;5342:4:0;5185:169;;;;:::o;32302:1783::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;;;;;;;;;32496:13:::1;::::0;::::1;;32495:14;32487:70;;;;-1:-1:-1::0;;;32487:70:0::1;;;;;;;:::i;:::-;32601:15;:32:::0;;-1:-1:-1;;;;;32601:32:0;;::::1;-1:-1:-1::0;;;;;;32601:32:0;;::::1;::::0;::::1;::::0;;;32644:17:::1;:36:::0;;;;::::1;::::0;;;::::1;;::::0;;32691:48:::1;::::0;32601:32;32691:25:::1;:48::i;:::-;32776:17;::::0;32750:50:::1;::::0;-1:-1:-1;;;;;32776:17:0::1;::::0;32750:25:::1;:50::i;:::-;32843:9;32838:254;32858:16;:23;32854:1;:27;32838:254;;;32903:177;32945:4;32969:16;32986:1;32969:19;;;;;;;;:::i;:::-;;;;;;;33045:5;33025:14;33040:1;33025:17;;;;;;;;:::i;:::-;;;;;;;33009:13;4680:12:::0;;;4592:108;33009:13:::1;:33;;;;:::i;:::-;:41;;;;:::i;:::-;32903:15;:177::i;:::-;32883:3;::::0;::::1;:::i;:::-;;;32838:254;;;-1:-1:-1::0;33131:15:0::1;33109:19;:37:::0;33187:13:::1;:23:::0;;-1:-1:-1;;;;;33187:23:0;::::1;-1:-1:-1::0;;;;;;33187:23:0;;::::1;::::0;::::1;::::0;;;33281:9:::1;:22:::0;;;;::::1;::::0;::::1;::::0;;33359:20:::1;::::0;;-1:-1:-1;;;33359:20:0;;;;33187:23;;33359:18:::1;::::0;-1:-1:-1;33359:20:0;;::::1;::::0;::::1;::::0;;;;;;;;33187:23;33359:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33347:44:0::1;;33400:4;33407:10;-1:-1:-1::0;;;;;33407:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33347:78;::::0;-1:-1:-1;;;;;;33347:78:0::1;::::0;;;;;;-1:-1:-1;;;;;10441:15:1;;;33347:78:0::1;::::0;::::1;10423:34:1::0;10493:15;;10473:18;;;10466:43;10358:18;;33347:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33338:6;:87:::0;;-1:-1:-1;;;;;;33338:87:0::1;-1:-1:-1::0;;;;;33338:87:0;;;::::1;::::0;;::::1;::::0;;33436:48:::1;::::0;-1:-1:-1;33436:25:0::1;:48::i;:::-;33532:6;::::0;33495:51:::1;::::0;-1:-1:-1;;;;;33532:6:0::1;::::0;33495:28:::1;:51::i;:::-;33626:1;33602:21;:25;33594:73;;;::::0;-1:-1:-1;;;33594:73:0;;10722:2:1;33594:73:0::1;::::0;::::1;10704:21:1::0;10761:2;10741:18;;;10734:30;10800:34;10780:18;;;10773:62;-1:-1:-1;;;10851:18:1;;;10844:33;10894:19;;33594:73:0::1;10520:399:1::0;33594:73:0::1;33713:1;33686:24;33704:4;33686:9;:24::i;:::-;:28;33678:79;;;::::0;-1:-1:-1;;;33678:79:0;;11126:2:1;33678:79:0::1;::::0;::::1;11108:21:1::0;11165:2;11145:18;;;11138:30;11204:34;11184:18;;;11177:62;-1:-1:-1;;;11255:18:1;;;11248:36;11301:19;;33678:79:0::1;10924:402:1::0;33678:79:0::1;33800:9;::::0;33768:69:::1;::::0;33785:4:::1;::::0;-1:-1:-1;;;;;33800:9:0::1;33812:24;33785:4:::0;33812:9:::1;:24::i;:::-;33768:8;:69::i;:::-;33848:9;::::0;-1:-1:-1;;;;;33848:9:0::1;:25;33881:21;33926:4;33946:24;33926:4:::0;33946:9:::1;:24::i;:::-;34019:17;::::0;33848:229:::1;::::0;-1:-1:-1;;;;;;33848:229:0::1;::::0;;;;;;::::1;::::0;;;33985:1:::1;::::0;;;-1:-1:-1;;;;;34019:17:0::1;::::0;34051:15:::1;::::0;33848:229:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32476:1609;32302:1783:::0;;;;;:::o;18812:103::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;18886:9:::1;:21:::0;;-1:-1:-1;;;;;;18886:21:0::1;-1:-1:-1::0;;;;;18886:21:0;;;::::1;::::0;;;::::1;::::0;;18812:103::o;16137:261::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;16256:4:::1;16250;16230:13;4680:12:::0;;;4592:108;16230:13:::1;:17;::::0;16246:1:::1;16230:17;:::i;:::-;:24;;;;:::i;:::-;16229:31;;;;:::i;:::-;16219:6;:41;;16211:93;;;::::0;-1:-1:-1;;;16211:93:0;;12456:2:1;16211:93:0::1;::::0;::::1;12438:21:1::0;12495:2;12475:18;;;12468:30;12534:34;12514:18;;;12507:62;-1:-1:-1;;;12585:18:1;;;12578:37;12632:19;;16211:93:0::1;12254:403:1::0;16211:93:0::1;16373:17;:6:::0;16383::::1;16373:17;:::i;:::-;16358:12;:32:::0;-1:-1:-1;16137:261:0:o;5362:492::-;5502:4;5519:36;5529:6;5537:9;5548:6;5519:9;:36::i;:::-;-1:-1:-1;;;;;5595:19:0;;5568:24;5595:19;;;:11;:19;;;;;;;;442:10;5595:33;;;;;;;;5647:26;;;;5639:79;;;;-1:-1:-1;;;5639:79:0;;12864:2:1;5639:79:0;;;12846:21:1;12903:2;12883:18;;;12876:30;12942:34;12922:18;;;12915:62;-1:-1:-1;;;12993:18:1;;;12986:38;13041:19;;5639:79:0;12662:404:1;5639:79:0;5754:57;5763:6;442:10;5804:6;5785:16;:25;5754:8;:57::i;:::-;-1:-1:-1;5842:4:0;;5362:492;-1:-1:-1;;;;5362:492:0:o;34817:436::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;34914:9:::1;34909:327;34929:9;:16;34925:1;:20;34909:327;;;34991:13;::::0;34975:12;;-1:-1:-1;;;;;34991:13:0;;::::1;::::0;34975:9;;34985:1;;34975:12;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;34975:29:0::1;;;34967:70;;;::::0;-1:-1:-1;;;34967:70:0;;13273:2:1;34967:70:0::1;::::0;::::1;13255:21:1::0;13312:2;13292:18;;;13285:30;13351;13331:18;;;13324:58;13399:18;;34967:70:0::1;13071:352:1::0;34967:70:0::1;35076:6;::::0;35060:12;;-1:-1:-1;;;;;35076:6:0;;::::1;::::0;35060:9;;35070:1;;35060:12;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;35060:22:0::1;;;35052:69;;;;-1:-1:-1::0;;;35052:69:0::1;;;;;;;:::i;:::-;35170:4;35136:17;:31;35154:9;35164:1;35154:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;35136:31:0::1;-1:-1:-1::0;;;;;35136:31:0::1;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;35189:16;35211:9;35221:1;35211:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;35189:35;;::::1;::::0;::::1;::::0;;-1:-1:-1;35189:35:0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;35189:35:0::1;-1:-1:-1::0;;;;;35189:35:0;;::::1;::::0;;;::::1;::::0;;34947:3:::1;::::0;::::1;:::i;:::-;;;34909:327;;;;34817:436:::0;:::o;16979:446::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;17116:15:::1;:31:::0;;;17158:15:::1;:31:::0;;;17200:13:::1;:27:::0;;;17238:9:::1;:19:::0;;;17250:7;17216:11;17283:33:::1;17176:13:::0;17134;17283:33:::1;:::i;:::-;:49;;;;:::i;:::-;:61;;;;:::i;:::-;17268:12;:76:::0;;;17379:3:::1;-1:-1:-1::0;17363:19:0::1;17355:62;;;::::0;-1:-1:-1;;;17355:62:0;;14166:2:1;17355:62:0::1;::::0;::::1;14148:21:1::0;14205:2;14185:18;;;14178:30;14244:32;14224:18;;;14217:60;14294:18;;17355:62:0::1;13964:354:1::0;17355:62:0::1;16979:446:::0;;;;:::o;30201:133::-;30253:4;30314:12;;30299;:27;;;;:::i;:::-;30277:18;;:49;;30270:56;;30201:133;:::o;31046:912::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;31191:24:::1;;31163:25;;:52;;;;:::i;:::-;31145:15;:70;31137:116;;;::::0;-1:-1:-1;;;31137:116:0;;14655:2:1;31137:116:0::1;::::0;::::1;14637:21:1::0;;;14674:18;;;14667:30;14733:34;14713:18;;;14706:62;14785:18;;31137:116:0::1;14453:356:1::0;31137:116:0::1;31283:4;31272:7;:15;;31264:70;;;::::0;-1:-1:-1;;;31264:70:0;;15016:2:1;31264:70:0::1;::::0;::::1;14998:21:1::0;15055:2;15035:18;;;15028:30;15094:34;15074:18;;;15067:62;-1:-1:-1;;;15145:18:1;;;15138:40;15195:19;;31264:70:0::1;14814:406:1::0;31264:70:0::1;31373:15;31345:25;:43:::0;31497:6:::1;::::0;31482:22:::1;::::0;-1:-1:-1;;;31482:22:0;;-1:-1:-1;;;;;31497:6:0;;::::1;31482:22;::::0;::::1;780:51:1::0;31451:28:0::1;::::0;31482:4:::1;::::0;:14:::1;::::0;753:18:1;;31482:22:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31451:53:::0;-1:-1:-1;31567:25:0::1;31628:5;31595:30;31618:7:::0;31451:53;31595:30:::1;:::i;:::-;:38;;;;:::i;:::-;31567:66:::0;-1:-1:-1;31658:21:0;;31654:112:::1;;31711:6;::::0;31695:59:::1;::::0;-1:-1:-1;;;;;31711:6:0::1;31727;31736:17:::0;31695:15:::1;:59::i;:::-;31874:6;::::0;31892:11:::1;::::0;;-1:-1:-1;;;;;;31892:11:0;;;;-1:-1:-1;;;;;31874:6:0;;::::1;::::0;;;31892:9:::1;::::0;:11:::1;::::0;;::::1;::::0;31849:13:::1;::::0;31892:11;;;;;;;31849:13;31874:6;31892:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31919:31;31932:17;31919:31;;;;1636:25:1::0;;1624:2;1609:18;;1490:177;31919:31:0::1;;;;;;;;31126:832;;;31046:912:::0;:::o;5862:215::-;442:10;5950:4;5999:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5999:34:0;;;;;;;;;;5950:4;;5967:80;;5990:7;;5999:47;;6036:10;;5999:47;:::i;34502:309::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;34597:13:::1;::::0;-1:-1:-1;;;;;34586:24:0;;::::1;34597:13:::0;::::1;34586:24;;34578:65;;;::::0;-1:-1:-1;;;34578:65:0;;13273:2:1;34578:65:0::1;::::0;::::1;13255:21:1::0;13312:2;13292:18;;;13285:30;13351;13331:18;;;13324:58;13399:18;;34578:65:0::1;13071:352:1::0;34578:65:0::1;34673:6;::::0;-1:-1:-1;;;;;34662:17:0;;::::1;34673:6:::0;::::1;34662:17;;34654:64;;;;-1:-1:-1::0;;;34654:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34729:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;34729:33:0::1;34758:4;34729:33:::0;;::::1;::::0;;;34773:16:::1;:30:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34773:30:0::1;::::0;;::::1;::::0;;34502:309::o;18674:132::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;18769:17:::1;:29:::0;;-1:-1:-1;;;;;;18769:29:0::1;-1:-1:-1::0;;;;;18769:29:0;;;::::1;::::0;;;::::1;::::0;;18674:132::o;27545:312::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;27636:18:::1;;27608:24;27626:4;27608:9;:24::i;:::-;:46;;27600:123;;;::::0;;-1:-1:-1;;;27600:123:0;;15616:2:1;27600:123:0::1;::::0;::::1;15598:21:1::0;15635:18;;;15628:30;;;;15694:34;15674:18;;;15667:62;15765:34;15745:18;;;15738:62;15817:19;;27600:123:0::1;15414:428:1::0;27600:123:0::1;27734:8;:15:::0;;-1:-1:-1;;;;27734:15:0::1;-1:-1:-1::0;;;27734:15:0::1;::::0;;27760:10:::1;:8;:10::i;:::-;27781:8;:16:::0;;-1:-1:-1;;;;27781:16:0::1;::::0;;27813:36:::1;::::0;27833:15:::1;1636:25:1::0;;27813:36:0::1;::::0;1624:2:1;1609:18;27813:36:0::1;;;;;;;27545:312::o:0;29121:472::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;29280:3:::1;29257:19;:26;;29249:90;;;::::0;-1:-1:-1;;;29249:90:0;;16049:2:1;29249:90:0::1;::::0;::::1;16031:21:1::0;16088:2;16068:18;;;16061:30;16127:34;16107:18;;;16100:62;-1:-1:-1;;;16178:18:1;;;16171:49;16237:19;;29249:90:0::1;15847:415:1::0;29249:90:0::1;29370:4;29358:8;:16;;:33;;;;-1:-1:-1::0;29378:13:0;29358:33:::1;29350:99;;;::::0;-1:-1:-1;;;29350:99:0;;16469:2:1;29350:99:0::1;::::0;::::1;16451:21:1::0;16508:2;16488:18;;;16481:30;16547:34;16527:18;;;16520:62;-1:-1:-1;;;16598:18:1;;;16591:51;16659:19;;29350:99:0::1;16267:417:1::0;29350:99:0::1;29460:20;:42:::0;;;;29513:21:::1;:32:::0;29556:18:::1;:29:::0;;-1:-1:-1;;29556:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29121:472::o;31964:332::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;32049:13:::1;::::0;::::1;;32048:14;32040:70;;;;-1:-1:-1::0;;;32040:70:0::1;;;;;;;:::i;:::-;32156:13;:20:::0;;-1:-1:-1;;32187:18:0;;;;;32237:12:::1;32216:18;:33:::0;32260:12:::1;:28:::0;31964:332::o;4708:127::-;-1:-1:-1;;;;;4809:18:0;4782:7;4809:18;;;;;;;;;;;;4708:127::o;8954:150::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;9047:6:::1;::::0;9026:40:::1;::::0;9063:1:::1;::::0;-1:-1:-1;;;;;9047:6:0::1;::::0;9026:40:::1;::::0;9063:1;;9026:40:::1;9077:6;:19:::0;;-1:-1:-1;;;;;;9077:19:0::1;::::0;;8954:150::o;16630:136::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16720:31:0;;;::::1;;::::0;;;:23:::1;:31;::::0;;;;:38;;-1:-1:-1;;16720:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16630:136::o;15456:219::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;15528:20:::1;::::0;::::1;;:26;;:20:::0;:26:::1;15525:143;;;15570:20;:28:::0;;-1:-1:-1;;15570:28:0::1;::::0;;15456:219::o;15525:143::-:1;15629:20;:27:::0;;-1:-1:-1;;15629:27:0::1;15652:4;15629:27;::::0;;15456:219::o;35259:500::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35348:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;35340:65;;;::::0;-1:-1:-1;;;35340:65:0;;16891:2:1;35340:65:0::1;::::0;::::1;16873:21:1::0;16930:2;16910:18;;;16903:30;16969:28;16949:18;;;16942:56;17015:18;;35340:65:0::1;16689:350:1::0;35340:65:0::1;35421:9;35416:336;35440:16;:23:::0;35436:27;::::1;35416:336;;;35512:7;-1:-1:-1::0;;;;;35489:30:0::1;:16;35506:1;35489:19;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;35489:19:0::1;:30;35485:256;;;35562:16;35579:23:::0;;:27:::1;::::0;35605:1:::1;::::0;35579:27:::1;:::i;:::-;35562:45;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;35540:16:::1;:19:::0;;-1:-1:-1;;;;;35562:45:0;;::::1;::::0;35557:1;;35540:19;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:67:::0;;-1:-1:-1;;;;;;35540:67:0::1;-1:-1:-1::0;;;;;35540:67:0;;::::1;;::::0;;35626:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;35626:34:0::1;::::0;;35679:16:::1;:22:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;35679:22:0;;;;;-1:-1:-1;;;;;;35679:22:0::1;::::0;;;;;34909:327:::1;34817:436:::0;:::o;35485:256::-:1;35465:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35416:336;;16866:101:::0;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;16938:11:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;16938:21:0;;::::1;::::0;;;::::1;::::0;;16866:101::o;4379:104::-;4435:13;4468:7;4461:14;;;;;:::i;18092:237::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;18199:6:::1;::::0;-1:-1:-1;;;;;18191:14:0;;::::1;18199:6:::0;::::1;18191:14;;18183:84;;;::::0;-1:-1:-1;;;18183:84:0;;17378:2:1;18183:84:0::1;::::0;::::1;17360:21:1::0;17417:2;17397:18;;;17390:30;17456:34;17436:18;;;17429:62;17527:27;17507:18;;;17500:55;17572:19;;18183:84:0::1;17176:421:1::0;18183:84:0::1;18280:41;18309:4;18315:5;18280:28;:41::i;6085:413::-:0;442:10;6178:4;6222:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6222:34:0;;;;;;;;;;6275:35;;;;6267:85;;;;-1:-1:-1;;;6267:85:0;;17804:2:1;6267:85:0;;;17786:21:1;17843:2;17823:18;;;17816:30;17882:34;17862:18;;;17855:62;-1:-1:-1;;;17933:18:1;;;17926:35;17978:19;;6267:85:0;17602:401:1;6267:85:0;6388:67;442:10;6411:7;6439:15;6420:16;:34;6388:8;:67::i;:::-;-1:-1:-1;6486:4:0;;6085:413;-1:-1:-1;;;6085:413:0:o;4843:175::-;4929:4;4946:42;442:10;4970:9;4981:6;4946:9;:42::i;4117:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18533:133::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;18622:15:::1;:36:::0;;-1:-1:-1;;;;;;18622:36:0::1;-1:-1:-1::0;;;;;18622:36:0;;;::::1;::::0;;;::::1;::::0;;18533:133::o;17902:182::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17987:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17987:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18042:34;;1438:41:1;;;18042:34:0::1;::::0;1411:18:1;18042:34:0::1;;;;;;;17902:182:::0;;:::o;16406:212::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;16527:4:::1;16522:3;16502:13;4680:12:::0;;;4592:108;16502:13:::1;:17;::::0;16518:1:::1;16502:17;:::i;:::-;:23;;;;:::i;:::-;16501:30;;;;:::i;:::-;16491:6;:40;;16483:87;;;::::0;-1:-1:-1;;;16483:87:0;;18210:2:1;16483:87:0::1;::::0;::::1;18192:21:1::0;18249:2;18229:18;;;18222:30;18288:34;18268:18;;;18261:62;-1:-1:-1;;;18339:18:1;;;18332:32;18381:19;;16483:87:0::1;18008:398:1::0;16483:87:0::1;16593:17;:6:::0;16603::::1;16593:17;:::i;:::-;16581:9;:29:::0;-1:-1:-1;16406:212:0:o;15744:381::-;8524:6;;15825:4;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;15881:6:::1;15861:13;4680:12:::0;;;4592:108;15861:13:::1;:17;::::0;15877:1:::1;15861:17;:::i;:::-;:26;;;;:::i;:::-;15848:9;:39;;15840:105;;;::::0;-1:-1:-1;;;15840:105:0;;18613:2:1;15840:105:0::1;::::0;::::1;18595:21:1::0;18652:2;18632:18;;;18625:30;18691:34;18671:18;;;18664:62;-1:-1:-1;;;18742:18:1;;;18735:51;18803:19;;15840:105:0::1;18411:417:1::0;15840:105:0::1;15996:4;15976:13;4680:12:::0;;;4592:108;15976:13:::1;:17;::::0;15992:1:::1;15976:17;:::i;:::-;:24;;;;:::i;:::-;15963:9;:37;;15955:102;;;::::0;-1:-1:-1;;;15955:102:0;;19035:2:1;15955:102:0::1;::::0;::::1;19017:21:1::0;19074:2;19054:18;;;19047:30;19113:34;19093:18;;;19086:62;-1:-1:-1;;;19164:18:1;;;19157:50;19224:19;;15955:102:0::1;18833:416:1::0;15955:102:0::1;-1:-1:-1::0;16067:18:0::1;:30:::0;;;16114:4:::1;8594:1;15744:381:::0;;;:::o;4091:19::-;;;;;;;:::i;28588:521::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;28760:2:::1;28737:19;:25;;28729:89;;;::::0;-1:-1:-1;;;28729:89:0;;19456:2:1;28729:89:0::1;::::0;::::1;19438:21:1::0;19495:2;19475:18;;;19468:30;19534:34;19514:18;;;19507:62;-1:-1:-1;;;19585:18:1;;;19578:49;19644:19;;28729:89:0::1;19254:415:1::0;28729:89:0::1;28855:7;28837:14;:25;;:57;;;;;28884:10;28866:14;:28;;28837:57;28829:120;;;::::0;-1:-1:-1;;;28829:120:0;;19876:2:1;28829:120:0::1;::::0;::::1;19858:21:1::0;19915:2;19895:18;;;19888:30;19954:34;19934:18;;;19927:62;-1:-1:-1;;;20005:18:1;;;19998:48;20063:19;;28829:120:0::1;19674:414:1::0;28829:120:0::1;28960:20;:42:::0;;;;29013:20:::1;:37:::0;29061:18:::1;:40:::0;;-1:-1:-1;;29061:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28588:521::o;17437:457::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;17575:16:::1;:32:::0;;;17618:16:::1;:32:::0;;;17661:14:::1;:28:::0;;;17700:10:::1;:20:::0;;;17713:7;17678:11;17747:35:::1;17637:13:::0;17594;17747:35:::1;:::i;:::-;:52;;;;:::i;:::-;:65;;;;:::i;:::-;17731:13;:81:::0;;;17848:3:::1;-1:-1:-1::0;17831:20:0::1;17823:63;;;::::0;-1:-1:-1;;;17823:63:0;;14166:2:1;17823:63:0::1;::::0;::::1;14148:21:1::0;14205:2;14185:18;;;14178:30;14244:32;14224:18;;;14217:60;14294:18;;17823:63:0::1;13964:354:1::0;9259:246:0;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9350:22:0;::::1;9342:73;;;::::0;-1:-1:-1;;;9342:73:0;;20295:2:1;9342:73:0::1;::::0;::::1;20277:21:1::0;20334:2;20314:18;;;20307:30;20373:34;20353:18;;;20346:62;-1:-1:-1;;;20424:18:1;;;20417:36;20470:19;;9342:73:0::1;20093:402:1::0;9342:73:0::1;9452:6;::::0;9431:38:::1;::::0;-1:-1:-1;;;;;9431:38:0;;::::1;::::0;9452:6:::1;::::0;9431:38:::1;::::0;9452:6:::1;::::0;9431:38:::1;9480:6;:17:::0;;-1:-1:-1;;;;;;9480:17:0::1;-1:-1:-1::0;;;;;9480:17:0;;;::::1;::::0;;;::::1;::::0;;9259:246::o;34137:241::-;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;34204:13:::1;::::0;::::1;;34203:14;34195:70;;;::::0;-1:-1:-1;;;34195:70:0;;20702:2:1;34195:70:0::1;::::0;::::1;20684:21:1::0;20741:2;20721:18;;;20714:30;20780:34;20760:18;;;20753:62;-1:-1:-1;;;20831:18:1;;;20824:41;20882:19;;34195:70:0::1;20500:407:1::0;34195:70:0::1;34312:58;::::0;34276:12:::1;::::0;34320:10:::1;::::0;34344:21:::1;::::0;34276:12;34312:58;34276:12;34312:58;34344:21;34320:10;34312:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27964:616:::0;8524:6;;-1:-1:-1;;;;;8524:6:0;442:10;8524:22;8516:67;;;;-1:-1:-1;;;8516:67:0;;;;;;;:::i;:::-;28061:8:::1;28046:11;:23;;28038:107;;;::::0;-1:-1:-1;;;28038:107:0;;21324:2:1;28038:107:0::1;::::0;::::1;21306:21:1::0;21363:2;21343:18;;;21336:30;21402:34;21382:18;;;21375:62;21473:34;21453:18;;;21446:62;-1:-1:-1;;;21524:19:1;;;21517:38;21572:19;;28038:107:0::1;21122:475:1::0;28038:107:0::1;28158:21;28196:1;28182:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;28182:16:0::1;;28158:40;;28219:9;;;;;;;;;-1:-1:-1::0;;;;;28219:9:0::1;-1:-1:-1::0;;;;;28219:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28209:4;28214:1;28209:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;28209:26:0::1;;;-1:-1:-1::0;;;;;28209:26:0::1;;;::::0;::::1;28264:4;28246;28251:1;28246:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28246:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;28308:9:::1;::::0;:219:::1;::::0;-1:-1:-1;;;28308:219:0;;:9;::::1;::::0;:60:::1;::::0;28376:11;;28308:219:::1;::::0;:9:::1;::::0;28452:4;;28479:6:::1;::::0;28501:15:::1;::::0;28308:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;28543:29;28560:11;28543:29;;;;1636:25:1::0;;1624:2;1609:18;;1490:177;28543:29:0::1;;;;;;;;28027:553;27964:616:::0;:::o;7427:380::-;-1:-1:-1;;;;;7563:19:0;;7555:68;;;;-1:-1:-1;;;7555:68:0;;22785:2:1;7555:68:0;;;22767:21:1;22824:2;22804:18;;;22797:30;22863:34;22843:18;;;22836:62;-1:-1:-1;;;22914:18:1;;;22907:34;22958:19;;7555:68:0;22583:400:1;7555:68:0;-1:-1:-1;;;;;7642:21:0;;7634:68;;;;-1:-1:-1;;;7634:68:0;;23190:2:1;7634:68:0;;;23172:21:1;23229:2;23209:18;;;23202:30;23268:34;23248:18;;;23241:62;-1:-1:-1;;;23319:18:1;;;23312:32;23361:19;;7634:68:0;22988:398:1;7634:68:0;-1:-1:-1;;;;;7715:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7767:32;;1636:25:1;;;7767:32:0;;1609:18:1;7767:32:0;;;;;;;7427:380;;;:::o;6506:614::-;-1:-1:-1;;;;;6646:20:0;;6638:70;;;;-1:-1:-1;;;6638:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6727:23:0;;6719:71;;;;-1:-1:-1;;;6719:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6827:17:0;;6803:21;6827:17;;;;;;;;;;;6863:23;;;;6855:74;;;;-1:-1:-1;;;6855:74:0;;24403:2:1;6855:74:0;;;24385:21:1;24442:2;24422:18;;;24415:30;24481:34;24461:18;;;24454:62;-1:-1:-1;;;24532:18:1;;;24525:36;24578:19;;6855:74:0;24201:402:1;6855:74:0;-1:-1:-1;;;;;6965:17:0;;;:9;:17;;;;;;;;;;;6985:22;;;6965:42;;7029:20;;;;;;;;:30;;7001:6;;6965:9;7029:30;;7001:6;;7029:30;:::i;:::-;;;;;;;;7094:9;-1:-1:-1;;;;;7077:35:0;7086:6;-1:-1:-1;;;;;7077:35:0;;7105:6;7077:35;;;;1636:25:1;;1624:2;1609:18;;1490:177;7077:35:0;;;;;;;;6627:493;6506:614;;;:::o;18337:188::-;-1:-1:-1;;;;;18420:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;18420:39:0;;;;;;;;;;18477:40;;18420:39;;:31;18477:40;;;18337:188;;:::o;19060:5472::-;-1:-1:-1;;;;;19192:18:0;;19184:68;;;;-1:-1:-1;;;19184:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19271:16:0;;19263:64;;;;-1:-1:-1;;;19263:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19347:21:0;;;;;;:17;:21;;;;;;;;19346:22;19338:58;;;;-1:-1:-1;;;19338:58:0;;24810:2:1;19338:58:0;;;24792:21:1;24849:2;24829:18;;;24822:30;-1:-1:-1;;;24868:18:1;;;24861:53;24931:18;;19338:58:0;24608:347:1;19338:58:0;19432:9;19414:28;;;;:17;:28;;;;;;;;19413:29;19405:65;;;;-1:-1:-1;;;19405:65:0;;24810:2:1;19405:65:0;;;24792:21:1;24849:2;24829:18;;;24822:30;-1:-1:-1;;;24868:18:1;;;24861:53;24931:18;;19405:65:0;24608:347:1;19405:65:0;19487:11;19484:92;;19515:28;19531:4;19537:2;19541:1;19515:15;:28::i;:::-;19060:5472;;;:::o;19484:92::-;19592:13;;;;19588:132;;-1:-1:-1;;;;;19629:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;19658:23:0;;;;;;:19;:23;;;;;;;;19629:52;19621:87;;;;-1:-1:-1;;;19621:87:0;;25162:2:1;19621:87:0;;;25144:21:1;25201:2;25181:18;;;25174:30;-1:-1:-1;;;25220:18:1;;;25213:52;25282:18;;19621:87:0;24960:346:1;19621:87:0;8377:6;;-1:-1:-1;;;;;19758:15:0;;;8377:6;;19758:15;;;;:45;;-1:-1:-1;8377:6:0;;-1:-1:-1;;;;;19790:13:0;;;8377:6;;19790:13;;19758:45;:78;;;;-1:-1:-1;;;;;;19820:16:0;;;;19758:78;:116;;;;-1:-1:-1;;;;;;19853:21:0;;19867:6;19853:21;;19758:116;:142;;;;-1:-1:-1;19892:8:0;;-1:-1:-1;;;19892:8:0;;;;19891:9;19758:142;:183;;;;-1:-1:-1;;;;;;19918:23:0;;;;;;:19;:23;;;;;;;;19917:24;19758:183;:226;;;;-1:-1:-1;;;;;;19959:25:0;;;;;;:19;:25;;;;;;;;19958:26;19758:226;19740:1697;;;20152:20;;;;20148:490;;;20214:9;;-1:-1:-1;;;;;20200:24:0;;;20214:9;;20200:24;;;;:49;;-1:-1:-1;20242:6:0;;-1:-1:-1;;;;;20228:21:0;;;20242:6;;20228:21;;20200:49;20196:423;;;20323:16;20338:1;20323:12;:16;:::i;:::-;20310:9;20285:35;;;;:24;:35;;;;;;:54;:105;;;;-1:-1:-1;20374:16:0;20389:1;20374:12;:16;:::i;:::-;-1:-1:-1;;;;;20343:28:0;;;;;;:24;:28;;;;;;:47;20285:105;20277:171;;;;-1:-1:-1;;;20277:171:0;;25513:2:1;20277:171:0;;;25495:21:1;25552:2;25532:18;;;25525:30;25591:34;25571:18;;;25564:62;-1:-1:-1;;;25642:18:1;;;25635:51;25703:19;;20277:171:0;25311:417:1;20277:171:0;20500:9;20475:35;;;;:24;:35;;;;;;20513:12;20475:50;;;;-1:-1:-1;;;;;20552:28:0;;;;;;:43;20196:423;-1:-1:-1;;;;;20707:31:0;;;;;;:25;:31;;;;;;;;:63;;;;-1:-1:-1;;;;;;20743:27:0;;;;;;:23;:27;;;;;;;;20742:28;20707:63;20703:723;;;20817:12;;20807:6;:22;;20799:80;;;;-1:-1:-1;;;20799:80:0;;25935:2:1;20799:80:0;;;25917:21:1;25974:2;25954:18;;;25947:30;26013:34;25993:18;;;25986:62;-1:-1:-1;;;26064:18:1;;;26057:43;26117:19;;20799:80:0;25733:409:1;20799:80:0;20940:9;;20923:13;20933:2;20923:9;:13::i;:::-;20914:22;;:6;:22;:::i;:::-;:35;;20906:67;;;;-1:-1:-1;;;20906:67:0;;26349:2:1;20906:67:0;;;26331:21:1;26388:2;26368:18;;;26361:30;-1:-1:-1;;;26407:18:1;;;26400:49;26466:18;;20906:67:0;26147:343:1;20906:67:0;20703:723;;;-1:-1:-1;;;;;21067:29:0;;;;;;:25;:29;;;;;;;;:63;;;;-1:-1:-1;;;;;;21101:29:0;;;;;;:23;:29;;;;;;;;21100:30;21067:63;21063:363;;;21177:12;;21167:6;:22;;21159:81;;;;-1:-1:-1;;;21159:81:0;;26697:2:1;21159:81:0;;;26679:21:1;26736:2;26716:18;;;26709:30;26775:34;26755:18;;;26748:62;-1:-1:-1;;;26826:18:1;;;26819:44;26880:19;;21159:81:0;26495:410:1;21063:363:0;-1:-1:-1;;;;;21288:27:0;;;;;;:23;:27;;;;;;;;21283:143;;21373:9;;21356:13;21366:2;21356:9;:13::i;:::-;21347:22;;:6;:22;:::i;:::-;:35;;21339:67;;;;-1:-1:-1;;;21339:67:0;;26349:2:1;21339:67:0;;;26331:21:1;26388:2;26368:18;;;26361:30;-1:-1:-1;;;26407:18:1;;;26400:49;26466:18;;21339:67:0;26147:343:1;21339:67:0;21451:28;21482:24;21500:4;21482:9;:24::i;:::-;21566:18;;21451:55;;-1:-1:-1;21542:42:0;;;;;;;21615:35;;-1:-1:-1;21639:11:0;;;;;;;21615:35;:61;;;;-1:-1:-1;21668:8:0;;-1:-1:-1;;;21668:8:0;;;;21667:9;21615:61;:110;;;;-1:-1:-1;;;;;;21694:31:0;;;;;;:25;:31;;;;;;;;21693:32;21615:110;:153;;;;-1:-1:-1;;;;;;21743:25:0;;;;;;:19;:25;;;;;;;;21742:26;21615:153;:194;;;;-1:-1:-1;;;;;;21786:23:0;;;;;;:19;:23;;;;;;;;21785:24;21615:194;21597:338;;;21836:8;:15;;-1:-1:-1;;;;21836:15:0;-1:-1:-1;;;21836:15:0;;;21880:10;:8;:10::i;:::-;21907:8;:16;;-1:-1:-1;;;;21907:16:0;;;21597:338;21959:8;;-1:-1:-1;;;21959:8:0;;;;21958:9;:42;;;;-1:-1:-1;;;;;;21971:29:0;;;;;;:25;:29;;;;;;;;21958:42;:64;;;;-1:-1:-1;22004:18:0;;;;21958:64;:129;;;;;22067:20;;22045:19;;:42;;;;:::i;:::-;22026:15;:61;;21958:129;:159;;;;-1:-1:-1;;;;;;22092:25:0;;;;;;:19;:25;;;;;;;;22091:26;21958:159;21955:224;;;22133:34;:32;:34::i;:::-;22203:8;;-1:-1:-1;;;22203:8:0;;;;22202:9;:42;;;;-1:-1:-1;;;;;;22215:29:0;;;;;;:25;:29;;;;;;;;22202:42;:64;;;;-1:-1:-1;22248:18:0;;;;22202:64;:129;;;;;22311:20;;22289:19;;:42;;;;:::i;:::-;22270:15;:61;;22202:129;:159;;;;-1:-1:-1;;;;;;22336:25:0;;;;;;:19;:25;;;;;;;;22335:26;22202:159;:208;;;;;22390:20;;22365:21;:45;;22202:208;22199:272;;;22426:33;22438:20;;22426:11;:33::i;:::-;22499:8;;-1:-1:-1;;;;;22608:25:0;;22483:12;22608:25;;;:19;:25;;;;;;22499:8;-1:-1:-1;;;22499:8:0;;;;;22498:9;;22608:25;;:52;;-1:-1:-1;;;;;;22637:23:0;;;;;;:19;:23;;;;;;;;22608:52;22605:99;;;-1:-1:-1;22687:5:0;22605:99;22724:12;22828:7;22825:1654;;;22961:21;:19;:21::i;:::-;:56;;;;-1:-1:-1;;;;;;22986:31:0;;;;;;:25;:31;;;;;;;;22961:56;22958:1352;;;23058:3;23044:11;:6;23053:2;23044:11;:::i;:::-;:17;;;;:::i;:::-;23037:24;;23128:13;;23109:16;;23102:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;23080:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23204:13:0;;23187:14;;23180:21;;:4;:21;:::i;:::-;:37;;;;:::i;:::-;23160:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;23284:13:0;;23265:16;;23258:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;23236:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23352:13:0;;23339:10;;23332:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;23316:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;22958:1352:0;;-1:-1:-1;22958:1352:0;;-1:-1:-1;;;;;23428:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;23477:1;23461:13;;:17;23428:50;23424:886;;;23530:3;23514:13;;23505:6;:22;;;;:::i;23424:886::-;-1:-1:-1;;;;;23898:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;23948:1;23933:12;;:16;23898:51;23895:415;;;23998:3;23983:12;;23974:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;23967:34;;24064:12;;24046:15;;24039:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24017:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24138:12:0;;24122:13;;24115:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;24095:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;24216:12:0;;24198:15;;24191:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;24169:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24282:12:0;;24270:9;;24263:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;24247:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;23895:415:0;24341:8;;24338:93;;24373:42;24389:4;24403;24410;24373:15;:42::i;:::-;24453:14;24463:4;24453:14;;:::i;:::-;;;22825:1654;24491:33;24507:4;24513:2;24517:6;24491:15;:33::i;:::-;19173:5359;;;;19060:5472;;;:::o;25584:1909::-;25623:23;25649:24;25667:4;25649:9;:24::i;:::-;25623:50;;25684:25;25773:12;;25754:16;;25733:18;;25712;;:39;;;;:::i;:::-;:58;;;;:::i;:::-;:73;;;;:::i;:::-;25684:101;-1:-1:-1;25796:12:0;25832:20;;;:46;;-1:-1:-1;25856:22:0;;25832:46;25829:60;;;25881:7;;;25584:1909::o;25829:60::-;25922:18;;:23;;25943:2;25922:23;:::i;:::-;25904:15;:41;25901:113;;;25979:18;;:23;;26000:2;25979:23;:::i;:::-;25961:41;;25901:113;26083:23;26168:1;26148:17;26127:18;;26109:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;26083:86;-1:-1:-1;26180:26:0;26209:33;26083:86;26209:15;:33;:::i;:::-;26180:62;-1:-1:-1;26291:21:0;26325:36;26180:62;26325:16;:36::i;:::-;26383:18;26404:41;26428:17;26404:21;:41;:::i;:::-;26383:62;;26466:23;26567:1;26548:18;;:20;;;;:::i;:::-;26527:42;;:17;:42;:::i;:::-;26505:18;;26492:31;;:10;:31;:::i;:::-;:78;;;;:::i;:::-;26466:104;;26581:21;26678:1;26659:18;;:20;;;;:::i;:::-;26638:42;;:17;:42;:::i;:::-;26618:16;;26605:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;26581:100;;26692:17;26781:1;26762:18;;:20;;;;:::i;:::-;26741:42;;:17;:42;:::i;:::-;26725:12;;26712:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;26692:92;-1:-1:-1;26805:23:0;26692:92;26862:13;26831:28;26844:15;26831:10;:28;:::i;:::-;:44;;;;:::i;:::-;:56;;;;:::i;:::-;26939:1;26918:18;:22;;;26951:18;:22;;;26984:16;:20;;;27015:12;:16;;;27075:9;;27067:45;;26805:82;;-1:-1:-1;;;;;;27075:9:0;;27098;;27067:45;26939:1;27067:45;27098:9;27075;27067:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27144:15:0;;27136:57;;27054:58;;-1:-1:-1;;;;;;27144:15:0;;27173;;27136:57;;;;27173:15;27144;27136:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27123:70:0;;-1:-1:-1;;27217:19:0;;;;;:42;;;27258:1;27240:15;:19;27217:42;27214:210;;;27275:46;27288:15;27305;27275:12;:46::i;:::-;27393:18;;27341:71;;;27112:25:1;;;27168:2;27153:18;;27146:34;;;27196:18;;;27189:34;;;;27341:71:0;;;;;;27100:2:1;27341:71:0;;;27214:210;25612:1881;;;;;;;;;;;25584:1909::o;30346:692::-;30441:15;30419:19;:37;30565:6;;30550:22;;-1:-1:-1;;;30550:22:0;;-1:-1:-1;;;;;30565:6:0;;;30550:22;;;780:51:1;30519:28:0;;30550:4;;:14;;753:18:1;;30550:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30519:53;;30635:25;30710:5;30686:21;;30663:20;:44;;;;:::i;:::-;:52;;;;:::i;:::-;30635:80;-1:-1:-1;30740:21:0;;30736:112;;30793:6;;30777:59;;-1:-1:-1;;;;;30793:6:0;30809;30818:17;30777:15;:59::i;:::-;30956:6;;30974:11;;;-1:-1:-1;;;;;;30974:11:0;;;;-1:-1:-1;;;;;30956:6:0;;;;;;30974:9;;:11;;;;;30931:13;;30974:11;;;;;;;30931:13;30956:6;30974:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31001:29;31012:17;31001:29;;;;1636:25:1;;1624:2;1609:18;;1490:177;31001:29:0;;;;;;;;30398:640;;;30346:692::o;29631:562::-;29725:15;29703:19;:37;29761:21;29799:1;29785:16;;24540:513;24632:16;;;24646:1;24632:16;;;;;;;;24608:21;;24632:16;;;;;;;;;;-1:-1:-1;24632:16:0;24608:40;;24677:4;24659;24664:1;24659:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24659:23:0;;;:7;;;;;;;;;;:23;;;;24703:9;;:16;;;-1:-1:-1;;;24703:16:0;;;;:9;;;;;:14;;:16;;;;;24659:7;;24703:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24693:4;24698:1;24693:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24693:26:0;;;:7;;;;;;;;;:26;24764:9;;24732:56;;24749:4;;24764:9;24776:11;24732:8;:56::i;:::-;24827:9;;:218;;-1:-1:-1;;;24827:218:0;;-1:-1:-1;;;;;24827:9:0;;;;:60;;:218;;24902:11;;24827:9;;24972:4;;24999;;25019:15;;24827:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24595:458;24540:513;:::o;25065:511::-;25245:9;;25213:56;;25230:4;;-1:-1:-1;;;;;25245:9:0;25257:11;25213:8;:56::i;:::-;25312:9;;25510:17;;25312:256;;-1:-1:-1;;;25312:256:0;;-1:-1:-1;;;;;25312:9:0;;;;:25;;25345:9;;25312:256;;25378:4;;25398:11;;25312:9;;;;25510:17;;25542:15;;25312:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25065:511;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;897:70;842:131;:::o;978:315::-;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1162:9;1149:23;1181:31;1206:5;1181:31;:::i;:::-;1231:5;1283:2;1268:18;;;;1255:32;;-1:-1:-1;;;978:315:1:o;1672:127::-;1733:10;1728:3;1724:20;1721:1;1714:31;1764:4;1761:1;1754:15;1788:4;1785:1;1778:15;1804:275;1875:2;1869:9;1940:2;1921:13;;-1:-1:-1;;1917:27:1;1905:40;;1975:18;1960:34;;1996:22;;;1957:62;1954:88;;;2022:18;;:::i;:::-;2058:2;2051:22;1804:275;;-1:-1:-1;1804:275:1:o;2084:183::-;2144:4;2177:18;2169:6;2166:30;2163:56;;;2199:18;;:::i;:::-;-1:-1:-1;2244:1:1;2240:14;2256:4;2236:25;;2084:183::o;2272:737::-;2326:5;2379:3;2372:4;2364:6;2360:17;2356:27;2346:55;;2397:1;2394;2387:12;2346:55;2433:6;2420:20;2459:4;2483:60;2499:43;2539:2;2499:43;:::i;:::-;2483:60;:::i;:::-;2577:15;;;2663:1;2659:10;;;;2647:23;;2643:32;;;2608:12;;;;2687:15;;;2684:35;;;2715:1;2712;2705:12;2684:35;2751:2;2743:6;2739:15;2763:217;2779:6;2774:3;2771:15;2763:217;;;2859:3;2846:17;2876:31;2901:5;2876:31;:::i;:::-;2920:18;;2958:12;;;;2796;;2763:217;;;-1:-1:-1;2998:5:1;2272:737;-1:-1:-1;;;;;;2272:737:1:o;3014:1557::-;3159:6;3167;3175;3183;3191;3244:3;3232:9;3223:7;3219:23;3215:33;3212:53;;;3261:1;3258;3251:12;3212:53;3300:9;3287:23;3319:31;3344:5;3319:31;:::i;:::-;3369:5;-1:-1:-1;3393:2:1;3432:18;;;3419:32;3460:33;3419:32;3460:33;:::i;:::-;3512:7;-1:-1:-1;3571:2:1;3556:18;;3543:32;3584:33;3543:32;3584:33;:::i;:::-;3636:7;-1:-1:-1;3694:2:1;3679:18;;3666:32;3717:18;3747:14;;;3744:34;;;3774:1;3771;3764:12;3744:34;3797:61;3850:7;3841:6;3830:9;3826:22;3797:61;:::i;:::-;3787:71;;3911:3;3900:9;3896:19;3883:33;3867:49;;3941:2;3931:8;3928:16;3925:36;;;3957:1;3954;3947:12;3925:36;-1:-1:-1;3980:24:1;;4035:4;4027:13;;4023:27;-1:-1:-1;4013:55:1;;4064:1;4061;4054:12;4013:55;4100:2;4087:16;4123:60;4139:43;4179:2;4139:43;:::i;4123:60::-;4217:15;;;4299:1;4295:10;;;;4287:19;;4283:28;;;4248:12;;;;4323:19;;;4320:39;;;4355:1;4352;4345:12;4320:39;4379:11;;;;4399:142;4415:6;4410:3;4407:15;4399:142;;;4481:17;;4469:30;;4432:12;;;;4519;;;;4399:142;;;4560:5;4550:15;;;;;;;3014:1557;;;;;;;;:::o;4576:247::-;4635:6;4688:2;4676:9;4667:7;4663:23;4659:32;4656:52;;;4704:1;4701;4694:12;4656:52;4743:9;4730:23;4762:31;4787:5;4762:31;:::i;:::-;4812:5;4576:247;-1:-1:-1;;;4576:247:1:o;4828:180::-;4887:6;4940:2;4928:9;4919:7;4915:23;4911:32;4908:52;;;4956:1;4953;4946:12;4908:52;-1:-1:-1;4979:23:1;;4828:180;-1:-1:-1;4828:180:1:o;5013:456::-;5090:6;5098;5106;5159:2;5147:9;5138:7;5134:23;5130:32;5127:52;;;5175:1;5172;5165:12;5127:52;5214:9;5201:23;5233:31;5258:5;5233:31;:::i;:::-;5283:5;-1:-1:-1;5340:2:1;5325:18;;5312:32;5353:33;5312:32;5353:33;:::i;:::-;5013:456;;5405:7;;-1:-1:-1;;;5459:2:1;5444:18;;;;5431:32;;5013:456::o;5474:348::-;5558:6;5611:2;5599:9;5590:7;5586:23;5582:32;5579:52;;;5627:1;5624;5617:12;5579:52;5667:9;5654:23;5700:18;5692:6;5689:30;5686:50;;;5732:1;5729;5722:12;5686:50;5755:61;5808:7;5799:6;5788:9;5784:22;5755:61;:::i;:::-;5745:71;5474:348;-1:-1:-1;;;;5474:348:1:o;6035:385::-;6121:6;6129;6137;6145;6198:3;6186:9;6177:7;6173:23;6169:33;6166:53;;;6215:1;6212;6205:12;6166:53;-1:-1:-1;;6238:23:1;;;6308:2;6293:18;;6280:32;;-1:-1:-1;6359:2:1;6344:18;;6331:32;;6410:2;6395:18;6382:32;;-1:-1:-1;6035:385:1;-1:-1:-1;6035:385:1:o;6614:160::-;6679:20;;6735:13;;6728:21;6718:32;;6708:60;;6764:1;6761;6754:12;6779:316;6853:6;6861;6869;6922:2;6910:9;6901:7;6897:23;6893:32;6890:52;;;6938:1;6935;6928:12;6890:52;6974:9;6961:23;6951:33;;7031:2;7020:9;7016:18;7003:32;6993:42;;7054:35;7085:2;7074:9;7070:18;7054:35;:::i;:::-;7044:45;;6779:316;;;;;:::o;7100:315::-;7165:6;7173;7226:2;7214:9;7205:7;7201:23;7197:32;7194:52;;;7242:1;7239;7232:12;7194:52;7281:9;7268:23;7300:31;7325:5;7300:31;:::i;:::-;7350:5;-1:-1:-1;7374:35:1;7405:2;7390:18;;7374:35;:::i;:::-;7364:45;;7100:315;;;;;:::o;7420:180::-;7476:6;7529:2;7517:9;7508:7;7504:23;7500:32;7497:52;;;7545:1;7542;7535:12;7497:52;7568:26;7584:9;7568:26;:::i;7605:388::-;7673:6;7681;7734:2;7722:9;7713:7;7709:23;7705:32;7702:52;;;7750:1;7747;7740:12;7702:52;7789:9;7776:23;7808:31;7833:5;7808:31;:::i;:::-;7858:5;-1:-1:-1;7915:2:1;7900:18;;7887:32;7928:33;7887:32;7928:33;:::i;:::-;7980:7;7970:17;;;7605:388;;;;;:::o;7998:380::-;8077:1;8073:12;;;;8120;;;8141:61;;8195:4;8187:6;8183:17;8173:27;;8141:61;8248:2;8240:6;8237:14;8217:18;8214:38;8211:161;;;8294:10;8289:3;8285:20;8282:1;8275:31;8329:4;8326:1;8319:15;8357:4;8354:1;8347:15;8211:161;;7998:380;;;:::o;8383:356::-;8585:2;8567:21;;;8604:18;;;8597:30;8663:34;8658:2;8643:18;;8636:62;8730:2;8715:18;;8383:356::o;8744:407::-;8946:2;8928:21;;;8985:2;8965:18;;;8958:30;9024:34;9019:2;9004:18;;8997:62;-1:-1:-1;;;9090:2:1;9075:18;;9068:41;9141:3;9126:19;;8744:407::o;9156:127::-;9217:10;9212:3;9208:20;9205:1;9198:31;9248:4;9245:1;9238:15;9272:4;9269:1;9262:15;9288:127;9349:10;9344:3;9340:20;9337:1;9330:31;9380:4;9377:1;9370:15;9404:4;9401:1;9394:15;9420:168;9460:7;9526:1;9522;9518:6;9514:14;9511:1;9508:21;9503:1;9496:9;9489:17;9485:45;9482:71;;;9533:18;;:::i;:::-;-1:-1:-1;9573:9:1;;9420:168::o;9593:217::-;9633:1;9659;9649:132;;9703:10;9698:3;9694:20;9691:1;9684:31;9738:4;9735:1;9728:15;9766:4;9763:1;9756:15;9649:132;-1:-1:-1;9795:9:1;;9593:217::o;9815:135::-;9854:3;-1:-1:-1;;9875:17:1;;9872:43;;;9895:18;;:::i;:::-;-1:-1:-1;9942:1:1;9931:13;;9815:135::o;9955:251::-;10025:6;10078:2;10066:9;10057:7;10053:23;10049:32;10046:52;;;10094:1;10091;10084:12;10046:52;10126:9;10120:16;10145:31;10170:5;10145:31;:::i;11331:607::-;-1:-1:-1;;;;;11690:15:1;;;11672:34;;11737:2;11722:18;;11715:34;;;;11780:2;11765:18;;11758:34;;;;11823:2;11808:18;;11801:34;;;;11872:15;;;11866:3;11851:19;;11844:44;11652:3;11904:19;;11897:35;;;;11621:3;11606:19;;11331:607::o;11943:306::-;12031:6;12039;12047;12100:2;12088:9;12079:7;12075:23;12071:32;12068:52;;;12116:1;12113;12106:12;12068:52;12145:9;12139:16;12129:26;;12195:2;12184:9;12180:18;12174:25;12164:35;;12239:2;12228:9;12224:18;12218:25;12208:35;;11943:306;;;;;:::o;13428:398::-;13630:2;13612:21;;;13669:2;13649:18;;;13642:30;13708:34;13703:2;13688:18;;13681:62;-1:-1:-1;;;13774:2:1;13759:18;;13752:32;13816:3;13801:19;;13428:398::o;13831:128::-;13871:3;13902:1;13898:6;13895:1;13892:13;13889:39;;;13908:18;;:::i;:::-;-1:-1:-1;13944:9:1;;13831:128::o;14323:125::-;14363:4;14391:1;14388;14385:8;14382:34;;;14396:18;;:::i;:::-;-1:-1:-1;14433:9:1;;14323:125::o;15225:184::-;15295:6;15348:2;15336:9;15327:7;15323:23;15319:32;15316:52;;;15364:1;15361;15354:12;15316:52;-1:-1:-1;15387:16:1;;15225:184;-1:-1:-1;15225:184:1:o;17044:127::-;17105:10;17100:3;17096:20;17093:1;17086:31;17136:4;17133:1;17126:15;17160:4;17157:1;17150:15;21602:461;21655:3;21693:5;21687:12;21720:6;21715:3;21708:19;21746:4;21775:2;21770:3;21766:12;21759:19;;21812:2;21805:5;21801:14;21833:1;21843:195;21857:6;21854:1;21851:13;21843:195;;;21922:13;;-1:-1:-1;;;;;21918:39:1;21906:52;;21978:12;;;;22013:15;;;;21954:1;21872:9;21843:195;;;-1:-1:-1;22054:3:1;;21602:461;-1:-1:-1;;;;;21602:461:1:o;22068:510::-;22339:6;22328:9;22321:25;22382:3;22377:2;22366:9;22362:18;22355:31;22302:4;22403:57;22455:3;22444:9;22440:19;22432:6;22403:57;:::i;:::-;-1:-1:-1;;;;;22496:32:1;;;;22491:2;22476:18;;22469:60;-1:-1:-1;22560:2:1;22545:18;22538:34;22395:65;22068:510;-1:-1:-1;;22068:510:1:o;23391:401::-;23593:2;23575:21;;;23632:2;23612:18;;;23605:30;23671:34;23666:2;23651:18;;23644:62;-1:-1:-1;;;23737:2:1;23722:18;;23715:35;23782:3;23767:19;;23391:401::o;23797:399::-;23999:2;23981:21;;;24038:2;24018:18;;;24011:30;24077:34;24072:2;24057:18;;24050:62;-1:-1:-1;;;24143:2:1;24128:18;;24121:33;24186:3;24171:19;;23797:399::o;27234:582::-;27533:6;27522:9;27515:25;27576:6;27571:2;27560:9;27556:18;27549:34;27619:3;27614:2;27603:9;27599:18;27592:31;27496:4;27640:57;27692:3;27681:9;27677:19;27669:6;27640:57;:::i;:::-;-1:-1:-1;;;;;27733:32:1;;;;27728:2;27713:18;;27706:60;-1:-1:-1;27797:3:1;27782:19;27775:35;27632:65;27234:582;-1:-1:-1;;;27234:582:1:o
Swarm Source
ipfs://ce67b8081a45f29ae23fec54bd20890fb08986710055d6692669874aa03610ee
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.