ETH Price: $3,479.41 (+4.00%)

Token

SUPERCATS (S-CATS)
 

Overview

Max Total Supply

10,000,000,000,000 S-CATS

Holders

291

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
0.00000001 S-CATS

Value
$0.00
0x659937291cce66fc0ab7147637f989a7285e36ec
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SUPERCATS

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-31
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.13;

interface IERC20 {
	
	function totalSupply() external view returns (uint256);
	function balanceOf(address account) external view returns (uint256);
	function transfer(address recipient, uint256 amount) external returns (bool);
	function allowance(address owner, address spender) external view returns (uint256);
	function approve(address spender, uint256 amount) external returns (bool);
	function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
	
	event Transfer(address indexed from, address indexed to, uint256 value);
	event Approval(address indexed owner, address indexed spender, uint256 value);

	event TransferDetails(address indexed from, address indexed to, uint256 total_Amount, uint256 reflected_amount, uint256 total_TransferAmount, uint256 reflected_TransferAmount);
}

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;
	}
}

library Address {
	
	function isContract(address account) internal view returns (bool) {
		uint256 size;
		assembly { size := extcodesize(account) }
		return size > 0;
	}

	function sendValue(address payable recipient, uint256 amount) internal {
		require(address(this).balance >= amount, "Address: insufficient balance");
		(bool success, ) = recipient.call{ value: amount }("");
		require(success, "Address: unable to send value, recipient may have reverted");
	}
	
	function functionCall(address target, bytes memory data) internal returns (bytes memory) {
	  return functionCall(target, data, "Address: low-level call failed");
	}
	
	function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
		return functionCallWithValue(target, data, 0, errorMessage);
	}
	
	function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
		return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
	}
	
	function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
		require(address(this).balance >= value, "Address: insufficient balance for call");
		require(isContract(target), "Address: call to non-contract");
		(bool success, bytes memory returndata) = target.call{ value: value }(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}
	
	function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
		return functionStaticCall(target, data, "Address: low-level static call failed");
	}
	
	function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
		require(isContract(target), "Address: static call to non-contract");
		(bool success, bytes memory returndata) = target.staticcall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}


	function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
		return functionDelegateCall(target, data, "Address: low-level delegate call failed");
	}
	
	function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
		require(isContract(target), "Address: delegate call to non-contract");
		(bool success, bytes memory returndata) = target.delegatecall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
		if (success) {
		    return returndata;
		} else {
		    if (returndata.length > 0) {
		         assembly {
		            let returndata_size := mload(returndata)
		            revert(add(32, returndata), returndata_size)
		        }
		    } else {
		        revert(errorMessage);
		    }
		}
	}
}



abstract contract Ownable is Context {
	address private _owner;

	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
	constructor () {
		_owner = _msgSender();
		emit OwnershipTransferred(address(0), _owner);
	}
	
	function owner() public view virtual returns (address) {
		return _owner;
	}
	
	modifier onlyOwner() {
		require(owner() == _msgSender(), "Ownable: caller is not the owner");
		_;
	}

	function transferOwnership(address newOwner) public virtual onlyOwner {
		require(newOwner != address(0), "Ownable: new owner is the zero address");
		emit OwnershipTransferred(_owner, newOwner);
		_owner = newOwner;
	}
}

interface IUniswapV2Factory {
	function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router01 {
	function factory() external pure returns (address);
	function WETH() external pure returns (address);
	function addLiquidityETH(
		address token,
		uint amountTokenDesired,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline
	) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
	function swapExactTokensForETHSupportingFeeOnTransferTokens(
		uint amountIn,
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external;
}


contract SUPERCATS is Context, IERC20, Ownable {
	using Address for address;

	mapping (address => uint256) public _balance_reflected;
	mapping (address => uint256) public _balance_total;
	mapping (address => mapping (address => uint256)) private _allowances;
	
	mapping (address => bool) public _isExcluded;
	
	bool public blacklistMode = true;
	mapping (address => bool) public isBlacklisted;

	bool public tradingOpen = false;
	bool public TOBITNA = true;
	
	uint256 private constant MAX = ~uint256(0);

	uint8 public constant decimals = 8;
	uint256 public constant totalSupply = 10 * 10**12 * 10**decimals;

	uint256 private _supply_reflected   = (MAX - (MAX % totalSupply));

	string public constant name = "SUPERCATS";
	string public constant symbol = "S-CATS";

	uint256 public _fee_treasury_convert_limit = totalSupply / 2000;
	uint256 public _fee_marketing_convert_limit = totalSupply / 5000;

	uint256 public _fee_treasury_min_bal = 0;
	uint256 public _fee_marketing_min_bal = 0;
	
	uint256 public _fee_reflection = 1;
	uint256 private _fee_reflection_old = _fee_reflection;
	uint256 public _contractReflectionStored = 0;
	
	uint256 public _fee_marketing = 3;
	uint256 private _fee_marketing_old = _fee_marketing;
	address payable public _wallet_marketing;

	uint256 public _fee_treasury = 2;
	uint256 private _fee_treasury_old = _fee_treasury;
	address payable public _wallet_treasury;

	uint256 public _fee_liquidity = 1;
	uint256 private _fee_liquidity_old = _fee_liquidity;

	uint256 public _fee_denominator = 100;

	IUniswapV2Router02 public immutable uniswapV2Router;
	address public immutable uniswapV2Pair;
	bool inSwapAndLiquify;
	bool public swapAndLiquifyEnabled = true;

	uint256 public _maxWalletToken = totalSupply / 50;
	uint256 public _maxTxAmount =  totalSupply / 50;

	mapping (address => bool) public isFeeExempt;
	mapping (address => bool) public isTxLimitExempt;
	mapping (address => bool) public isWalletLimitExempt;
	address[] public _excluded;

	uint256 public swapThreshold =  ( totalSupply * 2 ) / 1000;

	uint256 public sellMultiplier = 100;
	uint256 public buyMultiplier = 300;
	uint256 public transferMultiplier = 300;

	event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
	event SwapAndLiquify(
		uint256 tokensSwapped,
		uint256 ethReceived,
		uint256 tokensIntoLiqudity
	);

	address constant deadAddress = 0x000000000000000000000000000000000000dEaD;
	
	modifier lockTheSwap {
		inSwapAndLiquify = true;
		_;
		inSwapAndLiquify = false;
	}
	
	constructor () {
		_balance_reflected[owner()] = _supply_reflected;

		_wallet_marketing = payable(0x3d93d7f603Fef51d0939031469Fc54dA7380831E);
		_wallet_treasury = payable(0x59Ba20fe2CD31ADc55be13A72B93bFD0235E2bAf);
		
		IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
		uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
		uniswapV2Router = _uniswapV2Router;

		isFeeExempt[msg.sender] = true;
		isFeeExempt[address(this)] = true;
		isFeeExempt[deadAddress] = true;

		isTxLimitExempt[msg.sender] = true;
		isTxLimitExempt[deadAddress] = true;
		isTxLimitExempt[_wallet_marketing] = true;
		isTxLimitExempt[_wallet_treasury] = true;

		isWalletLimitExempt[msg.sender] = true;
		isWalletLimitExempt[address(this)] = true;
		isWalletLimitExempt[deadAddress] = true;
		isWalletLimitExempt[_wallet_marketing] = true;
		isWalletLimitExempt[_wallet_treasury] = true;
		
		emit Transfer(address(0), owner(), totalSupply);
	}

	function balanceOf(address account) public view override returns (uint256) {
		if (_isExcluded[account]) return _balance_total[account];
		return tokenFromReflection(_balance_reflected[account]);
	}

	function transfer(address recipient, uint256 amount) public override returns (bool) {
		_transfer(_msgSender(), recipient, amount);
		return true;
	}

	function allowance(address owner, address spender) public view override returns (uint256) {
		return _allowances[owner][spender];
	}

	function approve(address spender, uint256 amount) public override returns (bool) {
		_approve(_msgSender(), spender, amount);
		return true;
	}

	function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
		_transfer(sender, recipient, amount);
		require (_allowances[sender][_msgSender()] >= amount,"ERC20: transfer amount exceeds allowance");
		_approve(sender, _msgSender(), (_allowances[sender][_msgSender()]-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) {
		require (_allowances[_msgSender()][spender] >= subtractedValue,"ERC20: decreased allowance below zero");
		_approve(_msgSender(), spender, (_allowances[_msgSender()][spender] - subtractedValue));
		return true;
	}

	function ___tokenInfo () public view returns(
		uint256 MaxTxAmount,
		uint256 MaxWalletToken,
		uint256 TotalSupply,
		uint256 Reflected_Supply,
		uint256 Reflection_Rate,
		bool TradingOpen
		) {
		return (_maxTxAmount, _maxWalletToken, totalSupply, _supply_reflected, _getRate(), tradingOpen );
	}

	function ___feesInfo () public view returns(
		uint256 SwapThreshold,
		uint256 contractTokenBalance,
		uint256 Reflection_tokens_stored
		) {
		return (swapThreshold, balanceOf(address(this)), _contractReflectionStored);
	}

	function ___wallets () public view returns(
		uint256 Reflection_Fees,
		uint256 Liquidity_Fee,
		uint256 Treasury_Fee,
		uint256 Treasury_Fee_Convert_Limit,
		uint256 Treasury_Fee_Minimum_Balance,
		uint256 Marketing_Fee,
		uint256 Marketing_Fee_Convert_Limit,
		uint256 Marketing_Fee_Minimum_Balance
	) {
		return ( _fee_reflection, _fee_liquidity,
			_fee_treasury,_fee_treasury_convert_limit,_fee_treasury_min_bal,
			_fee_marketing,_fee_marketing_convert_limit, _fee_marketing_min_bal);
	}

	function changeWallets(address _newMarketing, address _newTreasury) external onlyOwner {
		_wallet_marketing = payable(_newMarketing);
		_wallet_treasury = payable(_newTreasury);
	}

	function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
		require(rAmount <= _supply_reflected, "Amount must be less than total reflections");
		uint256 currentRate =  _getRate();
		return (rAmount / currentRate);
	}

	function excludeFromReward(address account) external onlyOwner {
		require(!_isExcluded[account], "Account is already excluded");
		if(_balance_reflected[account] > 0) {
			_balance_total[account] = tokenFromReflection(_balance_reflected[account]);
		}
		_isExcluded[account] = true;
		_excluded.push(account);
	}

	function includeInReward(address account) external onlyOwner {
		require(_isExcluded[account], "Account is already included");
		for (uint256 i = 0; i < _excluded.length; i++) {
			if (_excluded[i] == account) {
				_excluded[i] = _excluded[_excluded.length - 1];
				_balance_total[account] = 0;
				_isExcluded[account] = false;
				_excluded.pop();
				break;
			}
		}
	}

	function tradingStatus(bool _status, bool _ab) external onlyOwner {
		tradingOpen = _status;
		TOBITNA = _ab;
	}

	function setMaxTxPercent_base1000(uint256 maxTxPercentBase1000) external onlyOwner {
		_maxTxAmount = (totalSupply * maxTxPercentBase1000 ) / 1000;
	}

	 function setMaxWalletPercent_base1000(uint256 maxWallPercentBase1000) external onlyOwner {
		_maxWalletToken = (totalSupply * maxWallPercentBase1000 ) / 1000;
	}
	
	function setSwapSettings(bool _status, uint256 _threshold) external onlyOwner {
		swapAndLiquifyEnabled = _status;
		swapThreshold = _threshold;
	}

	function enable_blacklist(bool _status) external onlyOwner {
		blacklistMode = _status;
	}

	function manage_blacklist(address[] calldata addresses, bool status) external onlyOwner {
		for (uint256 i; i < addresses.length; ++i) {
			isBlacklisted[addresses[i]] = status;
		}
	}

	function manage_excludeFromFee(address[] calldata addresses, bool status) external onlyOwner {
		for (uint256 i; i < addresses.length; ++i) {
			isFeeExempt[addresses[i]] = status;
		}
	}

	function manage_TxLimitExempt(address[] calldata addresses, bool status) external onlyOwner {
		require(addresses.length < 501,"GAS Error: max limit is 500 addresses");
		for (uint256 i=0; i < addresses.length; ++i) {
			isTxLimitExempt[addresses[i]] = status;
		}
	}

	function manage_WalletLimitExempt(address[] calldata addresses, bool status) external onlyOwner {
		require(addresses.length < 501,"GAS Error: max limit is 500 addresses");
		for (uint256 i=0; i < addresses.length; ++i) {
			isWalletLimitExempt[addresses[i]] = status;
		}
	}
	

/* Airdrop Begins */
	
	function multitransfer(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

		uint256 sccc = 0;
		uint256 reflectRate = _getRate();
		require(addresses.length == tokens.length,"Mismatch between Address and token count");


		for(uint i=0; i < addresses.length; i++){
			sccc = sccc + tokens[i];
		}
		require(balanceOf(msg.sender) >= sccc, "Not enough tokens to airdrop");

		_balance_reflected[from] = _balance_reflected[from] - sccc * reflectRate ;

		if (_isExcluded[from]){
			_balance_total[from] = _balance_total[from] - sccc;
		}

		for(uint i=0; i < addresses.length; i++) {
		
		if (_isExcluded[addresses[i]]){
			_balance_total[addresses[i]] = _balance_total[addresses[i]] + tokens[i]; 
		}
		_balance_reflected[addresses[i]] = _balance_reflected[addresses[i]] + tokens[i] * reflectRate;

		emit Transfer(from,addresses[i],tokens[i]);
	}

}

	function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
		uint256 amountToClear = amountPercentage * address(this).balance / 100;
		payable(msg.sender).transfer(amountToClear);
	}

	function clearStuckToken(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success) {

		if(tokens == 0){
			tokens = IERC20(tokenAddress).balanceOf(address(this));
		}
		return IERC20(tokenAddress).transfer(msg.sender, tokens);
	}

	//core
	function _getRate() private view returns(uint256) {
		(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
		return rSupply / tSupply;
	}

	function _getCurrentSupply() private view returns(uint256, uint256) {
		uint256 rSupply = _supply_reflected;
		uint256 tSupply = totalSupply;
		for (uint256 i = 0; i < _excluded.length; i++) {
			if (_balance_reflected[_excluded[i]] > rSupply || _balance_total[_excluded[i]] > tSupply) return (_supply_reflected, totalSupply);
			rSupply = rSupply - _balance_reflected[_excluded[i]];
			tSupply = tSupply - _balance_total[_excluded[i]];
		}
		if (rSupply < (_supply_reflected/totalSupply)) return (_supply_reflected, totalSupply);
		return (rSupply, tSupply);
	}


	function _getValues(uint256 tAmount, address recipient, address sender) private view returns (
		uint256 rAmount, uint256 rTransferAmount, uint256 rReflection,
		uint256 tTransferAmount, uint256 tMarketing, uint256 tLiquidity, uint256 tTreasury, uint256 tReflection) {

		uint256 multiplier = transferMultiplier;

		if(recipient == uniswapV2Pair) {
			multiplier = sellMultiplier;
		} else if(sender == uniswapV2Pair) {
			multiplier = buyMultiplier;
		}

		tMarketing = ( tAmount * _fee_marketing ) * multiplier / (_fee_denominator * 100);
		tLiquidity = ( tAmount * _fee_liquidity ) * multiplier / (_fee_denominator * 100);
		tTreasury = ( tAmount * _fee_treasury  ) * multiplier / (_fee_denominator * 100);
		tReflection = ( tAmount * _fee_reflection ) * multiplier  / (_fee_denominator * 100);

		tTransferAmount = tAmount - ( tMarketing + tLiquidity + tTreasury + tReflection);
		rReflection = tReflection * _getRate();
		rAmount = tAmount * _getRate();
		rTransferAmount = tTransferAmount * _getRate();
	}


	function _fees_to_eth_process( address payable wallet, uint256 tokensToConvert) private lockTheSwap {

		uint256 rTokensToConvert = tokensToConvert * _getRate();
		_balance_reflected[wallet] = _balance_reflected[wallet] - rTokensToConvert;
		
		if (_isExcluded[wallet]){
			_balance_total[wallet] = _balance_total[wallet] - tokensToConvert;
		}

		_balance_reflected[address(this)] = _balance_reflected[address(this)] + rTokensToConvert;

		emit Transfer(wallet, address(this), tokensToConvert);

		swapTokensForEthAndSend(tokensToConvert,wallet);

	}

	function _fees_to_eth(uint256 tokensToConvert, address payable feeWallet, uint256 minBalanceToKeep) private {

		if(tokensToConvert == 0){
			return;
		}

		if(tokensToConvert > _maxTxAmount){
			tokensToConvert = _maxTxAmount;
		}

		if((tokensToConvert+minBalanceToKeep)  <= balanceOf(feeWallet)){
			_fees_to_eth_process(feeWallet,tokensToConvert);
		}
	}

	function _takeFee(uint256 feeAmount, address receiverWallet) private {
		uint256 reflectedReeAmount = feeAmount * _getRate();
		_balance_reflected[receiverWallet] = _balance_reflected[receiverWallet] + reflectedReeAmount;

		if(_isExcluded[receiverWallet]){
			_balance_total[receiverWallet] = _balance_total[receiverWallet] + feeAmount;
		}
		if(feeAmount > 0){
			emit Transfer(msg.sender, receiverWallet, feeAmount);
		}
	}

	function _setAllFees(uint256 marketingFee, uint256 liquidityFees, uint256 treasuryFee, uint256 reflectionFees) private {
		_fee_marketing = marketingFee;
		_fee_liquidity = liquidityFees;
		_fee_treasury = treasuryFee;
		_fee_reflection = reflectionFees;
	}

	function setMultipliers(uint256 _buy, uint256 _sell, uint256 _trans) external onlyOwner {
		sellMultiplier = _sell;
		buyMultiplier = _buy;
		transferMultiplier = _trans;
	}

	function set_All_Fees_Triggers(uint256 marketing_fee_convert_limit, uint256 treasury_fee_convert_limit) external onlyOwner {
		_fee_marketing_convert_limit = marketing_fee_convert_limit;
		_fee_treasury_convert_limit = treasury_fee_convert_limit;
	}

	function set_All_Fees_Minimum_Balance(uint256 marketing_fee_minimum_balance, uint256 treasury_fee_minimum_balance) external onlyOwner {
		_fee_treasury_min_bal = treasury_fee_minimum_balance;
		_fee_marketing_min_bal = marketing_fee_minimum_balance;
	}

	function set_All_Fees(uint256 Treasury_Fee, uint256 Liquidity_Fees, uint256 Reflection_Fees, uint256 Marketing_Fee) external onlyOwner {
		uint256 total_fees =  Marketing_Fee + Liquidity_Fees +  Treasury_Fee + Reflection_Fees;
		require(total_fees < 31, "Max fee allowed is 30%");
		_setAllFees( Marketing_Fee, Liquidity_Fees, Treasury_Fee, Reflection_Fees);
	}

	function removeAllFee() private {
		_fee_marketing_old = _fee_marketing;
		_fee_liquidity_old = _fee_liquidity;
		_fee_treasury_old = _fee_treasury;
		_fee_reflection_old = _fee_reflection;

		_setAllFees(0,0,0,0);
	}
	
	function restoreAllFee() private {
		_setAllFees(_fee_marketing_old, _fee_liquidity_old, _fee_treasury_old, _fee_reflection_old);
	}


	function swapAndLiquify(uint256 tokensToSwap) private lockTheSwap {
		
		uint256 tokensHalf = tokensToSwap / 2;
		uint256 contractETHBalance = address(this).balance;

		swapTokensForEth(tokensHalf);
		uint256 ethSwapped = address(this).balance - contractETHBalance;
		addLiquidity(tokensHalf,ethSwapped);

		emit SwapAndLiquify(tokensToSwap, tokensHalf, ethSwapped);

	}

	function swapTokensForEth(uint256 tokenAmount) private {
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = uniswapV2Router.WETH();
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			tokenAmount,
			0,
			path,
			address(this),
			block.timestamp
		);
	}

	function swapTokensForEthAndSend(uint256 tokenAmount, address payable receiverWallet) private {
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = uniswapV2Router.WETH();
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			tokenAmount,
			0,
			path,
			receiverWallet,
			block.timestamp
		);
	}

	function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.addLiquidityETH{value: ethAmount}(
			address(this),
			tokenAmount,
			0,
			0,
			owner(),
			block.timestamp
		);
	}


	function _approve(address owner, address spender, uint256 amount) private {
		require(owner != address(0), "ERC20: approve from the zero address");
		require(spender != address(0), "ERC20: approve to the zero address");

		_allowances[owner][spender] = amount;
		emit Approval(owner, spender, amount);
	}

	function _transfer(address from, address to, uint256 amount) private {

		if(from != owner() && to != owner()){
			require(tradingOpen,"Trading not open yet");

			if(TOBITNA && from == uniswapV2Pair){
				isBlacklisted[to] = true;
			}
		}

		if(blacklistMode && !TOBITNA){
			require(!isBlacklisted[from],"Blacklisted");
		}
		
		require((amount <= _maxTxAmount) || isTxLimitExempt[from] || isTxLimitExempt[to], "Max TX Limit Exceeded");

		if (!isWalletLimitExempt[from] && !isWalletLimitExempt[to] && to != uniswapV2Pair) {
		    require((balanceOf(to) + amount) <= _maxWalletToken,"max wallet limit reached");
		}


		// extra bracket to supress stack too deep error
		{
		    uint256 contractTokenBalance = balanceOf(address(this));
		
		    if(contractTokenBalance >= _maxTxAmount) {
		        contractTokenBalance = _maxTxAmount - 1;
		    }
		
		    bool overMinTokenBalance = contractTokenBalance >= swapThreshold;
		    if (overMinTokenBalance &&
		        !inSwapAndLiquify &&
		        from != uniswapV2Pair &&
		        swapAndLiquifyEnabled
		    ) {
		        contractTokenBalance = swapThreshold;
		        swapAndLiquify(contractTokenBalance);
		    }

		    // Convert fees to eth
		    if(!inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled){
		        _fees_to_eth(_fee_treasury_convert_limit,_wallet_treasury, _fee_treasury_min_bal);
		        _fees_to_eth(_fee_marketing_convert_limit,_wallet_marketing, _fee_marketing_min_bal);
		    }
		
		}
		
		bool takeFee = true;
		if(isFeeExempt[from] || isFeeExempt[to]){
		    takeFee = false;
		    removeAllFee();
		}
		
		(uint256 rAmount, uint256 rTransferAmount, uint256 rReflection, uint256 tTransferAmount, uint256 tMarketing, uint256 tLiquidity, uint256 tTreasury,  uint256 tReflection) = _getValues(amount, to, from);

		_transferStandard(from, to, amount, rAmount, tTransferAmount, rTransferAmount);

		_supply_reflected = _supply_reflected - rReflection;
		_contractReflectionStored = _contractReflectionStored + tReflection;

		if(!takeFee){
		    restoreAllFee();
		} else{
		    _takeFee(tMarketing,_wallet_marketing);
		    _takeFee(tLiquidity,address(this));
		    _takeFee(tTreasury,_wallet_treasury);
		}

	}

	function _transferStandard(address from, address to, uint256 tAmount, uint256 rAmount, uint256 tTransferAmount, uint256 rTransferAmount) private {
		_balance_reflected[from]    = _balance_reflected[from]  - rAmount;

		if (_isExcluded[from]){
		    _balance_total[from]    = _balance_total[from]      - tAmount;
		}

		if (_isExcluded[to]){
		    _balance_total[to]      = _balance_total[to]        + tTransferAmount;
		}
		_balance_reflected[to]      = _balance_reflected[to]    + rTransferAmount;

		if(tTransferAmount > 0){
			emit Transfer(from, to, tTransferAmount);	
		}
	}

	receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"total_Amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflected_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total_TransferAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflected_TransferAmount","type":"uint256"}],"name":"TransferDetails","type":"event"},{"inputs":[],"name":"TOBITNA","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"___feesInfo","outputs":[{"internalType":"uint256","name":"SwapThreshold","type":"uint256"},{"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"internalType":"uint256","name":"Reflection_tokens_stored","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"___tokenInfo","outputs":[{"internalType":"uint256","name":"MaxTxAmount","type":"uint256"},{"internalType":"uint256","name":"MaxWalletToken","type":"uint256"},{"internalType":"uint256","name":"TotalSupply","type":"uint256"},{"internalType":"uint256","name":"Reflected_Supply","type":"uint256"},{"internalType":"uint256","name":"Reflection_Rate","type":"uint256"},{"internalType":"bool","name":"TradingOpen","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"___wallets","outputs":[{"internalType":"uint256","name":"Reflection_Fees","type":"uint256"},{"internalType":"uint256","name":"Liquidity_Fee","type":"uint256"},{"internalType":"uint256","name":"Treasury_Fee","type":"uint256"},{"internalType":"uint256","name":"Treasury_Fee_Convert_Limit","type":"uint256"},{"internalType":"uint256","name":"Treasury_Fee_Minimum_Balance","type":"uint256"},{"internalType":"uint256","name":"Marketing_Fee","type":"uint256"},{"internalType":"uint256","name":"Marketing_Fee_Convert_Limit","type":"uint256"},{"internalType":"uint256","name":"Marketing_Fee_Minimum_Balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balance_reflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balance_total","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contractReflectionStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_excluded","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_liquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_marketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_marketing_convert_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_marketing_min_bal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_reflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_treasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_treasury_convert_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_treasury_min_bal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wallet_marketing","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wallet_treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newMarketing","type":"address"},{"internalType":"address","name":"_newTreasury","type":"address"}],"name":"changeWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"clearStuckToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","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":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enable_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_TxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_WalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multitransfer","outputs":[],"stateMutability":"nonpayable","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":"sellMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercentBase1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercentBase1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setMultipliers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Treasury_Fee","type":"uint256"},{"internalType":"uint256","name":"Liquidity_Fees","type":"uint256"},{"internalType":"uint256","name":"Reflection_Fees","type":"uint256"},{"internalType":"uint256","name":"Marketing_Fee","type":"uint256"}],"name":"set_All_Fees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketing_fee_minimum_balance","type":"uint256"},{"internalType":"uint256","name":"treasury_fee_minimum_balance","type":"uint256"}],"name":"set_All_Fees_Minimum_Balance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketing_fee_convert_limit","type":"uint256"},{"internalType":"uint256","name":"treasury_fee_convert_limit","type":"uint256"}],"name":"set_All_Fees_Triggers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"bool","name":"_ab","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526005805460ff191660011790556007805461ffff19166101001790556200002e6008600a620006a7565b62000040906509184e72a000620006bf565b6200004e90600019620006f7565b6200005c906000196200070e565b6008556107d06008600a620000729190620006a7565b62000084906509184e72a000620006bf565b62000090919062000728565b600955611388620000a46008600a620006a7565b620000b6906509184e72a000620006bf565b620000c2919062000728565b600a9081556000600b819055600c8190556001600d819055600e819055600f919091556003601081905560115560026013819055601455601681905560175560646018556019805461ff0019166101001790556032906200012690600890620006a7565b62000138906509184e72a000620006bf565b62000144919062000728565b601a556032620001576008600a620006a7565b62000169906509184e72a000620006bf565b62000175919062000728565b601b556103e8620001896008600a620006a7565b6200019b906509184e72a000620006bf565b620001a8906002620006bf565b620001b4919062000728565b602055606460215561012c60225561012c602355348015620001d557600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600854600160006200022f6000546001600160a01b031690565b6001600160a01b03168152602080820192909252604090810160002092909255601280546001600160a01b0319908116733d93d7f603fef51d0939031469fc54da7380831e17909155601580549091167359ba20fe2cd31adc55be13a72b93bfd0235e2baf179055815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a0155926004808401938290030181865afa158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030991906200073f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000357573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037d91906200073f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f191906200073f565b6001600160a01b0390811660a052818116608052336000818152601c602090815260408083208054600160ff1991821681179092553080865283862080548316841790557fa48bd8e7b1565515cde2859b6cc48308ba05b5325bcf90fb096b9ac0b8087dfc8054831684179055868652601d855283862080548316841790557ffa758cef5bd0db441ee78e87b9ceab03f7b5d7b78ff593b3cf8150611abcb999805483168417905560128054891687528487208054841685179055601580548a1688528588208054851686179055978752601e9095528386208054831684179055855282852080548216831790557f8a622fd893f993f50f1795ae2bf707bdf4143f678ec4998626679a2f447616df805482168317905592548616845281842080548416821790559354851683528220805490911690921790915554166001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620005686008600a620006a7565b6200057a906509184e72a000620006bf565b60405190815260200160405180910390a3506200076a565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005e9578160001904821115620005cd57620005cd62000592565b80851615620005db57918102915b93841c9390800290620005ad565b509250929050565b6000826200060257506001620006a1565b816200061157506000620006a1565b81600181146200062a5760028114620006355762000655565b6001915050620006a1565b60ff84111562000649576200064962000592565b50506001821b620006a1565b5060208310610133831016604e8410600b84101617156200067a575081810a620006a1565b620006868383620005a8565b80600019048211156200069d576200069d62000592565b0290505b92915050565b6000620006b860ff841683620005f1565b9392505050565b6000816000190483118215151615620006dc57620006dc62000592565b500290565b634e487b7160e01b600052601260045260246000fd5b600082620007095762000709620006e1565b500690565b60008282101562000723576200072362000592565b500390565b6000826200073a576200073a620006e1565b500490565b6000602082840312156200075257600080fd5b81516001600160a01b0381168114620006b857600080fd5b60805160a051613abb620007f26000396000818161078a01528181612241015281816123ef015281816124d601528181612541015281816127fa015261283c0152600081816105a001528181612e7701528181612f3001528181612f6c01528181612fde015281816130050152818161325c0152818161331501526133510152613abb6000f3fe6080604052600436106103f25760003560e01c806367dc9e9211610208578063a9059cbb11610118578063d10ae165116100ab578063f2fde38b1161007a578063f2fde38b14610cd1578063fd748c3014610cf1578063fe575a8714610d07578063fed0d2a114610d37578063ffb54a9914610d4d57600080fd5b8063d10ae16514610c36578063dd62ed3e14610c55578063e092034914610c9b578063e4ff54b214610cbb57600080fd5b8063bd9ab537116100e7578063bd9ab53714610ba6578063c867d60b14610bc6578063ccc569df14610bf6578063d0e1032614610c1657600080fd5b8063a9059cbb14610b2d578063b1eb20e914610b4d578063b839257614610b7a578063b85f117514610b9057600080fd5b80638d55f9051161019b57806395d89b411161016a57806395d89b4114610a855780639bef432614610ab7578063a457c2d714610acd578063a61699c414610aed578063a7eb8ee814610b0d57600080fd5b80638d55f90514610a115780638da5cb5b14610a315780638e2eee8414610a4f578063910fb00814610a6f57600080fd5b806378109e54116101d757806378109e541461099b5780637d1db4a5146109b1578063896648c1146109c75780638b42507f146109e157600080fd5b806367dc9e92146108db5780636ce46bc31461093b57806370a082311461095b57806377b54bad1461097b57600080fd5b80632d838119116103035780634a74bb021161029657806352390c021161026557806352390c02146108215780635921652f146108415780635e562f3b14610857578063617c62a114610877578063666a245d146108bb57600080fd5b80634a74bb02146107ac5780634bd064cd146107cb5780634be9d869146107e15780634d09deb31461080157600080fd5b80633685d419116102d25780633685d4191461070857806339509351146107285780633f4218e01461074857806349bd5a5e1461077857600080fd5b80632d838119146106955780633121c7c0146106b5578063313ce567146106cb5780633417ab1d146106f257600080fd5b80630b285b1f116103865780631c3c4fec116103555780631c3c4fec146105ef5780631da1db5e1461061f57806323b872dd1461063f57806328e2eaab1461065f5780632c97d3d41461067557600080fd5b80630b285b1f14610548578063166eab6b146105785780631694505e1461058e57806318160ddd146105da57600080fd5b806306f3a47b116103c257806306f3a47b1461049657806306fdde03146104b657806309302dc6146104f8578063095ea7b31461051857600080fd5b8062108683146103fe578063034c4897146104205780630445b66714610440578063053cfa251461046957600080fd5b366103f957005b600080fd5b34801561040a57600080fd5b5061041e610419366004613423565b610d67565b005b34801561042c57600080fd5b5061041e61043b36600461347a565b610e30565b34801561044c57600080fd5b5061045660205481565b6040519081526020015b60405180910390f35b34801561047557600080fd5b506104566104843660046134c8565b60026020526000908152604090205481565b3480156104a257600080fd5b5061041e6104b13660046134e5565b610e7e565b3480156104c257600080fd5b506104eb6040518060400160405280600981526020016853555045524341545360b81b81525081565b6040516104609190613507565b34801561050457600080fd5b5061041e61051336600461355c565b610eb0565b34801561052457600080fd5b50610538610533366004613575565b610f14565b6040519015158152602001610460565b34801561055457600080fd5b506105386105633660046134c8565b60046020526000908152604090205460ff1681565b34801561058457600080fd5b5061045660135481565b34801561059a57600080fd5b506105c27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610460565b3480156105e657600080fd5b50610456610f2b565b3480156105fb57600080fd5b50610604610f4a565b60408051938452602084019290925290820152606001610460565b34801561062b57600080fd5b5061041e61063a36600461355c565b610f69565b34801561064b57600080fd5b5061053861065a3660046135a1565b610fe0565b34801561066b57600080fd5b50610456600c5481565b34801561068157600080fd5b506015546105c2906001600160a01b031681565b3480156106a157600080fd5b506104566106b036600461355c565b6110b6565b3480156106c157600080fd5b5061045660225481565b3480156106d757600080fd5b506106e0600881565b60405160ff9091168152602001610460565b3480156106fe57600080fd5b50610456600a5481565b34801561071457600080fd5b5061041e6107233660046134c8565b61113a565b34801561073457600080fd5b50610538610743366004613575565b6112f0565b34801561075457600080fd5b506105386107633660046134c8565b601c6020526000908152604090205460ff1681565b34801561078457600080fd5b506105c27f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b857600080fd5b5060195461053890610100900460ff1681565b3480156107d757600080fd5b5061045660095481565b3480156107ed57600080fd5b5061041e6107fc366004613423565b611327565b34801561080d57600080fd5b506105c261081c36600461355c565b6113e1565b34801561082d57600080fd5b5061041e61083c3660046134c8565b61140b565b34801561084d57600080fd5b5061045660235481565b34801561086357600080fd5b5061041e6108723660046135e2565b61155e565b34801561088357600080fd5b5061088c61159b565b6040805196875260208701959095529385019290925260608401526080830152151560a082015260c001610460565b3480156108c757600080fd5b506012546105c2906001600160a01b031681565b3480156108e757600080fd5b50600d54601654601354600954600b54601054600a54600c54604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610460565b34801561094757600080fd5b5061041e6109563660046135ff565b6115ed565b34801561096757600080fd5b506104566109763660046134c8565b611628565b34801561098757600080fd5b50610538610996366004613575565b611687565b3480156109a757600080fd5b50610456601a5481565b3480156109bd57600080fd5b50610456601b5481565b3480156109d357600080fd5b506005546105389060ff1681565b3480156109ed57600080fd5b506105386109fc3660046134c8565b601d6020526000908152604090205460ff1681565b348015610a1d57600080fd5b5061041e610a2c36600461362b565b611796565b348015610a3d57600080fd5b506000546001600160a01b03166105c2565b348015610a5b57600080fd5b5061041e610a6a366004613423565b611849565b348015610a7b57600080fd5b5061045660165481565b348015610a9157600080fd5b506104eb60405180604001604052806006815260200165532d4341545360d01b81525081565b348015610ac357600080fd5b50610456600f5481565b348015610ad957600080fd5b50610538610ae8366004613575565b6118e2565b348015610af957600080fd5b5061041e610b0836600461365d565b611999565b348015610b1957600080fd5b5061041e610b283660046134e5565b6119f1565b348015610b3957600080fd5b50610538610b48366004613575565b611a26565b348015610b5957600080fd5b50610456610b683660046134c8565b60016020526000908152604090205481565b348015610b8657600080fd5b5061045660105481565b348015610b9c57600080fd5b50610456600d5481565b348015610bb257600080fd5b5061041e610bc136600461355c565b611a33565b348015610bd257600080fd5b50610538610be13660046134c8565b601e6020526000908152604090205460ff1681565b348015610c0257600080fd5b5061041e610c1136600461368b565b611a97565b348015610c2257600080fd5b5061041e610c3136600461370e565b611ec3565b348015610c4257600080fd5b5060075461053890610100900460ff1681565b348015610c6157600080fd5b50610456610c7036600461365d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610ca757600080fd5b5061041e610cb6366004613423565b611f0b565b348015610cc757600080fd5b50610456600b5481565b348015610cdd57600080fd5b5061041e610cec3660046134c8565b611fa4565b348015610cfd57600080fd5b5061045660185481565b348015610d1357600080fd5b50610538610d223660046134c8565b60066020526000908152604090205460ff1681565b348015610d4357600080fd5b5061045660215481565b348015610d5957600080fd5b506007546105389060ff1681565b6000546001600160a01b03163314610d9a5760405162461bcd60e51b8152600401610d919061372c565b60405180910390fd5b6101f58210610dbb5760405162461bcd60e51b8152600401610d9190613761565b60005b82811015610e2a5781601e6000868685818110610ddd57610ddd6137a6565b9050602002016020810190610df291906134c8565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610e23816137d2565b9050610dbe565b50505050565b6000546001600160a01b03163314610e5a5760405162461bcd60e51b8152600401610d919061372c565b6007805461ffff191692151561ff0019169290921761010091151591909102179055565b6000546001600160a01b03163314610ea85760405162461bcd60e51b8152600401610d919061372c565b600b55600c55565b6000546001600160a01b03163314610eda5760405162461bcd60e51b8152600401610d919061372c565b6103e881610eea6008600a6138cf565b610efa906509184e72a0006138de565b610f0491906138de565b610f0e91906138fd565b601a5550565b6000610f2133848461208e565b5060015b92915050565b610f376008600a6138cf565b610f47906509184e72a0006138de565b81565b6000806000602054610f5b30611628565b600f54925092509250909192565b6000546001600160a01b03163314610f935760405162461bcd60e51b8152600401610d919061372c565b60006064610fa147846138de565b610fab91906138fd565b604051909150339082156108fc029083906000818181858888f19350505050158015610fdb573d6000803e3d6000fd5b505050565b6000610fed8484846121b3565b6001600160a01b03841660009081526003602090815260408083203384529091529020548211156110715760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d91565b6001600160a01b0384166000908152600360209081526040808320338085529252909120546110ac9186916110a790869061391f565b61208e565b5060019392505050565b600060085482111561111d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d91565b60006111276126f2565b905061113381846138fd565b9392505050565b6000546001600160a01b031633146111645760405162461bcd60e51b8152600401610d919061372c565b6001600160a01b03811660009081526004602052604090205460ff166111cc5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610d91565b60005b601f548110156112ec57816001600160a01b0316601f82815481106111f6576111f66137a6565b6000918252602090912001546001600160a01b0316036112da57601f80546112209060019061391f565b81548110611230576112306137a6565b600091825260209091200154601f80546001600160a01b03909216918390811061125c5761125c6137a6565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055601f8054806112b4576112b4613936565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806112e4816137d2565b9150506111cf565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610f219185906110a790869061394c565b6000546001600160a01b031633146113515760405162461bcd60e51b8152600401610d919061372c565b6101f582106113725760405162461bcd60e51b8152600401610d9190613761565b60005b82811015610e2a5781601d6000868685818110611394576113946137a6565b90506020020160208101906113a991906134c8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113da816137d2565b9050611375565b601f81815481106113f157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146114355760405162461bcd60e51b8152600401610d919061372c565b6001600160a01b03811660009081526004602052604090205460ff161561149e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d91565b6001600160a01b038116600090815260016020526040902054156114f8576001600160a01b0381166000908152600160205260409020546114de906110b6565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff19166001908117909155601f805491820181559091527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d8070180546001600160a01b0319169091179055565b6000546001600160a01b031633146115885760405162461bcd60e51b8152600401610d919061372c565b6005805460ff1916911515919091179055565b600080600080600080601b54601a546008600a6115b891906138cf565b6115c8906509184e72a0006138de565b6008546115d36126f2565b600754949b939a509198509650945060ff90911692509050565b6000546001600160a01b031633146116175760405162461bcd60e51b8152600401610d919061372c565b602191909155602291909155602355565b6001600160a01b03811660009081526004602052604081205460ff161561166557506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f25906110b6565b600080546001600160a01b031633146116b25760405162461bcd60e51b8152600401610d919061372c565b81600003611725576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156116fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117229190613964565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611772573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611133919061397d565b6000546001600160a01b031633146117c05760405162461bcd60e51b8152600401610d919061372c565b600082856117ce868561394c565b6117d8919061394c565b6117e2919061394c565b9050601f811061182d5760405162461bcd60e51b81526020600482015260166024820152754d61782066656520616c6c6f7765642069732033302560501b6044820152606401610d91565b601082905560168490556013859055600d8390555b5050505050565b6000546001600160a01b031633146118735760405162461bcd60e51b8152600401610d919061372c565b60005b82811015610e2a578160066000868685818110611895576118956137a6565b90506020020160208101906118aa91906134c8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556118db816137d2565b9050611876565b3360009081526003602090815260408083206001600160a01b03861684529091528120548211156119635760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d91565b3360008181526003602090815260408083206001600160a01b0388168452909152902054610f21919085906110a790869061391f565b6000546001600160a01b031633146119c35760405162461bcd60e51b8152600401610d919061372c565b601280546001600160a01b039384166001600160a01b03199182161790915560158054929093169116179055565b6000546001600160a01b03163314611a1b5760405162461bcd60e51b8152600401610d919061372c565b600a91909155600955565b6000610f213384846121b3565b6000546001600160a01b03163314611a5d5760405162461bcd60e51b8152600401610d919061372c565b6103e881611a6d6008600a6138cf565b611a7d906509184e72a0006138de565b611a8791906138de565b611a9191906138fd565b601b5550565b6000546001600160a01b03163314611ac15760405162461bcd60e51b8152600401610d919061372c565b600080611acc6126f2565b9050848314611b2e5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610d91565b60005b85811015611b7157848482818110611b4b57611b4b6137a6565b9050602002013583611b5d919061394c565b925080611b69816137d2565b915050611b31565b5081611b7c33611628565b1015611bca5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320746f2061697264726f70000000006044820152606401610d91565b611bd481836138de565b6001600160a01b038816600090815260016020526040902054611bf7919061391f565b6001600160a01b03881660009081526001602090815260408083209390935560049052205460ff1615611c62576001600160a01b038716600090815260026020526040902054611c4890839061391f565b6001600160a01b0388166000908152600260205260409020555b60005b85811015611eb95760046000888884818110611c8357611c836137a6565b9050602002016020810190611c9891906134c8565b6001600160a01b0316815260208101919091526040016000205460ff1615611d6f57848482818110611ccc57611ccc6137a6565b9050602002013560026000898985818110611ce957611ce96137a6565b9050602002016020810190611cfe91906134c8565b6001600160a01b03166001600160a01b0316815260200190815260200160002054611d29919061394c565b60026000898985818110611d3f57611d3f6137a6565b9050602002016020810190611d5491906134c8565b6001600160a01b031681526020810191909152604001600020555b81858583818110611d8257611d826137a6565b90506020020135611d9391906138de565b60016000898985818110611da957611da96137a6565b9050602002016020810190611dbe91906134c8565b6001600160a01b03166001600160a01b0316815260200190815260200160002054611de9919061394c565b60016000898985818110611dff57611dff6137a6565b9050602002016020810190611e1491906134c8565b6001600160a01b03168152602081019190915260400160002055868682818110611e4057611e406137a6565b9050602002016020810190611e5591906134c8565b6001600160a01b0316886001600160a01b0316600080516020613a66833981519152878785818110611e8957611e896137a6565b90506020020135604051611e9f91815260200190565b60405180910390a380611eb1816137d2565b915050611c65565b5050505050505050565b6000546001600160a01b03163314611eed5760405162461bcd60e51b8152600401610d919061372c565b601980549215156101000261ff001990931692909217909155602055565b6000546001600160a01b03163314611f355760405162461bcd60e51b8152600401610d919061372c565b60005b82811015610e2a5781601c6000868685818110611f5757611f576137a6565b9050602002016020810190611f6c91906134c8565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611f9d816137d2565b9050611f38565b6000546001600160a01b03163314611fce5760405162461bcd60e51b8152600401610d919061372c565b6001600160a01b0381166120335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d91565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166120f05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d91565b6001600160a01b0382166121515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d91565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b038481169116148015906121df57506000546001600160a01b03838116911614155b1561229e5760075460ff1661222d5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610d91565b600754610100900460ff16801561227557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b1561229e576001600160a01b0382166000908152600660205260409020805460ff191660011790555b60055460ff1680156122b85750600754610100900460ff16155b15612314576001600160a01b03831660009081526006602052604090205460ff16156123145760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610d91565b601b548111158061233d57506001600160a01b0383166000908152601d602052604090205460ff165b8061236057506001600160a01b0382166000908152601d602052604090205460ff165b6123a45760405162461bcd60e51b815260206004820152601560248201527413585e08151608131a5b5a5d08115e18d959591959605a1b6044820152606401610d91565b6001600160a01b0383166000908152601e602052604090205460ff161580156123e657506001600160a01b0382166000908152601e602052604090205460ff16155b801561242457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561248e57601a548161243684611628565b612440919061394c565b111561248e5760405162461bcd60e51b815260206004820152601860248201527f6d61782077616c6c6574206c696d6974207265616368656400000000000000006044820152606401610d91565b600061249930611628565b9050601b5481106124b6576001601b546124b3919061391f565b90505b602054811080159081906124cd575060195460ff16155b801561250b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b801561251e5750601954610100900460ff165b1561253157602054915061253182612715565b60195460ff1615801561257657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156125895750601954610100900460ff165b156125c857600954601554600b546125ab92916001600160a01b0316906127a4565b600a54601254600c546125c892916001600160a01b0316906127a4565b50506001600160a01b0383166000908152601c602052604090205460019060ff168061260c57506001600160a01b0383166000908152601c602052604090205460ff165b1561264357506000612643601080546011556016805460175560138054601455600d8054600e556000938490559183905582905555565b60008060008060008060008061265a8a8c8e6127e5565b975097509750975097509750975097506126788c8c8c8b898c6129bd565b85600854612686919061391f565b600855600f5461269790829061394c565b600f55886126ac576126a7612b32565b6126e4565b6012546126c39085906001600160a01b0316612b55565b6126cd8330612b55565b6015546126e49083906001600160a01b0316612b55565b505050505050505050505050565b60008060006126ff612c2c565b909250905061270e81836138fd565b9250505090565b6019805460ff19166001179055600061272f6002836138fd565b90504761273b82612e20565b6000612747824761391f565b90506127538382612fd8565b60408051858152602081018590529081018290527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506019805460ff191690555050565b826000036127b157505050565b601b548311156127c157601b5492505b6127ca82611628565b6127d4828561394c565b11610fdb57610fdb82846130d7565b565b600080600080600080600080600060235490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168b6001600160a01b03160361283a5750602154612878565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a6001600160a01b03160361287857506022545b6018546128869060646138de565b816010548e61289591906138de565b61289f91906138de565b6128a991906138fd565b945060185460646128ba91906138de565b816016548e6128c991906138de565b6128d391906138de565b6128dd91906138fd565b935060185460646128ee91906138de565b816013548e6128fd91906138de565b61290791906138de565b61291191906138fd565b9250601854606461292291906138de565b81600d548e61293191906138de565b61293b91906138de565b61294591906138fd565b91508183612953868861394c565b61295d919061394c565b612967919061394c565b612971908d61391f565b955061297b6126f2565b61298590836138de565b965061298f6126f2565b612999908d6138de565b98506129a36126f2565b6129ad90876138de565b9750509397509397509397509397565b6001600160a01b0386166000908152600160205260409020546129e190849061391f565b6001600160a01b03871660009081526001602090815260408083209390935560049052205460ff1615612a4c576001600160a01b038616600090815260026020526040902054612a3290859061391f565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526004602052604090205460ff1615612aab576001600160a01b038516600090815260026020526040902054612a9190839061394c565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b038516600090815260016020526040902054612acf90829061394c565b6001600160a01b0386166000908152600160205260409020558115612b2a57846001600160a01b0316866001600160a01b0316600080516020613a6683398151915284604051612b2191815260200190565b60405180910390a35b505050505050565b6127e3601154601754601454600e54601093909355601691909155601355600d55565b6000612b5f6126f2565b612b6990846138de565b6001600160a01b038316600090815260016020526040902054909150612b9090829061394c565b6001600160a01b03831660009081526001602090815260408083209390935560049052205460ff1615612bfb576001600160a01b038216600090815260026020526040902054612be190849061394c565b6001600160a01b0383166000908152600260205260409020555b8215610fdb576040518381526001600160a01b038316903390600080516020613a66833981519152906020016121a6565b6000806000600854905060006008600a612c4691906138cf565b612c56906509184e72a0006138de565b905060005b601f54811015612dbb578260016000601f8481548110612c7d57612c7d6137a6565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612ce857508160026000601f8481548110612cc157612cc16137a6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d19576008546008600a612cfe91906138cf565b612d0e906509184e72a0006138de565b945094505050509091565b60016000601f8381548110612d3057612d306137a6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d5f908461391f565b925060026000601f8381548110612d7857612d786137a6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612da7908361391f565b915080612db3816137d2565b915050612c5b565b50612dc86008600a6138cf565b612dd8906509184e72a0006138de565b600854612de591906138fd565b821015612e17576008546008600a612dfd91906138cf565b612e0d906509184e72a0006138de565b9350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e5557612e556137a6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef7919061399a565b81600181518110612f0a57612f0a6137a6565b60200260200101906001600160a01b031690816001600160a01b031681525050612f55307f00000000000000000000000000000000000000000000000000000000000000008461208e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612faa9085906000908690309042906004016139fb565b600060405180830381600087803b158015612fc457600080fd5b505af1158015612b2a573d6000803e3d6000fd5b613003307f00000000000000000000000000000000000000000000000000000000000000008461208e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d71982308560008061304a6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156130b2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118429190613a37565b6019805460ff1916600117905560006130ee6126f2565b6130f890836138de565b6001600160a01b03841660009081526001602052604090205490915061311f90829061391f565b6001600160a01b03841660009081526001602090815260408083209390935560049052205460ff161561318a576001600160a01b03831660009081526002602052604090205461317090839061391f565b6001600160a01b0384166000908152600260205260409020555b306000908152600160205260409020546131a590829061394c565b30600081815260016020526040908190209290925590516001600160a01b03851690600080516020613a66833981519152906131e49086815260200190565b60405180910390a36131f68284613205565b50506019805460ff1916905550565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061323a5761323a6137a6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132dc919061399a565b816001815181106132ef576132ef6137a6565b60200260200101906001600160a01b031690816001600160a01b03168152505061333a307f00000000000000000000000000000000000000000000000000000000000000008561208e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061338f9086906000908690889042906004016139fb565b600060405180830381600087803b1580156133a957600080fd5b505af11580156133bd573d6000803e3d6000fd5b50505050505050565b60008083601f8401126133d857600080fd5b50813567ffffffffffffffff8111156133f057600080fd5b6020830191508360208260051b850101111561340b57600080fd5b9250929050565b801515811461342057600080fd5b50565b60008060006040848603121561343857600080fd5b833567ffffffffffffffff81111561344f57600080fd5b61345b868287016133c6565b909450925050602084013561346f81613412565b809150509250925092565b6000806040838503121561348d57600080fd5b823561349881613412565b915060208301356134a881613412565b809150509250929050565b6001600160a01b038116811461342057600080fd5b6000602082840312156134da57600080fd5b8135611133816134b3565b600080604083850312156134f857600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561353457858101830151858201604001528201613518565b81811115613546576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561356e57600080fd5b5035919050565b6000806040838503121561358857600080fd5b8235613593816134b3565b946020939093013593505050565b6000806000606084860312156135b657600080fd5b83356135c1816134b3565b925060208401356135d1816134b3565b929592945050506040919091013590565b6000602082840312156135f457600080fd5b813561113381613412565b60008060006060848603121561361457600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561364157600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561367057600080fd5b823561367b816134b3565b915060208301356134a8816134b3565b6000806000806000606086880312156136a357600080fd5b85356136ae816134b3565b9450602086013567ffffffffffffffff808211156136cb57600080fd5b6136d789838a016133c6565b909650945060408801359150808211156136f057600080fd5b506136fd888289016133c6565b969995985093965092949392505050565b6000806040838503121561372157600080fd5b823561359381613412565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f474153204572726f723a206d6178206c696d6974206973203530302061646472604082015264657373657360d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016137e4576137e46137bc565b5060010190565b600181815b8085111561382657816000190482111561380c5761380c6137bc565b8085161561381957918102915b93841c93908002906137f0565b509250929050565b60008261383d57506001610f25565b8161384a57506000610f25565b8160018114613860576002811461386a57613886565b6001915050610f25565b60ff84111561387b5761387b6137bc565b50506001821b610f25565b5060208310610133831016604e8410600b84101617156138a9575081810a610f25565b6138b383836137eb565b80600019048211156138c7576138c76137bc565b029392505050565b600061113360ff84168361382e565b60008160001904831182151516156138f8576138f86137bc565b500290565b60008261391a57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015613931576139316137bc565b500390565b634e487b7160e01b600052603160045260246000fd5b6000821982111561395f5761395f6137bc565b500190565b60006020828403121561397657600080fd5b5051919050565b60006020828403121561398f57600080fd5b815161113381613412565b6000602082840312156139ac57600080fd5b8151611133816134b3565b600081518084526020808501945080840160005b838110156139f05781516001600160a01b0316875295820195908201906001016139cb565b509495945050505050565b85815284602082015260a060408201526000613a1a60a08301866139b7565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613a4c57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212206093a9bf72317faa1c8442a8c407211fe29e859014ac0efe636893b5764f8eb364736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103f25760003560e01c806367dc9e9211610208578063a9059cbb11610118578063d10ae165116100ab578063f2fde38b1161007a578063f2fde38b14610cd1578063fd748c3014610cf1578063fe575a8714610d07578063fed0d2a114610d37578063ffb54a9914610d4d57600080fd5b8063d10ae16514610c36578063dd62ed3e14610c55578063e092034914610c9b578063e4ff54b214610cbb57600080fd5b8063bd9ab537116100e7578063bd9ab53714610ba6578063c867d60b14610bc6578063ccc569df14610bf6578063d0e1032614610c1657600080fd5b8063a9059cbb14610b2d578063b1eb20e914610b4d578063b839257614610b7a578063b85f117514610b9057600080fd5b80638d55f9051161019b57806395d89b411161016a57806395d89b4114610a855780639bef432614610ab7578063a457c2d714610acd578063a61699c414610aed578063a7eb8ee814610b0d57600080fd5b80638d55f90514610a115780638da5cb5b14610a315780638e2eee8414610a4f578063910fb00814610a6f57600080fd5b806378109e54116101d757806378109e541461099b5780637d1db4a5146109b1578063896648c1146109c75780638b42507f146109e157600080fd5b806367dc9e92146108db5780636ce46bc31461093b57806370a082311461095b57806377b54bad1461097b57600080fd5b80632d838119116103035780634a74bb021161029657806352390c021161026557806352390c02146108215780635921652f146108415780635e562f3b14610857578063617c62a114610877578063666a245d146108bb57600080fd5b80634a74bb02146107ac5780634bd064cd146107cb5780634be9d869146107e15780634d09deb31461080157600080fd5b80633685d419116102d25780633685d4191461070857806339509351146107285780633f4218e01461074857806349bd5a5e1461077857600080fd5b80632d838119146106955780633121c7c0146106b5578063313ce567146106cb5780633417ab1d146106f257600080fd5b80630b285b1f116103865780631c3c4fec116103555780631c3c4fec146105ef5780631da1db5e1461061f57806323b872dd1461063f57806328e2eaab1461065f5780632c97d3d41461067557600080fd5b80630b285b1f14610548578063166eab6b146105785780631694505e1461058e57806318160ddd146105da57600080fd5b806306f3a47b116103c257806306f3a47b1461049657806306fdde03146104b657806309302dc6146104f8578063095ea7b31461051857600080fd5b8062108683146103fe578063034c4897146104205780630445b66714610440578063053cfa251461046957600080fd5b366103f957005b600080fd5b34801561040a57600080fd5b5061041e610419366004613423565b610d67565b005b34801561042c57600080fd5b5061041e61043b36600461347a565b610e30565b34801561044c57600080fd5b5061045660205481565b6040519081526020015b60405180910390f35b34801561047557600080fd5b506104566104843660046134c8565b60026020526000908152604090205481565b3480156104a257600080fd5b5061041e6104b13660046134e5565b610e7e565b3480156104c257600080fd5b506104eb6040518060400160405280600981526020016853555045524341545360b81b81525081565b6040516104609190613507565b34801561050457600080fd5b5061041e61051336600461355c565b610eb0565b34801561052457600080fd5b50610538610533366004613575565b610f14565b6040519015158152602001610460565b34801561055457600080fd5b506105386105633660046134c8565b60046020526000908152604090205460ff1681565b34801561058457600080fd5b5061045660135481565b34801561059a57600080fd5b506105c27f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610460565b3480156105e657600080fd5b50610456610f2b565b3480156105fb57600080fd5b50610604610f4a565b60408051938452602084019290925290820152606001610460565b34801561062b57600080fd5b5061041e61063a36600461355c565b610f69565b34801561064b57600080fd5b5061053861065a3660046135a1565b610fe0565b34801561066b57600080fd5b50610456600c5481565b34801561068157600080fd5b506015546105c2906001600160a01b031681565b3480156106a157600080fd5b506104566106b036600461355c565b6110b6565b3480156106c157600080fd5b5061045660225481565b3480156106d757600080fd5b506106e0600881565b60405160ff9091168152602001610460565b3480156106fe57600080fd5b50610456600a5481565b34801561071457600080fd5b5061041e6107233660046134c8565b61113a565b34801561073457600080fd5b50610538610743366004613575565b6112f0565b34801561075457600080fd5b506105386107633660046134c8565b601c6020526000908152604090205460ff1681565b34801561078457600080fd5b506105c27f000000000000000000000000cb68fd3f72f03a66f2280e1d44c08cd73ca7ecb581565b3480156107b857600080fd5b5060195461053890610100900460ff1681565b3480156107d757600080fd5b5061045660095481565b3480156107ed57600080fd5b5061041e6107fc366004613423565b611327565b34801561080d57600080fd5b506105c261081c36600461355c565b6113e1565b34801561082d57600080fd5b5061041e61083c3660046134c8565b61140b565b34801561084d57600080fd5b5061045660235481565b34801561086357600080fd5b5061041e6108723660046135e2565b61155e565b34801561088357600080fd5b5061088c61159b565b6040805196875260208701959095529385019290925260608401526080830152151560a082015260c001610460565b3480156108c757600080fd5b506012546105c2906001600160a01b031681565b3480156108e757600080fd5b50600d54601654601354600954600b54601054600a54600c54604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610460565b34801561094757600080fd5b5061041e6109563660046135ff565b6115ed565b34801561096757600080fd5b506104566109763660046134c8565b611628565b34801561098757600080fd5b50610538610996366004613575565b611687565b3480156109a757600080fd5b50610456601a5481565b3480156109bd57600080fd5b50610456601b5481565b3480156109d357600080fd5b506005546105389060ff1681565b3480156109ed57600080fd5b506105386109fc3660046134c8565b601d6020526000908152604090205460ff1681565b348015610a1d57600080fd5b5061041e610a2c36600461362b565b611796565b348015610a3d57600080fd5b506000546001600160a01b03166105c2565b348015610a5b57600080fd5b5061041e610a6a366004613423565b611849565b348015610a7b57600080fd5b5061045660165481565b348015610a9157600080fd5b506104eb60405180604001604052806006815260200165532d4341545360d01b81525081565b348015610ac357600080fd5b50610456600f5481565b348015610ad957600080fd5b50610538610ae8366004613575565b6118e2565b348015610af957600080fd5b5061041e610b0836600461365d565b611999565b348015610b1957600080fd5b5061041e610b283660046134e5565b6119f1565b348015610b3957600080fd5b50610538610b48366004613575565b611a26565b348015610b5957600080fd5b50610456610b683660046134c8565b60016020526000908152604090205481565b348015610b8657600080fd5b5061045660105481565b348015610b9c57600080fd5b50610456600d5481565b348015610bb257600080fd5b5061041e610bc136600461355c565b611a33565b348015610bd257600080fd5b50610538610be13660046134c8565b601e6020526000908152604090205460ff1681565b348015610c0257600080fd5b5061041e610c1136600461368b565b611a97565b348015610c2257600080fd5b5061041e610c3136600461370e565b611ec3565b348015610c4257600080fd5b5060075461053890610100900460ff1681565b348015610c6157600080fd5b50610456610c7036600461365d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610ca757600080fd5b5061041e610cb6366004613423565b611f0b565b348015610cc757600080fd5b50610456600b5481565b348015610cdd57600080fd5b5061041e610cec3660046134c8565b611fa4565b348015610cfd57600080fd5b5061045660185481565b348015610d1357600080fd5b50610538610d223660046134c8565b60066020526000908152604090205460ff1681565b348015610d4357600080fd5b5061045660215481565b348015610d5957600080fd5b506007546105389060ff1681565b6000546001600160a01b03163314610d9a5760405162461bcd60e51b8152600401610d919061372c565b60405180910390fd5b6101f58210610dbb5760405162461bcd60e51b8152600401610d9190613761565b60005b82811015610e2a5781601e6000868685818110610ddd57610ddd6137a6565b9050602002016020810190610df291906134c8565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610e23816137d2565b9050610dbe565b50505050565b6000546001600160a01b03163314610e5a5760405162461bcd60e51b8152600401610d919061372c565b6007805461ffff191692151561ff0019169290921761010091151591909102179055565b6000546001600160a01b03163314610ea85760405162461bcd60e51b8152600401610d919061372c565b600b55600c55565b6000546001600160a01b03163314610eda5760405162461bcd60e51b8152600401610d919061372c565b6103e881610eea6008600a6138cf565b610efa906509184e72a0006138de565b610f0491906138de565b610f0e91906138fd565b601a5550565b6000610f2133848461208e565b5060015b92915050565b610f376008600a6138cf565b610f47906509184e72a0006138de565b81565b6000806000602054610f5b30611628565b600f54925092509250909192565b6000546001600160a01b03163314610f935760405162461bcd60e51b8152600401610d919061372c565b60006064610fa147846138de565b610fab91906138fd565b604051909150339082156108fc029083906000818181858888f19350505050158015610fdb573d6000803e3d6000fd5b505050565b6000610fed8484846121b3565b6001600160a01b03841660009081526003602090815260408083203384529091529020548211156110715760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d91565b6001600160a01b0384166000908152600360209081526040808320338085529252909120546110ac9186916110a790869061391f565b61208e565b5060019392505050565b600060085482111561111d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d91565b60006111276126f2565b905061113381846138fd565b9392505050565b6000546001600160a01b031633146111645760405162461bcd60e51b8152600401610d919061372c565b6001600160a01b03811660009081526004602052604090205460ff166111cc5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610d91565b60005b601f548110156112ec57816001600160a01b0316601f82815481106111f6576111f66137a6565b6000918252602090912001546001600160a01b0316036112da57601f80546112209060019061391f565b81548110611230576112306137a6565b600091825260209091200154601f80546001600160a01b03909216918390811061125c5761125c6137a6565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055601f8054806112b4576112b4613936565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806112e4816137d2565b9150506111cf565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610f219185906110a790869061394c565b6000546001600160a01b031633146113515760405162461bcd60e51b8152600401610d919061372c565b6101f582106113725760405162461bcd60e51b8152600401610d9190613761565b60005b82811015610e2a5781601d6000868685818110611394576113946137a6565b90506020020160208101906113a991906134c8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113da816137d2565b9050611375565b601f81815481106113f157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146114355760405162461bcd60e51b8152600401610d919061372c565b6001600160a01b03811660009081526004602052604090205460ff161561149e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d91565b6001600160a01b038116600090815260016020526040902054156114f8576001600160a01b0381166000908152600160205260409020546114de906110b6565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff19166001908117909155601f805491820181559091527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d8070180546001600160a01b0319169091179055565b6000546001600160a01b031633146115885760405162461bcd60e51b8152600401610d919061372c565b6005805460ff1916911515919091179055565b600080600080600080601b54601a546008600a6115b891906138cf565b6115c8906509184e72a0006138de565b6008546115d36126f2565b600754949b939a509198509650945060ff90911692509050565b6000546001600160a01b031633146116175760405162461bcd60e51b8152600401610d919061372c565b602191909155602291909155602355565b6001600160a01b03811660009081526004602052604081205460ff161561166557506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f25906110b6565b600080546001600160a01b031633146116b25760405162461bcd60e51b8152600401610d919061372c565b81600003611725576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156116fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117229190613964565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611772573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611133919061397d565b6000546001600160a01b031633146117c05760405162461bcd60e51b8152600401610d919061372c565b600082856117ce868561394c565b6117d8919061394c565b6117e2919061394c565b9050601f811061182d5760405162461bcd60e51b81526020600482015260166024820152754d61782066656520616c6c6f7765642069732033302560501b6044820152606401610d91565b601082905560168490556013859055600d8390555b5050505050565b6000546001600160a01b031633146118735760405162461bcd60e51b8152600401610d919061372c565b60005b82811015610e2a578160066000868685818110611895576118956137a6565b90506020020160208101906118aa91906134c8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556118db816137d2565b9050611876565b3360009081526003602090815260408083206001600160a01b03861684529091528120548211156119635760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d91565b3360008181526003602090815260408083206001600160a01b0388168452909152902054610f21919085906110a790869061391f565b6000546001600160a01b031633146119c35760405162461bcd60e51b8152600401610d919061372c565b601280546001600160a01b039384166001600160a01b03199182161790915560158054929093169116179055565b6000546001600160a01b03163314611a1b5760405162461bcd60e51b8152600401610d919061372c565b600a91909155600955565b6000610f213384846121b3565b6000546001600160a01b03163314611a5d5760405162461bcd60e51b8152600401610d919061372c565b6103e881611a6d6008600a6138cf565b611a7d906509184e72a0006138de565b611a8791906138de565b611a9191906138fd565b601b5550565b6000546001600160a01b03163314611ac15760405162461bcd60e51b8152600401610d919061372c565b600080611acc6126f2565b9050848314611b2e5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610d91565b60005b85811015611b7157848482818110611b4b57611b4b6137a6565b9050602002013583611b5d919061394c565b925080611b69816137d2565b915050611b31565b5081611b7c33611628565b1015611bca5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320746f2061697264726f70000000006044820152606401610d91565b611bd481836138de565b6001600160a01b038816600090815260016020526040902054611bf7919061391f565b6001600160a01b03881660009081526001602090815260408083209390935560049052205460ff1615611c62576001600160a01b038716600090815260026020526040902054611c4890839061391f565b6001600160a01b0388166000908152600260205260409020555b60005b85811015611eb95760046000888884818110611c8357611c836137a6565b9050602002016020810190611c9891906134c8565b6001600160a01b0316815260208101919091526040016000205460ff1615611d6f57848482818110611ccc57611ccc6137a6565b9050602002013560026000898985818110611ce957611ce96137a6565b9050602002016020810190611cfe91906134c8565b6001600160a01b03166001600160a01b0316815260200190815260200160002054611d29919061394c565b60026000898985818110611d3f57611d3f6137a6565b9050602002016020810190611d5491906134c8565b6001600160a01b031681526020810191909152604001600020555b81858583818110611d8257611d826137a6565b90506020020135611d9391906138de565b60016000898985818110611da957611da96137a6565b9050602002016020810190611dbe91906134c8565b6001600160a01b03166001600160a01b0316815260200190815260200160002054611de9919061394c565b60016000898985818110611dff57611dff6137a6565b9050602002016020810190611e1491906134c8565b6001600160a01b03168152602081019190915260400160002055868682818110611e4057611e406137a6565b9050602002016020810190611e5591906134c8565b6001600160a01b0316886001600160a01b0316600080516020613a66833981519152878785818110611e8957611e896137a6565b90506020020135604051611e9f91815260200190565b60405180910390a380611eb1816137d2565b915050611c65565b5050505050505050565b6000546001600160a01b03163314611eed5760405162461bcd60e51b8152600401610d919061372c565b601980549215156101000261ff001990931692909217909155602055565b6000546001600160a01b03163314611f355760405162461bcd60e51b8152600401610d919061372c565b60005b82811015610e2a5781601c6000868685818110611f5757611f576137a6565b9050602002016020810190611f6c91906134c8565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611f9d816137d2565b9050611f38565b6000546001600160a01b03163314611fce5760405162461bcd60e51b8152600401610d919061372c565b6001600160a01b0381166120335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d91565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166120f05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d91565b6001600160a01b0382166121515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d91565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b038481169116148015906121df57506000546001600160a01b03838116911614155b1561229e5760075460ff1661222d5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610d91565b600754610100900460ff16801561227557507f000000000000000000000000cb68fd3f72f03a66f2280e1d44c08cd73ca7ecb56001600160a01b0316836001600160a01b0316145b1561229e576001600160a01b0382166000908152600660205260409020805460ff191660011790555b60055460ff1680156122b85750600754610100900460ff16155b15612314576001600160a01b03831660009081526006602052604090205460ff16156123145760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610d91565b601b548111158061233d57506001600160a01b0383166000908152601d602052604090205460ff165b8061236057506001600160a01b0382166000908152601d602052604090205460ff165b6123a45760405162461bcd60e51b815260206004820152601560248201527413585e08151608131a5b5a5d08115e18d959591959605a1b6044820152606401610d91565b6001600160a01b0383166000908152601e602052604090205460ff161580156123e657506001600160a01b0382166000908152601e602052604090205460ff16155b801561242457507f000000000000000000000000cb68fd3f72f03a66f2280e1d44c08cd73ca7ecb56001600160a01b0316826001600160a01b031614155b1561248e57601a548161243684611628565b612440919061394c565b111561248e5760405162461bcd60e51b815260206004820152601860248201527f6d61782077616c6c6574206c696d6974207265616368656400000000000000006044820152606401610d91565b600061249930611628565b9050601b5481106124b6576001601b546124b3919061391f565b90505b602054811080159081906124cd575060195460ff16155b801561250b57507f000000000000000000000000cb68fd3f72f03a66f2280e1d44c08cd73ca7ecb56001600160a01b0316856001600160a01b031614155b801561251e5750601954610100900460ff165b1561253157602054915061253182612715565b60195460ff1615801561257657507f000000000000000000000000cb68fd3f72f03a66f2280e1d44c08cd73ca7ecb56001600160a01b0316856001600160a01b031614155b80156125895750601954610100900460ff165b156125c857600954601554600b546125ab92916001600160a01b0316906127a4565b600a54601254600c546125c892916001600160a01b0316906127a4565b50506001600160a01b0383166000908152601c602052604090205460019060ff168061260c57506001600160a01b0383166000908152601c602052604090205460ff165b1561264357506000612643601080546011556016805460175560138054601455600d8054600e556000938490559183905582905555565b60008060008060008060008061265a8a8c8e6127e5565b975097509750975097509750975097506126788c8c8c8b898c6129bd565b85600854612686919061391f565b600855600f5461269790829061394c565b600f55886126ac576126a7612b32565b6126e4565b6012546126c39085906001600160a01b0316612b55565b6126cd8330612b55565b6015546126e49083906001600160a01b0316612b55565b505050505050505050505050565b60008060006126ff612c2c565b909250905061270e81836138fd565b9250505090565b6019805460ff19166001179055600061272f6002836138fd565b90504761273b82612e20565b6000612747824761391f565b90506127538382612fd8565b60408051858152602081018590529081018290527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506019805460ff191690555050565b826000036127b157505050565b601b548311156127c157601b5492505b6127ca82611628565b6127d4828561394c565b11610fdb57610fdb82846130d7565b565b600080600080600080600080600060235490507f000000000000000000000000cb68fd3f72f03a66f2280e1d44c08cd73ca7ecb56001600160a01b03168b6001600160a01b03160361283a5750602154612878565b7f000000000000000000000000cb68fd3f72f03a66f2280e1d44c08cd73ca7ecb56001600160a01b03168a6001600160a01b03160361287857506022545b6018546128869060646138de565b816010548e61289591906138de565b61289f91906138de565b6128a991906138fd565b945060185460646128ba91906138de565b816016548e6128c991906138de565b6128d391906138de565b6128dd91906138fd565b935060185460646128ee91906138de565b816013548e6128fd91906138de565b61290791906138de565b61291191906138fd565b9250601854606461292291906138de565b81600d548e61293191906138de565b61293b91906138de565b61294591906138fd565b91508183612953868861394c565b61295d919061394c565b612967919061394c565b612971908d61391f565b955061297b6126f2565b61298590836138de565b965061298f6126f2565b612999908d6138de565b98506129a36126f2565b6129ad90876138de565b9750509397509397509397509397565b6001600160a01b0386166000908152600160205260409020546129e190849061391f565b6001600160a01b03871660009081526001602090815260408083209390935560049052205460ff1615612a4c576001600160a01b038616600090815260026020526040902054612a3290859061391f565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526004602052604090205460ff1615612aab576001600160a01b038516600090815260026020526040902054612a9190839061394c565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b038516600090815260016020526040902054612acf90829061394c565b6001600160a01b0386166000908152600160205260409020558115612b2a57846001600160a01b0316866001600160a01b0316600080516020613a6683398151915284604051612b2191815260200190565b60405180910390a35b505050505050565b6127e3601154601754601454600e54601093909355601691909155601355600d55565b6000612b5f6126f2565b612b6990846138de565b6001600160a01b038316600090815260016020526040902054909150612b9090829061394c565b6001600160a01b03831660009081526001602090815260408083209390935560049052205460ff1615612bfb576001600160a01b038216600090815260026020526040902054612be190849061394c565b6001600160a01b0383166000908152600260205260409020555b8215610fdb576040518381526001600160a01b038316903390600080516020613a66833981519152906020016121a6565b6000806000600854905060006008600a612c4691906138cf565b612c56906509184e72a0006138de565b905060005b601f54811015612dbb578260016000601f8481548110612c7d57612c7d6137a6565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612ce857508160026000601f8481548110612cc157612cc16137a6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d19576008546008600a612cfe91906138cf565b612d0e906509184e72a0006138de565b945094505050509091565b60016000601f8381548110612d3057612d306137a6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d5f908461391f565b925060026000601f8381548110612d7857612d786137a6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612da7908361391f565b915080612db3816137d2565b915050612c5b565b50612dc86008600a6138cf565b612dd8906509184e72a0006138de565b600854612de591906138fd565b821015612e17576008546008600a612dfd91906138cf565b612e0d906509184e72a0006138de565b9350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e5557612e556137a6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef7919061399a565b81600181518110612f0a57612f0a6137a6565b60200260200101906001600160a01b031690816001600160a01b031681525050612f55307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461208e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612faa9085906000908690309042906004016139fb565b600060405180830381600087803b158015612fc457600080fd5b505af1158015612b2a573d6000803e3d6000fd5b613003307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461208e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d71982308560008061304a6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156130b2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118429190613a37565b6019805460ff1916600117905560006130ee6126f2565b6130f890836138de565b6001600160a01b03841660009081526001602052604090205490915061311f90829061391f565b6001600160a01b03841660009081526001602090815260408083209390935560049052205460ff161561318a576001600160a01b03831660009081526002602052604090205461317090839061391f565b6001600160a01b0384166000908152600260205260409020555b306000908152600160205260409020546131a590829061394c565b30600081815260016020526040908190209290925590516001600160a01b03851690600080516020613a66833981519152906131e49086815260200190565b60405180910390a36131f68284613205565b50506019805460ff1916905550565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061323a5761323a6137a6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132dc919061399a565b816001815181106132ef576132ef6137a6565b60200260200101906001600160a01b031690816001600160a01b03168152505061333a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8561208e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061338f9086906000908690889042906004016139fb565b600060405180830381600087803b1580156133a957600080fd5b505af11580156133bd573d6000803e3d6000fd5b50505050505050565b60008083601f8401126133d857600080fd5b50813567ffffffffffffffff8111156133f057600080fd5b6020830191508360208260051b850101111561340b57600080fd5b9250929050565b801515811461342057600080fd5b50565b60008060006040848603121561343857600080fd5b833567ffffffffffffffff81111561344f57600080fd5b61345b868287016133c6565b909450925050602084013561346f81613412565b809150509250925092565b6000806040838503121561348d57600080fd5b823561349881613412565b915060208301356134a881613412565b809150509250929050565b6001600160a01b038116811461342057600080fd5b6000602082840312156134da57600080fd5b8135611133816134b3565b600080604083850312156134f857600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561353457858101830151858201604001528201613518565b81811115613546576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561356e57600080fd5b5035919050565b6000806040838503121561358857600080fd5b8235613593816134b3565b946020939093013593505050565b6000806000606084860312156135b657600080fd5b83356135c1816134b3565b925060208401356135d1816134b3565b929592945050506040919091013590565b6000602082840312156135f457600080fd5b813561113381613412565b60008060006060848603121561361457600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561364157600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561367057600080fd5b823561367b816134b3565b915060208301356134a8816134b3565b6000806000806000606086880312156136a357600080fd5b85356136ae816134b3565b9450602086013567ffffffffffffffff808211156136cb57600080fd5b6136d789838a016133c6565b909650945060408801359150808211156136f057600080fd5b506136fd888289016133c6565b969995985093965092949392505050565b6000806040838503121561372157600080fd5b823561359381613412565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f474153204572726f723a206d6178206c696d6974206973203530302061646472604082015264657373657360d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016137e4576137e46137bc565b5060010190565b600181815b8085111561382657816000190482111561380c5761380c6137bc565b8085161561381957918102915b93841c93908002906137f0565b509250929050565b60008261383d57506001610f25565b8161384a57506000610f25565b8160018114613860576002811461386a57613886565b6001915050610f25565b60ff84111561387b5761387b6137bc565b50506001821b610f25565b5060208310610133831016604e8410600b84101617156138a9575081810a610f25565b6138b383836137eb565b80600019048211156138c7576138c76137bc565b029392505050565b600061113360ff84168361382e565b60008160001904831182151516156138f8576138f86137bc565b500290565b60008261391a57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015613931576139316137bc565b500390565b634e487b7160e01b600052603160045260246000fd5b6000821982111561395f5761395f6137bc565b500190565b60006020828403121561397657600080fd5b5051919050565b60006020828403121561398f57600080fd5b815161113381613412565b6000602082840312156139ac57600080fd5b8151611133816134b3565b600081518084526020808501945080840160005b838110156139f05781516001600160a01b0316875295820195908201906001016139cb565b509495945050505050565b85815284602082015260a060408201526000613a1a60a08301866139b7565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613a4c57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212206093a9bf72317faa1c8442a8c407211fe29e859014ac0efe636893b5764f8eb364736f6c634300080d0033

Deployed Bytecode Sourcemap

5732:20063:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14490:280;;;;;;;;;;-1:-1:-1;14490:280:0;;;;;:::i;:::-;;:::i;:::-;;13125:115;;;;;;;;;;-1:-1:-1;13125:115:0;;;;;:::i;:::-;;:::i;7773:58::-;;;;;;;;;;;;;;;;;;;1607:25:1;;;1595:2;1580:18;7773:58:0;;;;;;;;5872:50;;;;;;;;;;-1:-1:-1;5872:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;20065:255;;;;;;;;;;-1:-1:-1;20065:255:0;;;;;:::i;:::-;;:::i;6436:41::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6436:41:0;;;;;;;;;;;;:::i;13403:163::-;;;;;;;;;;-1:-1:-1;13403:163:0;;;;;:::i;:::-;;:::i;9880:146::-;;;;;;;;;;-1:-1:-1;9880:146:0;;;;;:::i;:::-;;:::i;:::-;;;3556:14:1;;3549:22;3531:41;;3519:2;3504:18;9880:146:0;3391:187:1;6002:44:0;;;;;;;;;;-1:-1:-1;6002:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7040:32;;;;;;;;;;;;;;;;7311:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3773:32:1;;;3755:51;;3743:2;3728:18;7311:51:0;3583:229:1;6295:64:0;;;;;;;;;;;;;:::i;11228:230::-;;;;;;;;;;;;;:::i;:::-;;;;4019:25:1;;;4075:2;4060:18;;4053:34;;;;4103:18;;;4096:34;4007:2;3992:18;11228:230:0;3817:319:1;15726:200:0;;;;;;;;;;-1:-1:-1;15726:200:0;;;;;:::i;:::-;;:::i;10031:346::-;;;;;;;;;;-1:-1:-1;10031:346:0;;;;;:::i;:::-;;:::i;6708:41::-;;;;;;;;;;;;;;;;7129:39;;;;;;;;;;-1:-1:-1;7129:39:0;;;;-1:-1:-1;;;;;7129:39:0;;;12164:241;;;;;;;;;;-1:-1:-1;12164:241:0;;;;;:::i;:::-;;:::i;7876:34::-;;;;;;;;;;;;;;;;6257;;;;;;;;;;;;6290:1;6257:34;;;;;4998:4:1;4986:17;;;4968:36;;4956:2;4941:18;6257:34:0;4826:184:1;6594:64:0;;;;;;;;;;;;;;;;12735:385;;;;;;;;;;-1:-1:-1;12735:385:0;;;;;:::i;:::-;;:::i;10382:202::-;;;;;;;;;;-1:-1:-1;10382:202:0;;;;;:::i;:::-;;:::i;7585:44::-;;;;;;;;;;-1:-1:-1;7585:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7366:38;;;;;;;;;;;;;;;7433:40;;;;;;;;;;-1:-1:-1;7433:40:0;;;;;;;;;;;6527:63;;;;;;;;;;;;;;;;14213:272;;;;;;;;;;-1:-1:-1;14213:272:0;;;;;:::i;:::-;;:::i;7741:26::-;;;;;;;;;;-1:-1:-1;7741:26:0;;;;;:::i;:::-;;:::i;12410:320::-;;;;;;;;;;-1:-1:-1;12410:320:0;;;;;:::i;:::-;;:::i;7914:39::-;;;;;;;;;;;;;;;;13727:92;;;;;;;;;;-1:-1:-1;13727:92:0;;;;;:::i;:::-;;:::i;10914:309::-;;;;;;;;;;;;;:::i;:::-;;;;5750:25:1;;;5806:2;5791:18;;5784:34;;;;5834:18;;;5827:34;;;;5892:2;5877:18;;5870:34;5935:3;5920:19;;5913:35;5992:14;5985:22;5979:3;5964:19;;5957:51;5737:3;5722:19;10914:309:0;5469:545:1;6994:40:0;;;;;;;;;;-1:-1:-1;6994:40:0;;;;-1:-1:-1;;;;;6994:40:0;;;11463:507;;;;;;;;;;-1:-1:-1;11791:15:0;;11808:14;;11828:13;;11842:27;;11870:21;;11897:14;;11912:28;;11942:22;;11463:507;;;6362:25:1;;;6418:2;6403:18;;6396:34;;;;6446:18;;;6439:34;;;;6504:2;6489:18;;6482:34;;;;6547:3;6532:19;;6525:35;6591:3;6576:19;;6569:35;6635:3;6620:19;;6613:35;6679:3;6664:19;;6657:35;6349:3;6334:19;11463:507:0;6019:679:1;19626:177:0;;;;;;;;;;-1:-1:-1;19626:177:0;;;;;:::i;:::-;;:::i;9378:201::-;;;;;;;;;;-1:-1:-1;9378:201:0;;;;;:::i;:::-;;:::i;15931:258::-;;;;;;;;;;-1:-1:-1;15931:258:0;;;;;:::i;:::-;;:::i;7479:49::-;;;;;;;;;;;;;;;;7532:47;;;;;;;;;;;;;;;;6053:32;;;;;;;;;;-1:-1:-1;6053:32:0;;;;;;;;7633:48;;;;;;;;;;-1:-1:-1;7633:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20325:365;;;;;;;;;;-1:-1:-1;20325:365:0;;;;;:::i;:::-;;:::i;4572:78::-;;;;;;;;;;-1:-1:-1;4618:7:0;4639:6;-1:-1:-1;;;;;4639:6:0;4572:78;;13824:188;;;;;;;;;;-1:-1:-1;13824:188:0;;;;;:::i;:::-;;:::i;7174:33::-;;;;;;;;;;;;;;;;6481:40;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6481:40:0;;;;;6851:44;;;;;;;;;;;;;;;;10589:320;;;;;;;;;;-1:-1:-1;10589:320:0;;;;;:::i;:::-;;:::i;11975:184::-;;;;;;;;;;-1:-1:-1;11975:184:0;;;;;:::i;:::-;;:::i;19808:252::-;;;;;;;;;;-1:-1:-1;19808:252:0;;;;;:::i;:::-;;:::i;9584:152::-;;;;;;;;;;-1:-1:-1;9584:152:0;;;;;:::i;:::-;;:::i;5814:54::-;;;;;;;;;;-1:-1:-1;5814:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;6902:33;;;;;;;;;;;;;;;;6756:34;;;;;;;;;;;;;;;;13245:152;;;;;;;;;;-1:-1:-1;13245:152:0;;;;;:::i;:::-;;:::i;7685:52::-;;;;;;;;;;-1:-1:-1;7685:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14803:918;;;;;;;;;;-1:-1:-1;14803:918:0;;;;;:::i;:::-;;:::i;13572:150::-;;;;;;;;;;-1:-1:-1;13572:150:0;;;;;:::i;:::-;;:::i;6176:26::-;;;;;;;;;;-1:-1:-1;6176:26:0;;;;;;;;;;;9741:134;;;;;;;;;;-1:-1:-1;9741:134:0;;;;;:::i;:::-;-1:-1:-1;;;;;9843:18:0;;;9822:7;9843:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9741:134;14017:191;;;;;;;;;;-1:-1:-1;14017:191:0;;;;;:::i;:::-;;:::i;6664:40::-;;;;;;;;;;;;;;;;4766:223;;;;;;;;;;-1:-1:-1;4766:223:0;;;;;:::i;:::-;;:::i;7268:37::-;;;;;;;;;;;;;;;;6089:46;;;;;;;;;;-1:-1:-1;6089:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7837:35;;;;;;;;;;;;;;;;6141:31;;;;;;;;;;-1:-1:-1;6141:31:0;;;;;;;;14490:280;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;;;;;;;;;14618:3:::1;14599:22:::0;::::1;14591:71;;;;-1:-1:-1::0;;;14591:71:0::1;;;;;;;:::i;:::-;14672:9;14667:99;14685:20:::0;;::::1;14667:99;;;14754:6;14718:19;:33;14738:9;;14748:1;14738:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14718:33:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14718:33:0;:42;;-1:-1:-1;;14718:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14707:3:::1;::::0;::::1;:::i;:::-;;;14667:99;;;;14490:280:::0;;;:::o;13125:115::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;13196:11:::1;:21:::0;;-1:-1:-1;;13222:13:0;13196:21;::::1;;-1:-1:-1::0;;13222:13:0;;;;;13196:21:::1;13222:13:::0;::::1;;::::0;;;::::1;;::::0;;13125:115::o;20065:255::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;20204:21:::1;:52:::0;20261:22:::1;:54:::0;20065:255::o;13403:163::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;13557:4:::1;13530:22:::0;6347:12:::1;6290:1;6347:2;:12;:::i;:::-;6333:26;::::0;:11:::1;:26;:::i;:::-;13516:36;;;;:::i;:::-;13515:46;;;;:::i;:::-;13497:15;:64:::0;-1:-1:-1;13403:163:0:o;9880:146::-;9955:4;9966:39;1013:10;9989:7;9998:6;9966:8;:39::i;:::-;-1:-1:-1;10017:4:0;9880:146;;;;;:::o;6295:64::-;6347:12;6290:1;6347:2;:12;:::i;:::-;6333:26;;:11;:26;:::i;:::-;6295:64;:::o;11228:230::-;11276:21;11302:28;11335:32;11386:13;;11401:24;11419:4;11401:9;:24::i;:::-;11427:25;;11378:75;;;;;;11228:230;;;:::o;15726:200::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;15803:21:::1;15870:3;15827:40;15846:21;15827:16:::0;:40:::1;:::i;:::-;:46;;;;:::i;:::-;15878:43;::::0;15803:70;;-1:-1:-1;15886:10:0::1;::::0;15878:43;::::1;;;::::0;15803:70;;15878:43:::1;::::0;;;15803:70;15886:10;15878:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15798:128;15726:200:::0;:::o;10031:346::-;10129:4;10140:36;10150:6;10158:9;10169:6;10140:9;:36::i;:::-;-1:-1:-1;;;;;10190:19:0;;;;;;:11;:19;;;;;;;;1013:10;10190:33;;;;;;;;:43;-1:-1:-1;10190:43:0;10181:96;;;;-1:-1:-1;;;10181:96:0;;12185:2:1;10181:96:0;;;12167:21:1;12224:2;12204:18;;;12197:30;12263:34;12243:18;;;12236:62;-1:-1:-1;;;12314:18:1;;;12307:38;12362:19;;10181:96:0;11983:404:1;10181:96:0;-1:-1:-1;;;;;10314:19:0;;;;;;:11;:19;;;;;;;;1013:10;10314:33;;;;;;;;;10282:74;;10291:6;;10314:40;;10348:6;;10314:40;:::i;:::-;10282:8;:74::i;:::-;-1:-1:-1;10368:4:0;10031:346;;;;;:::o;12164:241::-;12230:7;12263:17;;12252:7;:28;;12244:83;;;;-1:-1:-1;;;12244:83:0;;12724:2:1;12244:83:0;;;12706:21:1;12763:2;12743:18;;;12736:30;12802:34;12782:18;;;12775:62;-1:-1:-1;;;12853:18:1;;;12846:40;12903:19;;12244:83:0;12522:406:1;12244:83:0;12332:19;12355:10;:8;:10::i;:::-;12332:33;-1:-1:-1;12378:21:0;12332:33;12378:7;:21;:::i;:::-;12370:30;12164:241;-1:-1:-1;;;12164:241:0:o;12735:385::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12809:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12801:60;;;::::0;-1:-1:-1;;;12801:60:0;;13135:2:1;12801:60:0::1;::::0;::::1;13117:21:1::0;13174:2;13154:18;;;13147:30;13213:29;13193:18;;;13186:57;13260:18;;12801:60:0::1;12933:351:1::0;12801:60:0::1;12871:9;12866:250;12890:9;:16:::0;12886:20;::::1;12866:250;;;12939:7;-1:-1:-1::0;;;;;12923:23:0::1;:9;12933:1;12923:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;12923:12:0::1;:23:::0;12919:192:::1;;12970:9;12980:16:::0;;:20:::1;::::0;12999:1:::1;::::0;12980:20:::1;:::i;:::-;12970:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;12955:9:::1;:12:::0;;-1:-1:-1;;;;;12970:31:0;;::::1;::::0;12965:1;;12955:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;12955:46:0::1;-1:-1:-1::0;;;;;12955:46:0;;::::1;;::::0;;13008:23;;::::1;::::0;;:14:::1;:23:::0;;;;;;:27;;;13042:11:::1;:20:::0;;;;:28;;-1:-1:-1;;13042:28:0::1;::::0;;13077:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;13077:15:0;;;;;-1:-1:-1;;;;;;13077:15:0::1;::::0;;;;;12866:250:::1;12735:385:::0;:::o;12919:192::-:1;12908:3:::0;::::1;::::0;::::1;:::i;:::-;;;;12866:250;;;;12735:385:::0;:::o;10382:202::-;1013:10;10470:4;10514:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10514:34:0;;;;;;;;;;10470:4;;10481:82;;10504:7;;10514:47;;10551:10;;10514:47;:::i;14213:272::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;14337:3:::1;14318:22:::0;::::1;14310:71;;;;-1:-1:-1::0;;;14310:71:0::1;;;;;;;:::i;:::-;14391:9;14386:95;14404:20:::0;;::::1;14386:95;;;14469:6;14437:15;:29;14453:9;;14463:1;14453:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14437:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14437:29:0;:38;;-1:-1:-1;;14437:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14426:3:::1;::::0;::::1;:::i;:::-;;;14386:95;;7741:26:::0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7741:26:0;;-1:-1:-1;7741:26:0;:::o;12410:320::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12487:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12486:21;12478:61;;;::::0;-1:-1:-1;;;12478:61:0;;13756:2:1;12478:61:0::1;::::0;::::1;13738:21:1::0;13795:2;13775:18;;;13768:30;13834:29;13814:18;;;13807:57;13881:18;;12478:61:0::1;13554:351:1::0;12478:61:0::1;-1:-1:-1::0;;;;;12547:27:0;::::1;12577:1;12547:27:::0;;;:18:::1;:27;::::0;;;;;:31;12544:122:::1;;-1:-1:-1::0;;;;;12632:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;12612:48:::1;::::0;:19:::1;:48::i;:::-;-1:-1:-1::0;;;;;12586:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:74;12544:122:::1;-1:-1:-1::0;;;;;12670:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;12670:27:0::1;12693:4;12670:27:::0;;::::1;::::0;;;12702:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;12702:23:0::1;::::0;;::::1;::::0;;12410:320::o;13727:92::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;13791:13:::1;:23:::0;;-1:-1:-1;;13791:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13727:92::o;10914:309::-;10963:19;10987:22;11014:19;11038:24;11067:23;11095:16;11130:12;;11144:15;;6290:1;6347:2;:12;;;;:::i;:::-;6333:26;;:11;:26;:::i;:::-;11174:17;;11193:10;:8;:10::i;:::-;11205:11;;11122:96;;;;-1:-1:-1;11122:96:0;;-1:-1:-1;11122:96:0;-1:-1:-1;11122:96:0;-1:-1:-1;11205:11:0;;;;;-1:-1:-1;10914:309:0;-1:-1:-1;10914:309:0:o;19626:177::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;19719:14:::1;:22:::0;;;;19746:13:::1;:20:::0;;;;19771:18:::1;:27:::0;19626:177::o;9378:201::-;-1:-1:-1;;;;;9462:20:0;;9444:7;9462:20;;;:11;:20;;;;;;;;9458:56;;;-1:-1:-1;;;;;;9491:23:0;;;;;:14;:23;;;;;;;9378:201::o;9458:56::-;-1:-1:-1;;;;;9546:27:0;;;;;;:18;:27;;;;;;9526:48;;:19;:48::i;15931:258::-;16022:12;4639:6;;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;16046:6:::1;16056:1;16046:11:::0;16043:81:::1;;16073:45;::::0;-1:-1:-1;;;16073:45:0;;16112:4:::1;16073:45;::::0;::::1;3755:51:1::0;-1:-1:-1;;;;;16073:30:0;::::1;::::0;::::1;::::0;3728:18:1;;16073:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16064:54;;16043:81;16135:49;::::0;-1:-1:-1;;;16135:49:0;;16165:10:::1;16135:49;::::0;::::1;14273:51:1::0;14340:18;;;14333:34;;;-1:-1:-1;;;;;16135:29:0;::::1;::::0;::::1;::::0;14246:18:1;;16135:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20325:365::-:0;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;20465:18:::1;20536:15:::0;20521:12;20487:30:::1;20503:14:::0;20487:13;:30:::1;:::i;:::-;:46;;;;:::i;:::-;:64;;;;:::i;:::-;20465:86;;20577:2;20564:10;:15;20556:50;;;::::0;-1:-1:-1;;;20556:50:0;;14830:2:1;20556:50:0::1;::::0;::::1;14812:21:1::0;14869:2;14849:18;;;14842:30;-1:-1:-1;;;14888:18:1;;;14881:52;14950:18;;20556:50:0::1;14628:346:1::0;20556:50:0::1;19483:14:::0;:29;;;19517:14;:30;;;19552:13;:27;;;19584:15;:32;;;20611:74:::1;20460:230;20325:365:::0;;;;:::o;13824:188::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;13922:9:::1;13917:91;13933:20:::0;;::::1;13917:91;;;13996:6;13966:13;:27;13980:9;;13990:1;13980:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13966:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13966:27:0;:36;;-1:-1:-1;;13966:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13955:3:::1;::::0;::::1;:::i;:::-;;;13917:91;;10589:320:::0;1013:10;10682:4;10702:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10702:34:0;;;;;;;;;;:53;-1:-1:-1;10702:53:0;10693:103;;;;-1:-1:-1;;;10693:103:0;;15181:2:1;10693:103:0;;;15163:21:1;15220:2;15200:18;;;15193:30;15259:34;15239:18;;;15232:62;-1:-1:-1;;;15310:18:1;;;15303:35;15355:19;;10693:103:0;14979:401:1;10693:103:0;1013:10;10834:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10834:34:0;;;;;;;;;;10801:87;;1013:10;10824:7;;10834:52;;10871:15;;10834:52;:::i;11975:184::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;12067:17:::1;:42:::0;;-1:-1:-1;;;;;12067:42:0;;::::1;-1:-1:-1::0;;;;;;12067:42:0;;::::1;;::::0;;;12114:16:::1;:40:::0;;;;;::::1;::::0;::::1;;::::0;;11975:184::o;19808:252::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;19936:28:::1;:58:::0;;;;19999:27:::1;:56:::0;19808:252::o;9584:152::-;9662:4;9673:42;1013:10;9697:9;9708:6;9673:9;:42::i;13245:152::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;13388:4:::1;13363:20:::0;6347:12:::1;6290:1;6347:2;:12;:::i;:::-;6333:26;::::0;:11:::1;:26;:::i;:::-;13349:34;;;;:::i;:::-;13348:44;;;;:::i;:::-;13333:12;:59:::0;-1:-1:-1;13245:152:0:o;14803:918::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;14923:12:::1;14944:19:::0;14966:10:::1;:8;:10::i;:::-;14944:32:::0;-1:-1:-1;14989:33:0;;::::1;14981:85;;;::::0;-1:-1:-1;;;14981:85:0;;15587:2:1;14981:85:0::1;::::0;::::1;15569:21:1::0;15626:2;15606:18;;;15599:30;15665:34;15645:18;;;15638:62;-1:-1:-1;;;15716:18:1;;;15709:38;15764:19;;14981:85:0::1;15385:404:1::0;14981:85:0::1;15079:6;15075:75;15089:20:::0;;::::1;15075:75;;;15135:6;;15142:1;15135:9;;;;;;;:::i;:::-;;;;;;;15128:4;:16;;;;:::i;:::-;15121:23:::0;-1:-1:-1;15111:3:0;::::1;::::0;::::1;:::i;:::-;;;;15075:75;;;;15187:4;15162:21;15172:10;15162:9;:21::i;:::-;:29;;15154:70;;;::::0;-1:-1:-1;;;15154:70:0;;15996:2:1;15154:70:0::1;::::0;::::1;15978:21:1::0;16035:2;16015:18;;;16008:30;16074;16054:18;;;16047:58;16122:18;;15154:70:0::1;15794:352:1::0;15154:70:0::1;15285:18;15292:11:::0;15285:4;:18:::1;:::i;:::-;-1:-1:-1::0;;;;;15258:24:0;::::1;;::::0;;;:18:::1;:24;::::0;;;;;:45:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;15231:24:0;::::1;;::::0;;;:18:::1;:24;::::0;;;;;;;:72;;;;15315:11:::1;:17:::0;;;;::::1;;15311:84;;;-1:-1:-1::0;;;;;15362:20:0;::::1;;::::0;;;:14:::1;:20;::::0;;;;;:27:::1;::::0;15385:4;;15362:27:::1;:::i;:::-;-1:-1:-1::0;;;;;15339:20:0;::::1;;::::0;;;:14:::1;:20;::::0;;;;:50;15311:84:::1;15405:6;15401:315;15415:20:::0;;::::1;15401:315;;;15455:11;:25;15467:9;;15477:1;15467:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15455:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15455:25:0;;::::1;;15451:114;;;15549:6;;15556:1;15549:9;;;;;;;:::i;:::-;;;;;;;15518:14;:28;15533:9;;15543:1;15533:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15518:28:0::1;-1:-1:-1::0;;;;;15518:28:0::1;;;;;;;;;;;;;:40;;;;:::i;:::-;15487:14;:28;15502:9;;15512:1;15502:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15487:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15487:28:0;:71;15451:114:::1;15651:11;15639:6;;15646:1;15639:9;;;;;;;:::i;:::-;;;;;;;:23;;;;:::i;:::-;15604:18;:32;15623:9;;15633:1;15623:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15604:32:0::1;-1:-1:-1::0;;;;;15604:32:0::1;;;;;;;;;;;;;:58;;;;:::i;:::-;15569:18;:32;15588:9;;15598:1;15588:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15569:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15569:32:0;:93;15688:9;;15698:1;15688:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15674:37:0::1;15683:4;-1:-1:-1::0;;;;;15674:37:0::1;-1:-1:-1::0;;;;;;;;;;;15701:6:0::1;;15708:1;15701:9;;;;;;;:::i;:::-;;;;;;;15674:37;;;;1607:25:1::0;;1595:2;1580:18;;1461:177;15674:37:0::1;;;;;;;;15437:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15401:315;;;;14916:805;;14803:918:::0;;;;;:::o;13572:150::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;13655:21:::1;:31:::0;;;::::1;;;;-1:-1:-1::0;;13655:31:0;;::::1;::::0;;;::::1;::::0;;;13691:13:::1;:26:::0;13572:150::o;14017:191::-;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;14120:9:::1;14115:89;14131:20:::0;;::::1;14115:89;;;14192:6;14164:11;:25;14176:9;;14186:1;14176:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14164:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14164:25:0;:34;;-1:-1:-1;;14164:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14153:3:::1;::::0;::::1;:::i;:::-;;;14115:89;;4766:223:::0;4618:7;4639:6;-1:-1:-1;;;;;4639:6:0;1013:10;4690:23;4682:68;;;;-1:-1:-1;;;4682:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4849:22:0;::::1;4841:73;;;::::0;-1:-1:-1;;;4841:73:0;;16353:2:1;4841:73:0::1;::::0;::::1;16335:21:1::0;16392:2;16372:18;;;16365:30;16431:34;16411:18;;;16404:62;-1:-1:-1;;;16482:18:1;;;16475:36;16528:19;;4841:73:0::1;16151:402:1::0;4841:73:0::1;4945:6;::::0;;4924:38:::1;::::0;-1:-1:-1;;;;;4924:38:0;;::::1;::::0;4945:6;::::1;::::0;4924:38:::1;::::0;::::1;4967:6;:17:::0;;-1:-1:-1;;;;;;4967:17:0::1;-1:-1:-1::0;;;;;4967:17:0;;;::::1;::::0;;;::::1;::::0;;4766:223::o;22568:310::-;-1:-1:-1;;;;;22655:19:0;;22647:68;;;;-1:-1:-1;;;22647:68:0;;16760:2:1;22647:68:0;;;16742:21:1;16799:2;16779:18;;;16772:30;16838:34;16818:18;;;16811:62;-1:-1:-1;;;16889:18:1;;;16882:34;16933:19;;22647:68:0;16558:400:1;22647:68:0;-1:-1:-1;;;;;22728:21:0;;22720:68;;;;-1:-1:-1;;;22720:68:0;;17165:2:1;22720:68:0;;;17147:21:1;17204:2;17184:18;;;17177:30;17243:34;17223:18;;;17216:62;-1:-1:-1;;;17294:18:1;;;17287:32;17336:19;;22720:68:0;16963:398:1;22720:68:0;-1:-1:-1;;;;;22795:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22841:32;;1607:25:1;;;22841:32:0;;1580:18:1;22841:32:0;;;;;;;;22568:310;;;:::o;22883:2276::-;4618:7;4639:6;-1:-1:-1;;;;;22962:15:0;;;4639:6;;22962:15;;;;:32;;-1:-1:-1;4618:7:0;4639:6;-1:-1:-1;;;;;22981:13:0;;;4639:6;;22981:13;;22962:32;22959:172;;;23009:11;;;;23001:43;;;;-1:-1:-1;;;23001:43:0;;17568:2:1;23001:43:0;;;17550:21:1;17607:2;17587:18;;;17580:30;-1:-1:-1;;;17626:18:1;;;17619:50;17686:18;;23001:43:0;17366:344:1;23001:43:0;23055:7;;;;;;;:32;;;;;23074:13;-1:-1:-1;;;;;23066:21:0;:4;-1:-1:-1;;;;;23066:21:0;;23055:32;23052:74;;;-1:-1:-1;;;;;23095:17:0;;;;;;:13;:17;;;;;:24;;-1:-1:-1;;23095:24:0;23115:4;23095:24;;;23052:74;23140:13;;;;:25;;;;-1:-1:-1;23158:7:0;;;;;;;23157:8;23140:25;23137:84;;;-1:-1:-1;;;;;23181:19:0;;;;;;:13;:19;;;;;;;;23180:20;23172:43;;;;-1:-1:-1;;;23172:43:0;;17917:2:1;23172:43:0;;;17899:21:1;17956:2;17936:18;;;17929:30;-1:-1:-1;;;17975:18:1;;;17968:41;18026:18;;23172:43:0;17715:335:1;23172:43:0;23248:12;;23238:6;:22;;23237:49;;;-1:-1:-1;;;;;;23265:21:0;;;;;;:15;:21;;;;;;;;23237:49;:72;;;-1:-1:-1;;;;;;23290:19:0;;;;;;:15;:19;;;;;;;;23237:72;23229:106;;;;-1:-1:-1;;;23229:106:0;;18257:2:1;23229:106:0;;;18239:21:1;18296:2;18276:18;;;18269:30;-1:-1:-1;;;18315:18:1;;;18308:51;18376:18;;23229:106:0;18055:345:1;23229:106:0;-1:-1:-1;;;;;23347:25:0;;;;;;:19;:25;;;;;;;;23346:26;:54;;;;-1:-1:-1;;;;;;23377:23:0;;;;;;:19;:23;;;;;;;;23376:24;23346:54;:77;;;;;23410:13;-1:-1:-1;;;;;23404:19:0;:2;-1:-1:-1;;;;;23404:19:0;;;23346:77;23342:177;;;23470:15;;23459:6;23443:13;23453:2;23443:9;:13::i;:::-;:22;;;;:::i;:::-;23442:43;;23434:79;;;;-1:-1:-1;;;23434:79:0;;18607:2:1;23434:79:0;;;18589:21:1;18646:2;18626:18;;;18619:30;18685:26;18665:18;;;18658:54;18729:18;;23434:79:0;18405:348:1;23434:79:0;23588:28;23619:24;23637:4;23619:9;:24::i;:::-;23588:55;;23683:12;;23659:20;:36;23656:103;;23748:1;23733:12;;:16;;;;:::i;:::-;23710:39;;23656:103;23822:13;;23798:37;;;;;;;23848:51;;-1:-1:-1;23883:16:0;;;;23882:17;23848:51;:87;;;;;23922:13;-1:-1:-1;;;;;23914:21:0;:4;-1:-1:-1;;;;;23914:21:0;;;23848:87;:123;;;;-1:-1:-1;23950:21:0;;;;;;;23848:123;23844:245;;;24017:13;;23994:36;;24043;24058:20;24043:14;:36::i;:::-;24133:16;;;;24132:17;:42;;;;;24161:13;-1:-1:-1;;;;;24153:21:0;:4;-1:-1:-1;;;;;24153:21:0;;;24132:42;:67;;;;-1:-1:-1;24178:21:0;;;;;;;24132:67;24129:272;;;24226:27;;24254:16;;24272:21;;24213:81;;24226:27;-1:-1:-1;;;;;24254:16:0;;24213:12;:81::i;:::-;24320:28;;24349:17;;24368:22;;24307:84;;24320:28;-1:-1:-1;;;;;24349:17:0;;24307:12;:84::i;:::-;-1:-1:-1;;;;;;;24445:17:0;;24418:12;24445:17;;;:11;:17;;;;;;24433:4;;24445:17;;;:36;;-1:-1:-1;;;;;;24466:15:0;;;;;;:11;:15;;;;;;;;24445:36;24442:93;;;-1:-1:-1;24501:5:0;24515:14;20753;;;20732:18;:35;20793:14;;;20772:18;:35;20832:13;;;20812:17;:33;20872:15;;;20850:19;:37;-1:-1:-1;19483:29:0;;;;19517:30;;;;19552:27;;;19584:32;20695:224;24515:14;24544:15;24561:23;24586:19;24607:23;24632:18;24652;24672:17;24692:19;24715:28;24726:6;24734:2;24738:4;24715:10;:28::i;:::-;24543:200;;;;;;;;;;;;;;;;24750:78;24768:4;24774:2;24778:6;24786:7;24795:15;24812;24750:17;:78::i;:::-;24875:11;24855:17;;:31;;;;:::i;:::-;24835:17;:51;24919:25;;:39;;24947:11;;24919:39;:::i;:::-;24891:25;:67;24969:7;24965:188;;24986:15;:13;:15::i;:::-;24965:188;;;25041:17;;25021:38;;25030:10;;-1:-1:-1;;;;;25041:17:0;25021:8;:38::i;:::-;25068:34;25077:10;25096:4;25068:8;:34::i;:::-;25130:16;;25111:36;;25120:9;;-1:-1:-1;;;;;25130:16:0;25111:8;:36::i;:::-;22952:2207;;;;;;;;;22883:2276;;;:::o;16203:145::-;16244:7;16259:15;16276;16295:19;:17;:19::i;:::-;16258:56;;-1:-1:-1;16258:56:0;-1:-1:-1;16326:17:0;16258:56;;16326:17;:::i;:::-;16319:24;;;;16203:145;:::o;21066:381::-;8241:16;:23;;-1:-1:-1;;8241:23:0;8260:4;8241:23;;;:16;21162::::1;21177:1;21162:12:::0;:16:::1;:::i;:::-;21141:37:::0;-1:-1:-1;21212:21:0::1;21240:28;21141:37:::0;21240:16:::1;:28::i;:::-;21273:18;21294:42;21318:18:::0;21294:21:::1;:42;:::i;:::-;21273:63;;21341:35;21354:10;21365;21341:12;:35::i;:::-;21388:52;::::0;;4019:25:1;;;4075:2;4060:18;;4053:34;;;4103:18;;;4096:34;;;21388:52:0::1;::::0;4007:2:1;3992:18;21388:52:0::1;;;;;;;-1:-1:-1::0;;8275:16:0;:24;;-1:-1:-1;;8275:24:0;;;-1:-1:-1;;21066:381:0:o;18542:371::-;18660:15;18679:1;18660:20;18657:42;;18542:371;;;:::o;18657:42::-;18726:12;;18708:15;:30;18705:76;;;18763:12;;18745:30;;18705:76;18829:20;18839:9;18829;:20::i;:::-;18791:32;18807:16;18791:15;:32;:::i;:::-;18790:59;18787:122;;18856:47;18877:9;18887:15;18856:20;:47::i;20894:20::-;20695:224::o;16932:1032::-;17030:15;17047:23;17072:19;17096:23;17121:18;17141;17161:17;17180:19;17208:18;17229;;17208:39;;17270:13;-1:-1:-1;;;;;17257:26:0;:9;-1:-1:-1;;;;;17257:26:0;;17254:142;;-1:-1:-1;17304:14:0;;17254:142;;;17343:13;-1:-1:-1;;;;;17333:23:0;:6;-1:-1:-1;;;;;17333:23:0;;17330:66;;-1:-1:-1;17377:13:0;;17330:66;17460:16;;:22;;17479:3;17460:22;:::i;:::-;17446:10;17427:14;;17417:7;:24;;;;:::i;:::-;17415:41;;;;:::i;:::-;:68;;;;:::i;:::-;17402:81;;17546:16;;17565:3;17546:22;;;;:::i;:::-;17532:10;17513:14;;17503:7;:24;;;;:::i;:::-;17501:41;;;;:::i;:::-;:68;;;;:::i;:::-;17488:81;;17631:16;;17650:3;17631:22;;;;:::i;:::-;17617:10;17598:13;;17588:7;:23;;;;:::i;:::-;17586:41;;;;:::i;:::-;:68;;;;:::i;:::-;17574:80;;17720:16;;17739:3;17720:22;;;;:::i;:::-;17705:10;17685:15;;17675:7;:25;;;;:::i;:::-;17673:42;;;;:::i;:::-;:70;;;;:::i;:::-;17659:84;-1:-1:-1;17659:84:0;17806:9;17780:23;17793:10;17780;:23;:::i;:::-;:35;;;;:::i;:::-;:49;;;;:::i;:::-;17768:62;;:7;:62;:::i;:::-;17750:80;;17863:10;:8;:10::i;:::-;17849:24;;:11;:24;:::i;:::-;17835:38;;17898:10;:8;:10::i;:::-;17888:20;;:7;:20;:::i;:::-;17878:30;;17949:10;:8;:10::i;:::-;17931:28;;:15;:28;:::i;:::-;17913:46;;17201:763;16932:1032;;;;;;;;;;;:::o;25164:594::-;-1:-1:-1;;;;;25344:24:0;;;;;;:18;:24;;;;;;:35;;25372:7;;25344:35;:::i;:::-;-1:-1:-1;;;;;25314:24:0;;;;;;:18;:24;;;;;;;;:65;;;;25390:11;:17;;;;;;25386:98;;;-1:-1:-1;;;;;25443:20:0;;;;;;:14;:20;;;;;;:35;;25471:7;;25443:35;:::i;:::-;-1:-1:-1;;;;;25417:20:0;;;;;;:14;:20;;;;;:61;25386:98;-1:-1:-1;;;;;25494:15:0;;;;;;:11;:15;;;;;;;;25490:104;;;-1:-1:-1;;;;;25545:18:0;;;;;;:14;:18;;;;;;:43;;25573:15;;25545:43;:::i;:::-;-1:-1:-1;;;;;25519:18:0;;;;;;:14;:18;;;;;:69;25490:104;-1:-1:-1;;;;;25628:22:0;;;;;;:18;:22;;;;;;:43;;25656:15;;25628:43;:::i;:::-;-1:-1:-1;;;;;25598:22:0;;;;;;:18;:22;;;;;:73;25681:19;;25678:76;;25727:2;-1:-1:-1;;;;;25712:35:0;25721:4;-1:-1:-1;;;;;25712:35:0;-1:-1:-1;;;;;;;;;;;25731:15:0;25712:35;;;;1607:25:1;;1595:2;1580:18;;1461:177;25712:35:0;;;;;;;;25678:76;25164:594;;;;;;:::o;20925:134::-;20963:91;20975:18;;20995;;21015:17;;21034:19;;19483:14;:29;;;;19517:14;:30;;;;19552:13;:27;19584:15;:32;19359:262;18918:436;18992:26;19033:10;:8;:10::i;:::-;19021:22;;:9;:22;:::i;:::-;-1:-1:-1;;;;;19085:34:0;;;;;;:18;:34;;;;;;18992:51;;-1:-1:-1;19085:55:0;;18992:51;;19085:55;:::i;:::-;-1:-1:-1;;;;;19048:34:0;;;;;;:18;:34;;;;;;;;:92;;;;19150:11;:27;;;;;;19147:118;;;-1:-1:-1;;;;;19217:30:0;;;;;;:14;:30;;;;;;:42;;19250:9;;19217:42;:::i;:::-;-1:-1:-1;;;;;19184:30:0;;;;;;:14;:30;;;;;:75;19147:118;19272:13;;19269:81;;19297:47;;1607:25:1;;;-1:-1:-1;;;;;19297:47:0;;;19306:10;;-1:-1:-1;;;;;;;;;;;19297:47:0;1595:2:1;1580:18;19297:47:0;1461:177:1;16353:572:0;16403:7;16412;16426:15;16444:17;;16426:35;;16466:15;6290:1;6347:2;:12;;;;:::i;:::-;6333:26;;:11;:26;:::i;:::-;16466:29;;16505:9;16500:300;16524:9;:16;16520:20;;16500:300;;;16592:7;16557:18;:32;16576:9;16586:1;16576:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16576:12:0;16557:32;;;;;;;;;;;;;:42;;:84;;;16634:7;16603:14;:28;16618:9;16628:1;16618:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16618:12:0;16603:28;;;;;;;;;;;;;:38;16557:84;16553:129;;;16651:17;;6290:1;6347:2;:12;;;;:::i;:::-;6333:26;;:11;:26;:::i;:::-;16643:39;;;;;;;16353:572;;:::o;16553:129::-;16708:18;:32;16727:9;16737:1;16727:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16727:12:0;16708:32;;;;;;;;;;;;;16698:42;;:7;:42;:::i;:::-;16688:52;;16766:14;:28;16781:9;16791:1;16781:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16781:12:0;16766:28;;;;;;;;;;;;;16756:38;;:7;:38;:::i;:::-;16746:48;-1:-1:-1;16542:3:0;;;;:::i;:::-;;;;16500:300;;;-1:-1:-1;6347:12:0;6290:1;6347:2;:12;:::i;:::-;6333:26;;:11;:26;:::i;:::-;16819:17;;:29;;;;:::i;:::-;16808:7;:41;16804:86;;;16859:17;;6290:1;6347:2;:12;;;;:::i;:::-;6333:26;;:11;:26;:::i;:::-;16851:39;;;;;;16353:572;;:::o;16804:86::-;16903:7;;16912;;-1:-1:-1;16353:572:0;-1:-1:-1;16353:572:0:o;21452:387::-;21536:16;;;21550:1;21536:16;;;;;;;;21512:21;;21536:16;;;;;;;;;;-1:-1:-1;21536:16:0;21512:40;;21575:4;21557;21562:1;21557:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;21557:23:0;;;-1:-1:-1;;;;;21557:23:0;;;;;21595:15;-1:-1:-1;;;;;21595:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21585:4;21590:1;21585:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;21585:32:0;;;-1:-1:-1;;;;;21585:32:0;;;;;21622:62;21639:4;21654:15;21672:11;21622:8;:62::i;:::-;21689:145;;-1:-1:-1;;;21689:145:0;;-1:-1:-1;;;;;21689:15:0;:66;;;;:145;;21761:11;;21778:1;;21785:4;;21803;;21814:15;;21689:145;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22276:285;22351:62;22368:4;22383:15;22401:11;22351:8;:62::i;:::-;22418:15;-1:-1:-1;;;;;22418:31:0;;22457:9;22481:4;22492:11;22509:1;22516;22523:7;4618;4639:6;-1:-1:-1;;;;;4639:6:0;;4572:78;22523:7;22418:138;;;;;;-1:-1:-1;;;;;;22418:138:0;;;-1:-1:-1;;;;;20558:15:1;;;22418:138:0;;;20540:34:1;20590:18;;;20583:34;;;;20633:18;;;20626:34;;;;20676:18;;;20669:34;20740:15;;;20719:19;;;20712:44;22536:15:0;20772:19:1;;;20765:35;20474:19;;22418:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17971:566::-;8241:16;:23;;-1:-1:-1;;8241:23:0;8260:4;8241:23;;;:16;18123:10:::1;:8;:10::i;:::-;18105:28;::::0;:15;:28:::1;:::i;:::-;-1:-1:-1::0;;;;;18167:26:0;::::1;;::::0;;;:18:::1;:26;::::0;;;;;18078:55;;-1:-1:-1;18167:45:0::1;::::0;18078:55;;18167:45:::1;:::i;:::-;-1:-1:-1::0;;;;;18138:26:0;::::1;;::::0;;;:18:::1;:26;::::0;;;;;;;:74;;;;18225:11:::1;:19:::0;;;;::::1;;18221:101;;;-1:-1:-1::0;;;;;18276:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;:40:::1;::::0;18301:15;;18276:40:::1;:::i;:::-;-1:-1:-1::0;;;;;18251:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;:65;18221:101:::1;18391:4;18364:33;::::0;;;:18:::1;:33;::::0;;;;;:52:::1;::::0;18400:16;;18364:52:::1;:::i;:::-;18355:4;18328:33;::::0;;;:18:::1;:33;::::0;;;;;;:88;;;;18428:48;;-1:-1:-1;;;;;18428:48:0;::::1;::::0;-1:-1:-1;;;;;;;;;;;18428:48:0;::::1;::::0;18460:15;1607:25:1;;1595:2;1580:18;;1461:177;18428:48:0::1;;;;;;;;18483:47;18507:15;18523:6;18483:23;:47::i;:::-;-1:-1:-1::0;;8275:16:0;:24;;-1:-1:-1;;8275:24:0;;;-1:-1:-1;17971:566:0:o;21844:427::-;21967:16;;;21981:1;21967:16;;;;;;;;21943:21;;21967:16;;;;;;;;;;-1:-1:-1;21967:16:0;21943:40;;22006:4;21988;21993:1;21988:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;21988:23:0;;;-1:-1:-1;;;;;21988:23:0;;;;;22026:15;-1:-1:-1;;;;;22026:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22016:4;22021:1;22016:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;22016:32:0;;;-1:-1:-1;;;;;22016:32:0;;;;;22053:62;22070:4;22085:15;22103:11;22053:8;:62::i;:::-;22120:146;;-1:-1:-1;;;22120:146:0;;-1:-1:-1;;;;;22120:15:0;:66;;;;:146;;22192:11;;22209:1;;22216:4;;22226:14;;22246:15;;22120:146;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21938:333;21844:427;;:::o;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:118::-;472:5;465:13;458:21;451:5;448:32;438:60;;494:1;491;484:12;438:60;386:118;:::o;509:566::-;601:6;609;617;670:2;658:9;649:7;645:23;641:32;638:52;;;686:1;683;676:12;638:52;726:9;713:23;759:18;751:6;748:30;745:50;;;791:1;788;781:12;745:50;830:70;892:7;883:6;872:9;868:22;830:70;:::i;:::-;919:8;;-1:-1:-1;804:96:1;-1:-1:-1;;1004:2:1;989:18;;976:32;1017:28;976:32;1017:28;:::i;:::-;1064:5;1054:15;;;509:566;;;;;:::o;1080:376::-;1142:6;1150;1203:2;1191:9;1182:7;1178:23;1174:32;1171:52;;;1219:1;1216;1209:12;1171:52;1258:9;1245:23;1277:28;1299:5;1277:28;:::i;:::-;1324:5;-1:-1:-1;1381:2:1;1366:18;;1353:32;1394:30;1353:32;1394:30;:::i;:::-;1443:7;1433:17;;;1080:376;;;;;:::o;1643:131::-;-1:-1:-1;;;;;1718:31:1;;1708:42;;1698:70;;1764:1;1761;1754:12;1779:247;1838:6;1891:2;1879:9;1870:7;1866:23;1862:32;1859:52;;;1907:1;1904;1897:12;1859:52;1946:9;1933:23;1965:31;1990:5;1965:31;:::i;2031:248::-;2099:6;2107;2160:2;2148:9;2139:7;2135:23;2131:32;2128:52;;;2176:1;2173;2166:12;2128:52;-1:-1:-1;;2199:23:1;;;2269:2;2254:18;;;2241:32;;-1:-1:-1;2031:248:1:o;2284:597::-;2396:4;2425:2;2454;2443:9;2436:21;2486:6;2480:13;2529:6;2524:2;2513:9;2509:18;2502:34;2554:1;2564:140;2578:6;2575:1;2572:13;2564:140;;;2673:14;;;2669:23;;2663:30;2639:17;;;2658:2;2635:26;2628:66;2593:10;;2564:140;;;2722:6;2719:1;2716:13;2713:91;;;2792:1;2787:2;2778:6;2767:9;2763:22;2759:31;2752:42;2713:91;-1:-1:-1;2865:2:1;2844:15;-1:-1:-1;;2840:29:1;2825:45;;;;2872:2;2821:54;;2284:597;-1:-1:-1;;;2284:597:1:o;2886:180::-;2945:6;2998:2;2986:9;2977:7;2973:23;2969:32;2966:52;;;3014:1;3011;3004:12;2966:52;-1:-1:-1;3037:23:1;;2886:180;-1:-1:-1;2886:180:1:o;3071:315::-;3139:6;3147;3200:2;3188:9;3179:7;3175:23;3171:32;3168:52;;;3216:1;3213;3206:12;3168:52;3255:9;3242:23;3274:31;3299:5;3274:31;:::i;:::-;3324:5;3376:2;3361:18;;;;3348:32;;-1:-1:-1;;;3071:315:1:o;4141:456::-;4218:6;4226;4234;4287:2;4275:9;4266:7;4262:23;4258:32;4255:52;;;4303:1;4300;4293:12;4255:52;4342:9;4329:23;4361:31;4386:5;4361:31;:::i;:::-;4411:5;-1:-1:-1;4468:2:1;4453:18;;4440:32;4481:33;4440:32;4481:33;:::i;:::-;4141:456;;4533:7;;-1:-1:-1;;;4587:2:1;4572:18;;;;4559:32;;4141:456::o;5223:241::-;5279:6;5332:2;5320:9;5311:7;5307:23;5303:32;5300:52;;;5348:1;5345;5338:12;5300:52;5387:9;5374:23;5406:28;5428:5;5406:28;:::i;6703:316::-;6780:6;6788;6796;6849:2;6837:9;6828:7;6824:23;6820:32;6817:52;;;6865:1;6862;6855:12;6817:52;-1:-1:-1;;6888:23:1;;;6958:2;6943:18;;6930:32;;-1:-1:-1;7009:2:1;6994:18;;;6981:32;;6703:316;-1:-1:-1;6703:316:1:o;7024:385::-;7110:6;7118;7126;7134;7187:3;7175:9;7166:7;7162:23;7158:33;7155:53;;;7204:1;7201;7194:12;7155:53;-1:-1:-1;;7227:23:1;;;7297:2;7282:18;;7269:32;;-1:-1:-1;7348:2:1;7333:18;;7320:32;;7399:2;7384:18;7371:32;;-1:-1:-1;7024:385:1;-1:-1:-1;7024:385:1:o;7414:388::-;7482:6;7490;7543:2;7531:9;7522:7;7518:23;7514:32;7511:52;;;7559:1;7556;7549:12;7511:52;7598:9;7585:23;7617:31;7642:5;7617:31;:::i;:::-;7667:5;-1:-1:-1;7724:2:1;7709:18;;7696:32;7737:33;7696:32;7737:33;:::i;7807:908::-;7938:6;7946;7954;7962;7970;8023:2;8011:9;8002:7;7998:23;7994:32;7991:52;;;8039:1;8036;8029:12;7991:52;8078:9;8065:23;8097:31;8122:5;8097:31;:::i;:::-;8147:5;-1:-1:-1;8203:2:1;8188:18;;8175:32;8226:18;8256:14;;;8253:34;;;8283:1;8280;8273:12;8253:34;8322:70;8384:7;8375:6;8364:9;8360:22;8322:70;:::i;:::-;8411:8;;-1:-1:-1;8296:96:1;-1:-1:-1;8499:2:1;8484:18;;8471:32;;-1:-1:-1;8515:16:1;;;8512:36;;;8544:1;8541;8534:12;8512:36;;8583:72;8647:7;8636:8;8625:9;8621:24;8583:72;:::i;:::-;7807:908;;;;-1:-1:-1;7807:908:1;;-1:-1:-1;8674:8:1;;8557:98;7807:908;-1:-1:-1;;;7807:908:1:o;8720:309::-;8785:6;8793;8846:2;8834:9;8825:7;8821:23;8817:32;8814:52;;;8862:1;8859;8852:12;8814:52;8901:9;8888:23;8920:28;8942:5;8920:28;:::i;9034:356::-;9236:2;9218:21;;;9255:18;;;9248:30;9314:34;9309:2;9294:18;;9287:62;9381:2;9366:18;;9034:356::o;9395:401::-;9597:2;9579:21;;;9636:2;9616:18;;;9609:30;9675:34;9670:2;9655:18;;9648:62;-1:-1:-1;;;9741:2:1;9726:18;;9719:35;9786:3;9771:19;;9395:401::o;9801:127::-;9862:10;9857:3;9853:20;9850:1;9843:31;9893:4;9890:1;9883:15;9917:4;9914:1;9907:15;9933:127;9994:10;9989:3;9985:20;9982:1;9975:31;10025:4;10022:1;10015:15;10049:4;10046:1;10039:15;10065:135;10104:3;10125:17;;;10122:43;;10145:18;;:::i;:::-;-1:-1:-1;10192:1:1;10181:13;;10065:135::o;10205:422::-;10294:1;10337:5;10294:1;10351:270;10372:7;10362:8;10359:21;10351:270;;;10431:4;10427:1;10423:6;10419:17;10413:4;10410:27;10407:53;;;10440:18;;:::i;:::-;10490:7;10480:8;10476:22;10473:55;;;10510:16;;;;10473:55;10589:22;;;;10549:15;;;;10351:270;;;10355:3;10205:422;;;;;:::o;10632:806::-;10681:5;10711:8;10701:80;;-1:-1:-1;10752:1:1;10766:5;;10701:80;10800:4;10790:76;;-1:-1:-1;10837:1:1;10851:5;;10790:76;10882:4;10900:1;10895:59;;;;10968:1;10963:130;;;;10875:218;;10895:59;10925:1;10916:10;;10939:5;;;10963:130;11000:3;10990:8;10987:17;10984:43;;;11007:18;;:::i;:::-;-1:-1:-1;;11063:1:1;11049:16;;11078:5;;10875:218;;11177:2;11167:8;11164:16;11158:3;11152:4;11149:13;11145:36;11139:2;11129:8;11126:16;11121:2;11115:4;11112:12;11108:35;11105:77;11102:159;;;-1:-1:-1;11214:19:1;;;11246:5;;11102:159;11293:34;11318:8;11312:4;11293:34;:::i;:::-;11363:6;11359:1;11355:6;11351:19;11342:7;11339:32;11336:58;;;11374:18;;:::i;:::-;11412:20;;10632:806;-1:-1:-1;;;10632:806:1:o;11443:140::-;11501:5;11530:47;11571:4;11561:8;11557:19;11551:4;11530:47;:::i;11588:168::-;11628:7;11694:1;11690;11686:6;11682:14;11679:1;11676:21;11671:1;11664:9;11657:17;11653:45;11650:71;;;11701:18;;:::i;:::-;-1:-1:-1;11741:9:1;;11588:168::o;11761:217::-;11801:1;11827;11817:132;;11871:10;11866:3;11862:20;11859:1;11852:31;11906:4;11903:1;11896:15;11934:4;11931:1;11924:15;11817:132;-1:-1:-1;11963:9:1;;11761:217::o;12392:125::-;12432:4;12460:1;12457;12454:8;12451:34;;;12465:18;;:::i;:::-;-1:-1:-1;12502:9:1;;12392:125::o;13289:127::-;13350:10;13345:3;13341:20;13338:1;13331:31;13381:4;13378:1;13371:15;13405:4;13402:1;13395:15;13421:128;13461:3;13492:1;13488:6;13485:1;13482:13;13479:39;;;13498:18;;:::i;:::-;-1:-1:-1;13534:9:1;;13421:128::o;13910:184::-;13980:6;14033:2;14021:9;14012:7;14008:23;14004:32;14001:52;;;14049:1;14046;14039:12;14001:52;-1:-1:-1;14072:16:1;;13910:184;-1:-1:-1;13910:184:1:o;14378:245::-;14445:6;14498:2;14486:9;14477:7;14473:23;14469:32;14466:52;;;14514:1;14511;14504:12;14466:52;14546:9;14540:16;14565:28;14587:5;14565:28;:::i;18890:251::-;18960:6;19013:2;19001:9;18992:7;18988:23;18984:32;18981:52;;;19029:1;19026;19019:12;18981:52;19061:9;19055:16;19080:31;19105:5;19080:31;:::i;19146:461::-;19199:3;19237:5;19231:12;19264:6;19259:3;19252:19;19290:4;19319:2;19314:3;19310:12;19303:19;;19356:2;19349:5;19345:14;19377:1;19387:195;19401:6;19398:1;19395:13;19387:195;;;19466:13;;-1:-1:-1;;;;;19462:39:1;19450:52;;19522:12;;;;19557:15;;;;19498:1;19416:9;19387:195;;;-1:-1:-1;19598:3:1;;19146:461;-1:-1:-1;;;;;19146:461:1:o;19612:582::-;19911:6;19900:9;19893:25;19954:6;19949:2;19938:9;19934:18;19927:34;19997:3;19992:2;19981:9;19977:18;19970:31;19874:4;20018:57;20070:3;20059:9;20055:19;20047:6;20018:57;:::i;:::-;-1:-1:-1;;;;;20111:32:1;;;;20106:2;20091:18;;20084:60;-1:-1:-1;20175:3:1;20160:19;20153:35;20010:65;19612:582;-1:-1:-1;;;19612:582:1:o;20811:306::-;20899:6;20907;20915;20968:2;20956:9;20947:7;20943:23;20939:32;20936:52;;;20984:1;20981;20974:12;20936:52;21013:9;21007:16;20997:26;;21063:2;21052:9;21048:18;21042:25;21032:35;;21107:2;21096:9;21092:18;21086:25;21076:35;;20811:306;;;;;:::o

Swarm Source

ipfs://6093a9bf72317faa1c8442a8c407211fe29e859014ac0efe636893b5764f8eb3
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.