ETH Price: $3,492.92 (+4.40%)

Token

The Revolution Token (TRT)
 

Overview

Max Total Supply

100,000,000,000 TRT

Holders

345

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,088,851.69068797011485176 TRT

Value
$0.00
0x67d43485667764bb165d929eb11ef1c0f3d28719
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:
TheRevolutionToken

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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

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

	function getPair(address tokenA, address tokenB)
	external
	view
	returns (address pair);
}

interface IRouter {
	function factory() external pure returns (address);

	function WETH() external pure returns (address);

	function addLiquidityETH(
		address token,
		uint256 amountTokenDesired,
		uint256 amountTokenMin,
		uint256 amountETHMin,
		address to,
		uint256 deadline
	)
	external
	payable
	returns (
		uint256 amountToken,
		uint256 amountETH,
		uint256 liquidity
	);

	function swapExactETHForTokensSupportingFeeOnTransferTokens(
		uint256 amountOutMin,
		address[] calldata path,
		address to,
		uint256 deadline
	) external payable;

	function swapExactTokensForETHSupportingFeeOnTransferTokens(
		uint256 amountIn,
		uint256 amountOutMin,
		address[] calldata path,
		address to,
		uint256 deadline
	) external;
}

library SafeMath {

	function add(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a + b;
		require(c >= a, "SafeMath: addition overflow");

		return c;
	}

	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		return sub(a, b, "SafeMath: subtraction overflow");
	}

	function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b <= a, errorMessage);
		uint256 c = a - b;

		return c;
	}

	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
		// benefit is lost if 'b' is also tested.
		// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
		if (a == 0) {
			return 0;
		}

		uint256 c = a * b;
		require(c / a == b, "SafeMath: multiplication overflow");

		return c;
	}

	function div(uint256 a, uint256 b) internal pure returns (uint256) {
		return div(a, b, "SafeMath: division by zero");
	}

	function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b > 0, errorMessage);
		uint256 c = a / b;
		// assert(a == b * c + a % b); // There is no case in which this doesn't hold

		return c;
	}

	function mod(uint256 a, uint256 b) internal pure returns (uint256) {
		return mod(a, b, "SafeMath: modulo by zero");
	}

	function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b != 0, errorMessage);
		return a % b;
	}
}

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

contract Ownable is Context {
	address private _owner;

	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

	constructor () {
		address msgSender = _msgSender();
		_owner = msgSender;
		emit OwnershipTransferred(address(0), msgSender);
	}

	function owner() public view returns (address) {
		return _owner;
	}

	modifier onlyOwner() {
		require(_owner == _msgSender(), "Ownable: caller is not the owner");
		_;
	}

	function renounceOwnership() public virtual onlyOwner {
		emit OwnershipTransferred(_owner, address(0));
		_owner = address(0);
	}

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

contract TheRevolutionToken is IERC20, Ownable {
	using Address for address;
    using SafeMath for uint256;

	IRouter public uniswapV2Router;
	address public immutable uniswapV2Pair;

	string private constant _name =  "The Revolution Token";
	string private constant _symbol = "TRT";
	uint8 private constant _decimals = 18;

	mapping (address => uint256) private _rOwned;
	mapping (address => uint256) private _tOwned;
	mapping (address => mapping (address => uint256)) private _allowances;

	uint256 private constant MAX = ~uint256(0);
	uint256 private constant _tTotal = 100000000000 * 10**18;
	uint256 private _rTotal = (MAX - (MAX % _tTotal));
	uint256 private _tFeeTotal;

	bool public isTradingEnabled;

	// max wallet is 1.0% of initialSupply
	uint256 public maxWalletAmount = _tTotal * 100 / 10000;

    // max tx is 0.33% of initialSupply
	uint256 public maxTxAmount = _tTotal * 330 / 100000;

	bool private _swapping;

    // max wallet is 0.025% of initialSupply
	uint256 public minimumTokensBeforeSwap = _tTotal * 250 / 1000000;

    address private dead = 0x000000000000000000000000000000000000dEaD;

	address public liquidityWallet;
    address public marketingWallet;
	address public buyBackWallet;
	address public devWallet;

	struct CustomTaxPeriod {
		bytes23 periodName;
		uint8 blocksInPeriod;
		uint256 timeInPeriod;
		uint8 liquidityFeeOnBuy;
		uint8 liquidityFeeOnSell;
		uint8 marketingFeeOnBuy;
		uint8 marketingFeeOnSell;
        uint8 devFeeOnBuy;
		uint8 devFeeOnSell;
		uint8 buyBackFeeOnBuy;
		uint8 buyBackFeeOnSell;
		uint8 holdersFeeOnBuy;
		uint8 holdersFeeOnSell;
	}

	// Base taxes
	CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,1,1,3,3,2,2,2,2,2,2);

    uint256 private constant _blockedTimeLimit = 259200;
    uint256 private _launchBlockNumber;
    uint256 private _launchTimestamp;
    mapping (address => bool) private _isBlocked;
	mapping (address => bool) private _isExcludedFromFee;
	mapping (address => bool) private _isExcludedFromMaxWalletLimit;
	mapping (address => bool) private _isExcludedFromMaxTransactionLimit;
	mapping (address => bool) public automatedMarketMakerPairs;
    mapping (address => bool) private _isExcludedFromDividends;
	mapping (address => bool) private _isAllowedToTradeWhenDisabled;
    address[] private _excludedFromDividends;

	uint8 private _liquidityFee;
	uint8 private _marketingFee;
    uint8 private _devFee;
	uint8 private _buyBackFee;
	uint8 private _holdersFee;
	uint8 private _totalFee;

	event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
	event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
    event BlockedAccountChange(address indexed holder, bool indexed status);
	event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress);
	event WalletChange(string indexed indentifier, address indexed newWallet, address indexed oldWallet);
	event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 devFee, uint8 buyBackFee, uint8 holdersFee);
	event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period);
	event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
    event ExcludeFromDividendsChange(address indexed account, bool isExcluded);
	event ExcludeFromFeesChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
	event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue);
	event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity);
	event ClaimETHOverflow(uint256 amount);
	event FeesApplied(uint8 liquidityFee, uint8 marketingFee, uint8 devFee, uint8 buyBackFee, uint8 holdersFee, uint8 totalFee);

	constructor() {
		liquidityWallet = owner();
		marketingWallet = owner();
		buyBackWallet = owner();
        devWallet = owner();

		IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
		address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair(
			address(this),
			_uniswapV2Router.WETH()
		);
        uniswapV2Router = _uniswapV2Router;
		uniswapV2Pair = _uniswapV2Pair;
		_setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
		_isExcludedFromFee[address(this)] = true;

        excludeFromDividends(address(this), true);
		excludeFromDividends(address(dead), true);
		excludeFromDividends(address(_uniswapV2Router), true);

		_isAllowedToTradeWhenDisabled[owner()] = true;
		_isAllowedToTradeWhenDisabled[address(this)] = true;

		_isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
		_isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
		_isExcludedFromMaxWalletLimit[address(this)] = true;
		_isExcludedFromMaxWalletLimit[owner()] = true;

        _isExcludedFromMaxTransactionLimit[address(this)] = true;
		_isExcludedFromMaxTransactionLimit[address(dead)] = true;
		_isExcludedFromMaxTransactionLimit[owner()] = true;

		_rOwned[owner()] = _rTotal;
		emit Transfer(address(0), owner(), _tTotal);
	}

	receive() external payable {}

	// Setters
	function transfer(address recipient, uint256 amount) external override returns (bool) {
		_transfer(_msgSender(), recipient, amount);
		return true;
	}
	function approve(address spender, uint256 amount) public override returns (bool) {
		_approve(_msgSender(), spender, amount);
		return true;
	}
	function transferFrom( address sender,address recipient,uint256 amount) external override returns (bool) {
		_transfer(sender, recipient, amount);
		_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount,"ERC20: transfer amount exceeds allowance"));
		return true;
	}
	function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool){
		_approve(_msgSender(),spender,_allowances[_msgSender()][spender].add(addedValue));
		return true;
	}
	function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
		_approve(_msgSender(),spender,_allowances[_msgSender()][spender].sub(subtractedValue,"ERC20: decreased allowance below zero"));
		return true;
	}
	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 activateTrading() external onlyOwner {
		isTradingEnabled = true;
        if (_launchTimestamp == 0) {
			_launchTimestamp = block.timestamp;
			_launchBlockNumber = block.number;
		}
	}
	function deactivateTrading() external onlyOwner {
		isTradingEnabled = false;
	}
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
		require(automatedMarketMakerPairs[pair] != value, "The Revolution Token: Automated market maker pair is already set to that value");
		automatedMarketMakerPairs[pair] = value;
		emit AutomatedMarketMakerPairChange(pair, value);
	}
    function blockAccount(address account) external onlyOwner {
		require(!_isBlocked[account], "The Revolution Token: Account is already blocked");
		require((block.timestamp - _launchTimestamp) < _blockedTimeLimit, "The Revolution Token: Time to block accounts has expired");
		_isBlocked[account] = true;
		emit BlockedAccountChange(account, true);
	}
	function unblockAccount(address account) external onlyOwner {
		require(_isBlocked[account], "The Revolution Token: Account is not blcoked");
		_isBlocked[account] = false;
		emit BlockedAccountChange(account, false);
	}
	function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
		_isAllowedToTradeWhenDisabled[account] = allowed;
		emit AllowedWhenTradingDisabledChange(account, allowed);
	}
	function excludeFromFees(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromFee[account] != excluded, "The Revolution Token: Account is already the value of 'excluded'");
		_isExcludedFromFee[account] = excluded;
		emit ExcludeFromFeesChange(account, excluded);
	}
    function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxWalletLimit[account] != excluded, "The Revolution Token: Account is already the value of 'excluded'");
		_isExcludedFromMaxWalletLimit[account] = excluded;
		emit ExcludeFromMaxWalletChange(account, excluded);
	}
	function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxTransactionLimit[account] != excluded, "The Revolution Token: Account is already the value of 'excluded'");
		_isExcludedFromMaxTransactionLimit[account] = excluded;
		emit ExcludeFromMaxTransferChange(account, excluded);
	}
	function setWallets(address newLiquidityWallet, address newMarketingWallet, address newDevWallet, address newBuyBackWallet) external onlyOwner {
		if(liquidityWallet != newLiquidityWallet) {
            require(newLiquidityWallet != address(0), "The Revolution Token: The liquidityWallet cannot be 0");
			emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet);
			liquidityWallet = newLiquidityWallet;
		}
        if(marketingWallet != newMarketingWallet) {
            require(newMarketingWallet != address(0), "The Revolution Token: The marketingWallet cannot be 0");
			emit WalletChange('marketingWallet', newMarketingWallet, marketingWallet);
			marketingWallet = newMarketingWallet;
		}
		if(devWallet != newDevWallet) {
            require(newDevWallet != address(0), "The Revolution Token: The devWallet cannot be 0");
			emit WalletChange('devWallet', newDevWallet, devWallet);
			devWallet = newDevWallet;
		}
		if(buyBackWallet != newBuyBackWallet) {
            require(newBuyBackWallet != address(0), "The Revolution Token: The buyBackWallet cannot be 0");
			emit WalletChange('buyBackWallet', newBuyBackWallet, buyBackWallet);
			buyBackWallet = newBuyBackWallet;
		}
	}
    // Base fees
	function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy,  uint8 _marketingFeeOnBuy, uint8 _devFeeOnBuy,  uint8 _buyBackFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner {
		_setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy);
		emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy);
	}
	function setBaseFeesOnSell(uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _devFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner {
		_setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell);
		emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell);
	}
	function setMaxWalletAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxWalletAmount, "The Revolution Token: Cannot update maxWalletAmount to same value");
		emit MaxWalletAmountChange(newValue, maxWalletAmount);
		maxWalletAmount = newValue;
	}
	function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxTxAmount, "The Revolution Token: Cannot update maxTxAmount to same value");
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
	}
	function excludeFromDividends(address account, bool excluded) public onlyOwner {
		require(_isExcludedFromDividends[account] != excluded, "The Revolution Token: Account is already the value of 'excluded'");
		if(excluded) {
			if(_rOwned[account] > 0) {
				_tOwned[account] = tokenFromReflection(_rOwned[account]);
			}
			_isExcludedFromDividends[account] = excluded;
			_excludedFromDividends.push(account);
		} else {
			for (uint256 i = 0; i < _excludedFromDividends.length; i++) {
				if (_excludedFromDividends[i] == account) {
					_excludedFromDividends[i] = _excludedFromDividends[_excludedFromDividends.length - 1];
					_tOwned[account] = 0;
					_isExcludedFromDividends[account] = false;
					_excludedFromDividends.pop();
					break;
				}
			}
		}
		emit ExcludeFromDividendsChange(account, excluded);
	}
	function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
		require(newValue != minimumTokensBeforeSwap, "The Revolution Token: Cannot update minimumTokensBeforeSwap to same value");
		emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
		minimumTokensBeforeSwap = newValue;
	}
	function claimETHOverflow() external onlyOwner {
		require(address(this).balance > 0, "The Revolution Token: Cannot send more than contract balance");
        uint256 amount = address(this).balance;
		(bool success,) = address(owner()).call{value : amount}("");
		if (success){
			emit ClaimETHOverflow(amount);
		}
	}

	// Getters
	function name() external view returns (string memory) {
		return _name;
	}
	function symbol() external view returns (string memory) {
		return _symbol;
	}
	function decimals() external view virtual returns (uint8) {
		return _decimals;
	}
	function totalSupply() external view override returns (uint256) {
		return _tTotal;
	}
	function balanceOf(address account) public view override returns (uint256) {
		if (_isExcludedFromDividends[account]) return _tOwned[account];
		return tokenFromReflection(_rOwned[account]);
	}
	function totalFees() external view returns (uint256) {
		return _tFeeTotal;
	}
	function allowance(address owner, address spender) external view override returns (uint256) {
		return _allowances[owner][spender];
	}
    function getBaseBuyFees() external view returns (uint8, uint8, uint8, uint8, uint8){
		return (_base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.devFeeOnBuy, _base.buyBackFeeOnBuy, _base.holdersFeeOnBuy);
	}
	function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8, uint8){
		return (_base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.devFeeOnSell, _base.buyBackFeeOnSell, _base.holdersFeeOnSell);
	}
	function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
		require(rAmount <= _rTotal, "The Revolution Token: Amount must be less than total reflections");
		uint256 currentRate =  _getRate();
		return rAmount / currentRate;
	}
	function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) {
		require(tAmount <= _tTotal, "The Revolution Token: Amount must be less than supply");
		uint256 currentRate = _getRate();
		uint256 rAmount  = tAmount * currentRate;
		if (!deductTransferFee) {
			return rAmount;
		}
		else {
			uint256 rTotalFee  = tAmount * _totalFee / 100 * currentRate;
			uint256 rTransferAmount = rAmount - rTotalFee;
			return rTransferAmount;
		}
	}

	// Main
	function _transfer(
	address from,
	address to,
	uint256 amount
	) internal {
		require(from != address(0), "ERC20: transfer from the zero address");
		require(to != address(0), "ERC20: transfer to the zero address");
		require(amount > 0, "Transfer amount must be greater than zero");
		require(amount <= balanceOf(from), "The Revolution Token: Cannot transfer more than balance");

		bool isBuyFromLp = automatedMarketMakerPairs[from];
		bool isSelltoLp = automatedMarketMakerPairs[to];

		if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
			require(isTradingEnabled, "The Revolution Token: Trading is currently disabled.");
            require(!_isBlocked[to], "The Revolution Token: Account is blocked");
			require(!_isBlocked[from], "The Revolution Token: Account is blocked");
            if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) {
                require(amount <= maxTxAmount, "The Revolution Token: Transfer amount exceeds the maxTxAmount.");
            }
			if (!_isExcludedFromMaxWalletLimit[to]) {
				require((balanceOf(to) + amount) <= maxWalletAmount, "The Revolution Token: Expected wallet amount exceeds the maxWalletAmount.");
			}
		}

		_adjustTaxes(isBuyFromLp, isSelltoLp);
		bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

		if (
			isTradingEnabled &&
			canSwap &&
			!_swapping &&
			_totalFee > 0 &&
			automatedMarketMakerPairs[to]
		) {
			_swapping = true;
			_swapAndLiquify();
			_swapping = false;
		}

		bool takeFee = !_swapping && isTradingEnabled;

		if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
			takeFee = false;
		}
		_tokenTransfer(from, to, amount, takeFee);
	}
	function _tokenTransfer(address sender,address recipient, uint256 tAmount, bool takeFee) private {
		(uint256 tTransferAmount,uint256 tFee, uint256 tOther) = _getTValues(tAmount, takeFee);
		(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rOther) = _getRValues(tAmount, tFee, tOther, _getRate());

		if (_isExcludedFromDividends[sender]) {
			_tOwned[sender] = _tOwned[sender] - tAmount;
		}
		if (_isExcludedFromDividends[recipient]) {
			_tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
		}
		_rOwned[sender] = _rOwned[sender] - rAmount;
		_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
		_takeContractFees(rOther, tOther);
		_reflectFee(rFee, tFee);
		emit Transfer(sender, recipient, tTransferAmount);
	}
	function _reflectFee(uint256 rFee, uint256 tFee) private {
		_rTotal -= rFee;
		_tFeeTotal += tFee;
	}
	function _getTValues(uint256 tAmount, bool takeFee) private view returns (uint256,uint256,uint256){
		if (!takeFee) {
			return (tAmount, 0, 0);
		}
		else {
			uint256 tFee = tAmount * _holdersFee / 100;
			uint256 tOther = tAmount * (_liquidityFee + _devFee + _marketingFee + _buyBackFee) / 100;
			uint256 tTransferAmount = tAmount - (tFee + tOther);
			return (tTransferAmount, tFee, tOther);
		}
	}
	function _getRValues(
		uint256 tAmount,
		uint256 tFee,
		uint256 tOther,
		uint256 currentRate
		) private pure returns ( uint256, uint256, uint256, uint256) {
		uint256 rAmount = tAmount * currentRate;
		uint256 rFee = tFee * currentRate;
		uint256 rOther = tOther * currentRate;
		uint256 rTransferAmount = rAmount - (rFee + rOther);
		return (rAmount, rTransferAmount, rFee, rOther);
	}
	function _getRate() private view returns (uint256) {
		(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
		return rSupply.div(tSupply);
	}
	function _getCurrentSupply() private view returns (uint256, uint256) {
		uint256 rSupply = _rTotal;
		uint256 tSupply = _tTotal;
		for (uint256 i = 0; i < _excludedFromDividends.length; i++) {
			if (
				_rOwned[_excludedFromDividends[i]] > rSupply ||
				_tOwned[_excludedFromDividends[i]] > tSupply
			) return (_rTotal, _tTotal);
			rSupply = rSupply - _rOwned[_excludedFromDividends[i]];
			tSupply = tSupply - _tOwned[_excludedFromDividends[i]];
		}
		if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
		return (rSupply, tSupply);
	}
	function _takeContractFees(uint256 rOther, uint256 tOther) private {
		if (_isExcludedFromDividends[address(this)]) {
			_tOwned[address(this)] += tOther;
		}
		_rOwned[address(this)] += rOther;
	}
	function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private {
		_liquidityFee = 0;
		_devFee = 0;
		_marketingFee = 0;
		_buyBackFee = 0;
		_holdersFee = 0;

		if (isBuyFromLp) {
            if ((block.number - _launchBlockNumber) <= 5) {
				_liquidityFee = 100;
			} else {
                _liquidityFee = _base.liquidityFeeOnBuy;
                _devFee = _base.devFeeOnBuy;
                _marketingFee = _base.marketingFeeOnBuy;
                _buyBackFee = _base.buyBackFeeOnBuy;
                _holdersFee = _base.holdersFeeOnBuy;
            }
		}
		if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
			_devFee = _base.devFeeOnSell;
			_marketingFee = _base.marketingFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
			_holdersFee = _base.holdersFeeOnSell;

            if (block.timestamp - _launchTimestamp <= 259200) {
                _liquidityFee = 2;
                _devFee = 3;
                _marketingFee = 10;
                _buyBackFee = 8;
                _holdersFee = 2;
            }
		}
		_totalFee = _liquidityFee + _marketingFee + _devFee + _buyBackFee + _holdersFee;
		emit FeesApplied(_liquidityFee, _marketingFee, _devFee, _buyBackFee, _holdersFee, _totalFee);
	}
	function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnSell,
		uint8 _marketingFeeOnSell,
        uint8 _devFeeOnSell,
		uint8 _buyBackFeeOnSell,
		uint8 _holdersFeeOnSell
	) private {
		if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
			emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName);
			map.liquidityFeeOnSell = _liquidityFeeOnSell;
		}
		if (map.marketingFeeOnSell != _marketingFeeOnSell) {
			emit CustomTaxPeriodChange(_marketingFeeOnSell, map.marketingFeeOnSell, 'marketingFeeOnSell', map.periodName);
			map.marketingFeeOnSell = _marketingFeeOnSell;
		}
        if (map.devFeeOnSell != _devFeeOnSell) {
			emit CustomTaxPeriodChange(_devFeeOnSell, map.devFeeOnSell, 'devFeeOnSell', map.periodName);
			map.devFeeOnSell = _devFeeOnSell;
		}
		if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
			emit CustomTaxPeriodChange(_buyBackFeeOnSell, map.buyBackFeeOnSell, 'buyBackFeeOnSell', map.periodName);
			map.buyBackFeeOnSell = _buyBackFeeOnSell;
		}
		if (map.holdersFeeOnSell != _holdersFeeOnSell) {
			emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, 'holdersFeeOnSell', map.periodName);
			map.holdersFeeOnSell = _holdersFeeOnSell;
		}
	}
	function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnBuy,
		uint8 _marketingFeeOnBuy,
        uint8 _devFeeOnBuy,
		uint8 _buyBackFeeOnBuy,
		uint8 _holdersFeeOnBuy
	) private {
		if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
			emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName);
			map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
		}
		if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
			emit CustomTaxPeriodChange(_marketingFeeOnBuy, map.marketingFeeOnBuy, 'marketingFeeOnBuy', map.periodName);
			map.marketingFeeOnBuy = _marketingFeeOnBuy;
		}
        if (map.devFeeOnBuy != _devFeeOnBuy) {
			emit CustomTaxPeriodChange(_devFeeOnBuy, map.devFeeOnBuy, 'devFeeOnBuy', map.periodName);
			map.devFeeOnBuy = _devFeeOnBuy;
		}
		if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
			emit CustomTaxPeriodChange(_buyBackFeeOnBuy, map.buyBackFeeOnBuy, 'buyBackFeeOnBuy', map.periodName);
			map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
		}
		if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
			emit CustomTaxPeriodChange(_holdersFeeOnBuy, map.holdersFeeOnBuy, 'holdersFeeOnBuy', map.periodName);
			map.holdersFeeOnBuy = _holdersFeeOnBuy;
		}
	}
	function _swapAndLiquify() private {
		uint256 contractBalance = balanceOf(address(this));
		uint256 initialETHBalance = address(this).balance;

		uint8 totalFeePrior = _totalFee;
        uint8 liquidityFeePrior = _liquidityFee;
        uint8 marketingFeePrior = _marketingFee;
        uint8 devFeePrior = _devFee;
        uint8 buyBackFeePrior  = _buyBackFee;
		uint8 holdersFeePrior = _holdersFee;

		uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2;
		uint256 amountToSwapForETH = contractBalance - amountToLiquify;

		_swapTokensForETH(amountToSwapForETH);

		uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
		uint256 totalETHFee = totalFeePrior - (liquidityFeePrior / 2) - (holdersFeePrior);
		uint256 amountETHLiquidity = ETHBalanceAfterSwap * liquidityFeePrior / totalETHFee / 2;
		uint256 amountETHDev = ETHBalanceAfterSwap * devFeePrior / totalETHFee;
		uint256 amountETHBuyBack = ETHBalanceAfterSwap * buyBackFeePrior / totalETHFee;
		uint256 amountETHMarketing = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHDev + amountETHBuyBack);

		payable(marketingWallet).transfer(amountETHMarketing);
		payable(devWallet).transfer(amountETHDev);
		payable(buyBackWallet).transfer(amountETHBuyBack);

		if (amountToLiquify > 0) {
			_addLiquidity(amountToLiquify, amountETHLiquidity);
			emit SwapAndLiquify(amountToSwapForETH, amountETHLiquidity, amountToLiquify);
		}
		_totalFee = totalFeePrior;
        _liquidityFee = liquidityFeePrior;
        _marketingFee = marketingFeePrior;
        _devFee = devFeePrior;
        _buyBackFee = buyBackFeePrior;
		_holdersFee = holdersFeePrior;
	}
	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, // accept any amount of ETH
		path,
		address(this),
		block.timestamp
		);
	}
	function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.addLiquidityETH{value: ethAmount}(
		address(this),
		tokenAmount,
		0, // slippage is unavoidable
		0, // slippage is unavoidable
		liquidityWallet,
		block.timestamp
		);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"devFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"devFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newDevWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526200001f6c01431e0fae6d7217caa000000060001962000d94565b6200002d9060001962000dc1565b6005556127106200004d6c01431e0fae6d7217caa0000000606462000ddb565b62000059919062000dfd565b600855620186a06200007b6c01431e0fae6d7217caa000000061014a62000ddb565b62000087919062000dfd565b600955620f4240620000a86c01431e0fae6d7217caa000000060fa62000ddb565b620000b4919062000dfd565b600b55600c80546001600160a01b03191661dead179055604080516101a081018252636261736560e01b81526000602082018190529181018290526001606082018190526080820152600360a0820181905260c0820152600260e08201819052610100820181905261012082018190526101408201819052610160820181905261018090910152601180546001600160c01b031916636261736560981b1790556012556013805469020202020202030301016001600160501b03199091161790553480156200018257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008054600d80546001600160a01b039092166001600160a01b03199283168117909155600e8054831682179055600f8054831682179055601080549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa1580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000281919062000e14565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000e14565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000343573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000369919062000e14565b600180546001600160a01b0319166001600160a01b0385811691909117825582166080529091506200039d90829062000615565b600160176000620003b66000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308082526017909352208054909216600190811790925562000404916200071c565b600c546200041d906001600160a01b031660016200071c565b6200042a8260016200071c565b6001601c6000620004436000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601c855283822080548716600190811790915587841683526018958690528483208054881682179055805490931682528382208054871684179055815291822080549094168117909355620004d26000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601993849052828120805486166001908117909155600c54909216815291822080549094168117909355620005406000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560055490600290620005856000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620005b26000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6c01431e0fae6d7217caa00000006040516200060591815260200190565b60405180910390a3505062000edf565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503620006c85760405162461bcd60e51b815260206004820152604e60248201527f546865205265766f6c7574696f6e20546f6b656e3a204175746f6d617465642060448201527f6d61726b6574206d616b6572207061697220697320616c72656164792073657460648201526d20746f20746861742076616c756560901b608482015260a4015b60405180910390fd5b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6000546001600160a01b03163314620007785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006bf565b6001600160a01b0382166000908152601b602052604090205481151560ff90911615150362000812576040805162461bcd60e51b81526020600482015260248101919091527f546865205265766f6c7574696f6e20546f6b656e3a204163636f756e7420697360448201527f20616c7265616479207468652076616c7565206f6620276578636c75646564276064820152608401620006bf565b8015620008df576001600160a01b0382166000908152600260205260409020541562000876576001600160a01b0382166000908152600260205260409020546200085c9062000a60565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b031916909117905562000a16565b60005b601d5481101562000a1457826001600160a01b0316601d82815481106200090d576200090d62000e3f565b6000918252602090912001546001600160a01b031603620009ff57601d80546200093a9060019062000dc1565b815481106200094d576200094d62000e3f565b600091825260209091200154601d80546001600160a01b0390921691839081106200097c576200097c62000e3f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d805480620009d757620009d762000e55565b600082815260209020810160001990810180546001600160a01b031916905501905562000a14565b8062000a0b8162000e6b565b915050620008e2565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa98260405162000a54911515815260200190565b60405180910390a25050565b600060055482111562000ade576040805162461bcd60e51b81526020600482015260248101919091527f546865205265766f6c7574696f6e20546f6b656e3a20416d6f756e74206d757360448201527f74206265206c657373207468616e20746f74616c207265666c656374696f6e736064820152608401620006bf565b600062000aea62000aff565b905062000af8818462000dfd565b9392505050565b6000808062000b0d62000b32565b9150915062000b2b818362000cf860201b62001e831790919060201c565b9250505090565b60055460009081906c01431e0fae6d7217caa0000000825b601d5481101562000caf578260026000601d848154811062000b705762000b7062000e3f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000bdf57508160036000601d848154811062000bb85762000bb862000e3f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000c00575050600554936c01431e0fae6d7217caa00000009350915050565b60026000601d838154811062000c1a5762000c1a62000e3f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c4b908462000dc1565b925060036000601d838154811062000c675762000c6762000e3f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c98908362000dc1565b91508062000ca68162000e6b565b91505062000b4a565b506c01431e0fae6d7217caa000000060055462000ccd919062000dfd565b82101562000cef575050600554926c01431e0fae6d7217caa000000092509050565b90939092509050565b600062000af883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000d4260201b60201c565b6000818362000d665760405162461bcd60e51b8152600401620006bf919062000e87565b50600062000d75848662000dfd565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b60008262000da65762000da662000d7e565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000dd65762000dd662000dab565b500390565b600081600019048311821515161562000df85762000df862000dab565b500290565b60008262000e0f5762000e0f62000d7e565b500490565b60006020828403121562000e2757600080fd5b81516001600160a01b038116811462000af857600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820162000e805762000e8062000dab565b5060010190565b600060208083528351808285015260005b8181101562000eb65785810183015185820160400152820162000e98565b8181111562000ec9576000604083870101525b50601f01601f1916929092016040019392505050565b608051613ed762000efb60003960006104f30152613ed76000f3fe6080604052600436106102815760003560e01c8063781edb3c1161014f578063aa4bde28116100c1578063d2d7ad831161007a578063d2d7ad8314610816578063d32215761461082c578063d46980161461084c578063dd62ed3e1461086c578063f2fde38b146108b2578063fe017535146108d257600080fd5b8063aa4bde28146106ff578063aee50b1e14610715578063b1ba39ea14610735578063b62496f514610755578063c024666814610785578063cd43e228146107a557600080fd5b80638da5cb5b116101135780638da5cb5b146106355780638ea5220f1461065357806395d89b41146106735780639fad96831461069f578063a457c2d7146106bf578063a9059cbb146106df57600080fd5b8063781edb3c1461059f5780637c0a893d146105bf57806383672f3e146105df578063880bcbc1146105ff5780638c0b5e221461061f57600080fd5b806327a14fc2116101f357806349bd5a5e116101ac57806349bd5a5e146104e15780634d78fdc61461051557806366164f6f1461053557806370a082311461054a578063715018a61461056a57806375f0a8741461057f57600080fd5b806327a14fc2146104305780632d83811914610450578063313ce5671461047057806334cf1fea1461048c57806339509351146104a15780634549b039146104c157600080fd5b806313114a9d1161024557806313114a9d146103595780631694505e1461037857806318160ddd146103b05780631cd348c0146103d05780631e293c10146103f057806323b872dd1461041057600080fd5b80630483f7a01461028d578063064a59d0146102af57806306fdde03146102de578063095ea7b3146103245780630bd05b691461034457600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046138d2565b610918565b005b3480156102bb57600080fd5b506007546102c99060ff1681565b60405190151581526020015b60405180910390f35b3480156102ea57600080fd5b506040805180820190915260148152732a3432902932bb37b63aba34b7b7102a37b5b2b760611b60208201525b6040516102d59190613907565b34801561033057600080fd5b506102c961033f36600461395c565b610bbf565b34801561035057600080fd5b506102ad610bd6565b34801561036557600080fd5b506006545b6040519081526020016102d5565b34801561038457600080fd5b50600154610398906001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b3480156103bc57600080fd5b506c01431e0fae6d7217caa000000061036a565b3480156103dc57600080fd5b50600f54610398906001600160a01b031681565b3480156103fc57600080fd5b506102ad61040b366004613988565b610c22565b34801561041c57600080fd5b506102c961042b3660046139a1565b610cf6565b34801561043c57600080fd5b506102ad61044b366004613988565b610d5f565b34801561045c57600080fd5b5061036a61046b366004613988565b610e3d565b34801561047c57600080fd5b50604051601281526020016102d5565b34801561049857600080fd5b506102ad610ed6565b3480156104ad57600080fd5b506102c96104bc36600461395c565b610f0c565b3480156104cd57600080fd5b5061036a6104dc3660046139e2565b610f42565b3480156104ed57600080fd5b506103987f000000000000000000000000000000000000000000000000000000000000000081565b34801561052157600080fd5b506102ad610530366004613a05565b611034565b34801561054157600080fd5b506102ad611116565b34801561055657600080fd5b5061036a610565366004613a05565b61125d565b34801561057657600080fd5b506102ad6112bc565b34801561058b57600080fd5b50600e54610398906001600160a01b031681565b3480156105ab57600080fd5b506102ad6105ba3660046138d2565b611330565b3480156105cb57600080fd5b506102ad6105da366004613a05565b6113f2565b3480156105eb57600080fd5b506102ad6105fa366004613a22565b611563565b34801561060b57600080fd5b506102ad61061a3660046138d2565b611943565b34801561062b57600080fd5b5061036a60095481565b34801561064157600080fd5b506000546001600160a01b0316610398565b34801561065f57600080fd5b50601054610398906001600160a01b031681565b34801561067f57600080fd5b5060408051808201909152600381526215149560ea1b6020820152610317565b3480156106ab57600080fd5b506102ad6106ba366004613a8f565b611a05565b3480156106cb57600080fd5b506102c96106da36600461395c565b611abc565b3480156106eb57600080fd5b506102c96106fa36600461395c565b611b0b565b34801561070b57600080fd5b5061036a60085481565b34801561072157600080fd5b506102ad610730366004613988565b611b18565b34801561074157600080fd5b506102ad610750366004613a8f565b611bfe565b34801561076157600080fd5b506102c9610770366004613a05565b601a6020526000908152604090205460ff1681565b34801561079157600080fd5b506102ad6107a03660046138d2565b611c55565b3480156107b157600080fd5b5060135460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102d5565b34801561082257600080fd5b5061036a600b5481565b34801561083857600080fd5b506102ad6108473660046138d2565b611d17565b34801561085857600080fd5b50600d54610398906001600160a01b031681565b34801561087857600080fd5b5061036a610887366004613af4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108be57600080fd5b506102ad6108cd366004613a05565b611d99565b3480156108de57600080fd5b5060135460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107e2565b6000546001600160a01b0316331461094b5760405162461bcd60e51b815260040161094290613b2d565b60405180910390fd5b6001600160a01b0382166000908152601b602052604090205481151560ff90911615150361098b5760405162461bcd60e51b815260040161094290613b62565b8015610a53576001600160a01b038216600090815260026020526040902054156109eb576001600160a01b0382166000908152600260205260409020546109d190610e3d565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055610b76565b60005b601d54811015610b7457826001600160a01b0316601d8281548110610a7d57610a7d613bae565b6000918252602090912001546001600160a01b031603610b6257601d8054610aa790600190613bda565b81548110610ab757610ab7613bae565b600091825260209091200154601d80546001600160a01b039092169183908110610ae357610ae3613bae565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d805480610b3b57610b3b613bf1565b600082815260209020810160001990810180546001600160a01b0319169055019055610b74565b80610b6c81613c07565b915050610a56565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610bb3911515815260200190565b60405180910390a25050565b6000610bcc338484611ec5565b5060015b92915050565b6000546001600160a01b03163314610c005760405162461bcd60e51b815260040161094290613b2d565b6007805460ff19166001179055601554600003610c205742601555436014555b565b6000546001600160a01b03163314610c4c5760405162461bcd60e51b815260040161094290613b2d565b6009548103610cc35760405162461bcd60e51b815260206004820152603d60248201527f546865205265766f6c7574696f6e20546f6b656e3a2043616e6e6f742075706460448201527f617465206d61785478416d6f756e7420746f2073616d652076616c75650000006064820152608401610942565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610d03848484611fe9565b610d558433610d5085604051806060016040528060288152602001613e35602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190612566565b611ec5565b5060019392505050565b6000546001600160a01b03163314610d895760405162461bcd60e51b815260040161094290613b2d565b6008548103610e0a5760405162461bcd60e51b815260206004820152604160248201527f546865205265766f6c7574696f6e20546f6b656e3a2043616e6e6f742075706460448201527f617465206d617857616c6c6574416d6f756e7420746f2073616d652076616c756064820152606560f81b608482015260a401610942565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000600554821115610eb9576040805162461bcd60e51b81526020600482015260248101919091527f546865205265766f6c7574696f6e20546f6b656e3a20416d6f756e74206d757360448201527f74206265206c657373207468616e20746f74616c207265666c656374696f6e736064820152608401610942565b6000610ec36125a0565b9050610ecf8184613c36565b9392505050565b6000546001600160a01b03163314610f005760405162461bcd60e51b815260040161094290613b2d565b6007805460ff19169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610bcc918590610d5090866125c3565b60006c01431e0fae6d7217caa0000000831115610fbf5760405162461bcd60e51b815260206004820152603560248201527f546865205265766f6c7574696f6e20546f6b656e3a20416d6f756e74206d757360448201527474206265206c657373207468616e20737570706c7960581b6064820152608401610942565b6000610fc96125a0565b90506000610fd78286613c4a565b905083610fe7579150610bd09050565b601e54600090839060649061100690600160281b900460ff1689613c4a565b6110109190613c36565b61101a9190613c4a565b905060006110288284613bda565b9450610bd09350505050565b6000546001600160a01b0316331461105e5760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b03811660009081526016602052604090205460ff166110c95760405162461bcd60e51b815260206004820152602c6024820152600080516020613df583398151915260448201526b081b9bdd08189b18dbdad95960a21b6064820152608401610942565b6001600160a01b038116600081815260166020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146111405760405162461bcd60e51b815260040161094290613b2d565b600047116111b65760405162461bcd60e51b815260206004820152603c60248201527f546865205265766f6c7574696f6e20546f6b656e3a2043616e6e6f742073656e60448201527f64206d6f7265207468616e20636f6e74726163742062616c616e6365000000006064820152608401610942565b4760006111cb6000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611215576040519150601f19603f3d011682016040523d82523d6000602084013e61121a565b606091505b505090508015611259576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6001600160a01b0381166000908152601b602052604081205460ff161561129a57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610bd090610e3d565b6000546001600160a01b031633146112e65760405162461bcd60e51b815260040161094290613b2d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461135a5760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b03821660009081526018602052604090205481151560ff90911615150361139a5760405162461bcd60e51b815260040161094290613b62565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610bb3565b6000546001600160a01b0316331461141c5760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b03811660009081526016602052604090205460ff161561148c5760405162461bcd60e51b81526020600482015260306024820152600080516020613df583398151915260448201526f08185b1c9958591e48189b1bd8dad95960821b6064820152608401610942565b6203f4806015544261149e9190613bda565b106115115760405162461bcd60e51b815260206004820152603860248201527f546865205265766f6c7574696f6e20546f6b656e3a2054696d6520746f20626c60448201527f6f636b206163636f756e747320686173206578706972656400000000000000006064820152608401610942565b6001600160a01b038116600081815260166020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b0316331461158d5760405162461bcd60e51b815260040161094290613b2d565b600d546001600160a01b0385811691161461167d576001600160a01b0384166116165760405162461bcd60e51b815260206004820152603560248201527f546865205265766f6c7574696f6e20546f6b656e3a20546865206c6971756964604482015274069747957616c6c65742063616e6e6f74206265203605c1b6064820152608401610942565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f0160405190819003812090600080516020613e1583398151915290600090a4600d80546001600160a01b0319166001600160a01b0386161790555b600e546001600160a01b0384811691161461176d576001600160a01b0383166117065760405162461bcd60e51b815260206004820152603560248201527f546865205265766f6c7574696f6e20546f6b656e3a20546865206d61726b65746044820152740696e6757616c6c65742063616e6e6f74206265203605c1b6064820152608401610942565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f0160405190819003812090600080516020613e1583398151915290600090a4600e80546001600160a01b0319166001600160a01b0385161790555b6010546001600160a01b03838116911614611851576001600160a01b0382166117f05760405162461bcd60e51b815260206004820152602f60248201527f546865205265766f6c7574696f6e20546f6b656e3a205468652064657657616c60448201526e06c65742063616e6e6f74206265203608c1b6064820152608401610942565b6010546040516819195d95d85b1b195d60ba1b81526001600160a01b039182169184169060090160405190819003812090600080516020613e1583398151915290600090a4601080546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b0382811691161461193d576001600160a01b0381166118d85760405162461bcd60e51b815260206004820152603360248201527f546865205265766f6c7574696f6e20546f6b656e3a205468652062757942616360448201527206b57616c6c65742063616e6e6f74206265203606c1b6064820152608401610942565b600f546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d0160405190819003812090600080516020613e1583398151915290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b0316331461196d5760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036119ad5760405162461bcd60e51b815260040161094290613b62565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610bb3565b6000546001600160a01b03163314611a2f5760405162461bcd60e51b815260040161094290613b2d565b611a3e60118686868686612622565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610bcc3384610d5085604051806060016040528060258152602001613e7d602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190612566565b6000610bcc338484611fe9565b6000546001600160a01b03163314611b425760405162461bcd60e51b815260040161094290613b2d565b600b548103611bcb5760405162461bcd60e51b815260206004820152604960248201527f546865205265766f6c7574696f6e20546f6b656e3a2043616e6e6f742075706460448201527f617465206d696e696d756d546f6b656e734265666f72655377617020746f2073606482015268616d652076616c756560b81b608482015260a401610942565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611c285760405162461bcd60e51b815260040161094290613b2d565b611c3760118686868686612906565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611a57565b6000546001600160a01b03163314611c7f5760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611cbf5760405162461bcd60e51b815260040161094290613b62565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610bb3565b6000546001600160a01b03163314611d415760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610bb3565b6000546001600160a01b03163314611dc35760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b038116611e285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610942565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ecf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c06565b6001600160a01b038316611f275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610942565b6001600160a01b038216611f885760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610942565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661204d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610942565b6001600160a01b0382166120af5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610942565b600081116121115760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610942565b61211a8361125d565b81111561218f5760405162461bcd60e51b815260206004820152603760248201527f546865205265766f6c7574696f6e20546f6b656e3a2043616e6e6f742074726160448201527f6e73666572206d6f7265207468616e2062616c616e63650000000000000000006064820152608401610942565b6001600160a01b038084166000818152601a6020908152604080832054948716835280832054938352601c90915290205460ff9283169291821691161580156121f157506001600160a01b0384166000908152601c602052604090205460ff16155b156124535760075460ff166122655760405162461bcd60e51b815260206004820152603460248201527f546865205265766f6c7574696f6e20546f6b656e3a2054726164696e672069736044820152731031bab93932b73a363c903234b9b0b13632b21760611b6064820152608401610942565b6001600160a01b03841660009081526016602052604090205460ff161561229e5760405162461bcd60e51b815260040161094290613c69565b6001600160a01b03851660009081526016602052604090205460ff16156122d75760405162461bcd60e51b815260040161094290613c69565b6001600160a01b03841660009081526019602052604090205460ff1615801561231957506001600160a01b03851660009081526019602052604090205460ff16155b15612396576009548311156123965760405162461bcd60e51b815260206004820152603e60248201527f546865205265766f6c7574696f6e20546f6b656e3a205472616e73666572206160448201527f6d6f756e74206578636565647320746865206d61785478416d6f756e742e00006064820152608401610942565b6001600160a01b03841660009081526018602052604090205460ff1661245357600854836123c38661125d565b6123cd9190613c9f565b11156124535760405162461bcd60e51b815260206004820152604960248201527f546865205265766f6c7574696f6e20546f6b656e3a204578706563746564207760448201527f616c6c657420616d6f756e74206578636565647320746865206d617857616c6c60648201526832ba20b6b7bab73a1760b91b608482015260a401610942565b61245d8282612c34565b6000600b5461246b3061125d565b600754911115915060ff16801561247f5750805b801561248e5750600a5460ff16155b80156124a55750601e54600160281b900460ff1615155b80156124c957506001600160a01b0385166000908152601a602052604090205460ff165b156124ee57600a805460ff191660011790556124e3612e7d565b600a805460ff191690555b600a5460009060ff16158015612506575060075460ff165b6001600160a01b03881660009081526017602052604090205490915060ff168061254857506001600160a01b03861660009081526017602052604090205460ff165b15612551575060005b61255d8787878461316f565b50505050505050565b6000818484111561258a5760405162461bcd60e51b81526004016109429190613907565b5060006125978486613bda565b95945050505050565b60008060006125ad613340565b90925090506125bc8282611e83565b9250505090565b6000806125d08385613c9f565b905083811015610ecf5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610942565b600286015460ff8681169116146126a357604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613e5d833981519152916126899160481b90613cb7565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461273757604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613e5d833981519152916127169160481b90613cb7565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b90920416146127ca576040516a6465764665654f6e42757960a81b8152600b0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613e5d833981519152916127a69160481b90613cb7565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612863576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613e5d8339815191529161283d9160481b90613cb7565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b90920416146128fe576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613e5d833981519152916128d69160481b90613cb7565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461299757604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613e5d833981519152916129789160481b90613cb7565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612a3057604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613e5d83398151915291612a0d9160481b90613cb7565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612ac5576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613e5d83398151915291612aa09160481b90613cb7565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612b60576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613e5d83398151915291612b399160481b90613cb7565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b90920416146128fe576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613e5d83398151915291612bd49160481b90613cb7565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b60008183612c275760405162461bcd60e51b81526004016109429190613907565b5060006125978486613c36565b601e805464ffffffffff191690558115612ce657600560145443612c589190613bda565b11612c6f57601e805460ff19166064179055612ce6565b601354601e805460ff80841662ff00ff1990921691909117600160201b8085048316620100009081029290921763ff00ff00191661010092860484169290920263ff000000191691909117600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612d8e57601354601e805461010080840460ff90811662ff00ff1990931692909217600160281b8504831662010000021763ff00ff001916630100000080860484169290920263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790556015546203f48090612d739042613bda565b11612d8e57601e805464ffffffffff1916640208030a021790555b601e5460ff600160201b820481169163010000008104821691620100008204811691612dc291610100820481169116613cce565b612dcc9190613cce565b612dd69190613cce565b612de09190613cce565b601e805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001611250565b6000612e883061125d565b601e54909150479060ff600160281b820481169181811691610100820481169162010000810482169163010000008204811691600160201b9004166000600287612ed2888c613c4a565b612edc9190613c36565b612ee69190613c36565b90506000612ef4828b613bda565b9050612eff816134ed565b6000612f0b8a47613bda565b9050600084612f1b60028b613cf3565b612f25908c613d15565b612f2f9190613d15565b60ff16905060006002828b60ff1685612f489190613c4a565b612f529190613c36565b612f5c9190613c36565b9050600082612f6e60ff8b1686613c4a565b612f789190613c36565b9050600083612f8a60ff8b1687613c4a565b612f949190613c36565b9050600081612fa38486613c9f565b612fad9190613c9f565b612fb79087613bda565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ff2573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561302d573d6000803e3d6000fd5b50600f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613068573d6000803e3d6000fd5b5087156130bb57613079888561363f565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8d601e60056101000a81548160ff021916908360ff1602179055508c601e60006101000a81548160ff021916908360ff1602179055508b601e60016101000a81548160ff021916908360ff1602179055508a601e60026101000a81548160ff021916908360ff16021790555089601e60036101000a81548160ff021916908360ff16021790555088601e60046101000a81548160ff021916908360ff16021790555050505050505050505050505050505050565b600080600061317e85856136f3565b92509250925060008060008061319d8987876131986125a0565b6137bd565b6001600160a01b038f166000908152601b60205260409020549397509195509350915060ff1615613206576001600160a01b038b166000908152600360205260409020546131ec908a90613bda565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a166000908152601b602052604090205460ff1615613265576001600160a01b038a1660009081526003602052604090205461324b908890613c9f565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054613289908590613bda565b6001600160a01b03808d1660009081526002602052604080822093909355908c16815220546132b9908490613c9f565b6001600160a01b038b166000908152600260205260409020556132dc8186613815565b6132e6828761387a565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161332b91815260200190565b60405180910390a35050505050505050505050565b60055460009081906c01431e0fae6d7217caa0000000825b601d548110156134a7578260026000601d848154811061337a5761337a613bae565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806133e557508160036000601d84815481106133be576133be613bae565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613405575050600554936c01431e0fae6d7217caa00000009350915050565b60026000601d838154811061341c5761341c613bae565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461344b9084613bda565b925060036000601d838154811061346457613464613bae565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134939083613bda565b91508061349f81613c07565b915050613358565b506c01431e0fae6d7217caa00000006005546134c39190613c36565b8210156134e4575050600554926c01431e0fae6d7217caa000000092509050565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061352257613522613bae565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561357b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359f9190613d38565b816001815181106135b2576135b2613bae565b6001600160a01b0392831660209182029290920101526001546135d89130911684611ec5565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790613611908590600090869030904290600401613d55565b600060405180830381600087803b15801561362b57600080fd5b505af11580156128fe573d6000803e3d6000fd5b6001546136579030906001600160a01b031684611ec5565b600154600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156136c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136ec9190613dc6565b5050505050565b60008060008361370b575083915060009050806137b6565b601e5460009060649061372890600160201b900460ff1688613c4a565b6137329190613c36565b601e5490915060009060649060ff6301000000820481169161010081048216916137659162010000810482169116613cce565b61376f9190613cce565b6137799190613cce565b6137869060ff1689613c4a565b6137909190613c36565b9050600061379e8284613c9f565b6137a89089613bda565b955091935091506137b69050565b9250925092565b6000808080806137cd868a613c4a565b905060006137db878a613c4a565b905060006137e9888a613c4a565b905060006137f78284613c9f565b6138019085613bda565b939c939b5091995097509095505050505050565b306000908152601b602052604090205460ff161561385257306000908152600360205260408120805483929061384c908490613c9f565b90915550505b3060009081526002602052604081208054849290613871908490613c9f565b90915550505050565b816005600082825461388c9190613bda565b9250508190555080600660008282546138719190613c9f565b6001600160a01b03811681146138ba57600080fd5b50565b803580151581146138cd57600080fd5b919050565b600080604083850312156138e557600080fd5b82356138f0816138a5565b91506138fe602084016138bd565b90509250929050565b600060208083528351808285015260005b8181101561393457858101830151858201604001528201613918565b81811115613946576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561396f57600080fd5b823561397a816138a5565b946020939093013593505050565b60006020828403121561399a57600080fd5b5035919050565b6000806000606084860312156139b657600080fd5b83356139c1816138a5565b925060208401356139d1816138a5565b929592945050506040919091013590565b600080604083850312156139f557600080fd5b823591506138fe602084016138bd565b600060208284031215613a1757600080fd5b8135610ecf816138a5565b60008060008060808587031215613a3857600080fd5b8435613a43816138a5565b93506020850135613a53816138a5565b92506040850135613a63816138a5565b91506060850135613a73816138a5565b939692955090935050565b803560ff811681146138cd57600080fd5b600080600080600060a08688031215613aa757600080fd5b613ab086613a7e565b9450613abe60208701613a7e565b9350613acc60408701613a7e565b9250613ada60608701613a7e565b9150613ae860808701613a7e565b90509295509295909350565b60008060408385031215613b0757600080fd5b8235613b12816138a5565b91506020830135613b22816138a5565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526040908201819052600080516020613df5833981519152908201527f20616c7265616479207468652076616c7565206f6620276578636c7564656427606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613bec57613bec613bc4565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201613c1957613c19613bc4565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613c4557613c45613c20565b500490565b6000816000190483118215151615613c6457613c64613bc4565b500290565b6020808252602890820152600080516020613df583398151915260408201526708189b1bd8dad95960c21b606082015260800190565b60008219821115613cb257613cb2613bc4565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115613ceb57613ceb613bc4565b019392505050565b600060ff831680613d0657613d06613c20565b8060ff84160491505092915050565b600060ff821660ff841680821015613d2f57613d2f613bc4565b90039392505050565b600060208284031215613d4a57600080fd5b8151610ecf816138a5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613da55784516001600160a01b031683529383019391830191600101613d80565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ddb57600080fd5b835192506020840151915060408401519050925092509256fe546865205265766f6c7574696f6e20546f6b656e3a204163636f756e742069734af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b76fbb5b6168ccc74341ed0d9240631c3d1e84974a29ccfb31c5f04ba6c2bad64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063781edb3c1161014f578063aa4bde28116100c1578063d2d7ad831161007a578063d2d7ad8314610816578063d32215761461082c578063d46980161461084c578063dd62ed3e1461086c578063f2fde38b146108b2578063fe017535146108d257600080fd5b8063aa4bde28146106ff578063aee50b1e14610715578063b1ba39ea14610735578063b62496f514610755578063c024666814610785578063cd43e228146107a557600080fd5b80638da5cb5b116101135780638da5cb5b146106355780638ea5220f1461065357806395d89b41146106735780639fad96831461069f578063a457c2d7146106bf578063a9059cbb146106df57600080fd5b8063781edb3c1461059f5780637c0a893d146105bf57806383672f3e146105df578063880bcbc1146105ff5780638c0b5e221461061f57600080fd5b806327a14fc2116101f357806349bd5a5e116101ac57806349bd5a5e146104e15780634d78fdc61461051557806366164f6f1461053557806370a082311461054a578063715018a61461056a57806375f0a8741461057f57600080fd5b806327a14fc2146104305780632d83811914610450578063313ce5671461047057806334cf1fea1461048c57806339509351146104a15780634549b039146104c157600080fd5b806313114a9d1161024557806313114a9d146103595780631694505e1461037857806318160ddd146103b05780631cd348c0146103d05780631e293c10146103f057806323b872dd1461041057600080fd5b80630483f7a01461028d578063064a59d0146102af57806306fdde03146102de578063095ea7b3146103245780630bd05b691461034457600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046138d2565b610918565b005b3480156102bb57600080fd5b506007546102c99060ff1681565b60405190151581526020015b60405180910390f35b3480156102ea57600080fd5b506040805180820190915260148152732a3432902932bb37b63aba34b7b7102a37b5b2b760611b60208201525b6040516102d59190613907565b34801561033057600080fd5b506102c961033f36600461395c565b610bbf565b34801561035057600080fd5b506102ad610bd6565b34801561036557600080fd5b506006545b6040519081526020016102d5565b34801561038457600080fd5b50600154610398906001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b3480156103bc57600080fd5b506c01431e0fae6d7217caa000000061036a565b3480156103dc57600080fd5b50600f54610398906001600160a01b031681565b3480156103fc57600080fd5b506102ad61040b366004613988565b610c22565b34801561041c57600080fd5b506102c961042b3660046139a1565b610cf6565b34801561043c57600080fd5b506102ad61044b366004613988565b610d5f565b34801561045c57600080fd5b5061036a61046b366004613988565b610e3d565b34801561047c57600080fd5b50604051601281526020016102d5565b34801561049857600080fd5b506102ad610ed6565b3480156104ad57600080fd5b506102c96104bc36600461395c565b610f0c565b3480156104cd57600080fd5b5061036a6104dc3660046139e2565b610f42565b3480156104ed57600080fd5b506103987f000000000000000000000000d9581bec4c84e82fc7658141cb94db6cc1df6eb081565b34801561052157600080fd5b506102ad610530366004613a05565b611034565b34801561054157600080fd5b506102ad611116565b34801561055657600080fd5b5061036a610565366004613a05565b61125d565b34801561057657600080fd5b506102ad6112bc565b34801561058b57600080fd5b50600e54610398906001600160a01b031681565b3480156105ab57600080fd5b506102ad6105ba3660046138d2565b611330565b3480156105cb57600080fd5b506102ad6105da366004613a05565b6113f2565b3480156105eb57600080fd5b506102ad6105fa366004613a22565b611563565b34801561060b57600080fd5b506102ad61061a3660046138d2565b611943565b34801561062b57600080fd5b5061036a60095481565b34801561064157600080fd5b506000546001600160a01b0316610398565b34801561065f57600080fd5b50601054610398906001600160a01b031681565b34801561067f57600080fd5b5060408051808201909152600381526215149560ea1b6020820152610317565b3480156106ab57600080fd5b506102ad6106ba366004613a8f565b611a05565b3480156106cb57600080fd5b506102c96106da36600461395c565b611abc565b3480156106eb57600080fd5b506102c96106fa36600461395c565b611b0b565b34801561070b57600080fd5b5061036a60085481565b34801561072157600080fd5b506102ad610730366004613988565b611b18565b34801561074157600080fd5b506102ad610750366004613a8f565b611bfe565b34801561076157600080fd5b506102c9610770366004613a05565b601a6020526000908152604090205460ff1681565b34801561079157600080fd5b506102ad6107a03660046138d2565b611c55565b3480156107b157600080fd5b5060135460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102d5565b34801561082257600080fd5b5061036a600b5481565b34801561083857600080fd5b506102ad6108473660046138d2565b611d17565b34801561085857600080fd5b50600d54610398906001600160a01b031681565b34801561087857600080fd5b5061036a610887366004613af4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108be57600080fd5b506102ad6108cd366004613a05565b611d99565b3480156108de57600080fd5b5060135460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107e2565b6000546001600160a01b0316331461094b5760405162461bcd60e51b815260040161094290613b2d565b60405180910390fd5b6001600160a01b0382166000908152601b602052604090205481151560ff90911615150361098b5760405162461bcd60e51b815260040161094290613b62565b8015610a53576001600160a01b038216600090815260026020526040902054156109eb576001600160a01b0382166000908152600260205260409020546109d190610e3d565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055610b76565b60005b601d54811015610b7457826001600160a01b0316601d8281548110610a7d57610a7d613bae565b6000918252602090912001546001600160a01b031603610b6257601d8054610aa790600190613bda565b81548110610ab757610ab7613bae565b600091825260209091200154601d80546001600160a01b039092169183908110610ae357610ae3613bae565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d805480610b3b57610b3b613bf1565b600082815260209020810160001990810180546001600160a01b0319169055019055610b74565b80610b6c81613c07565b915050610a56565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610bb3911515815260200190565b60405180910390a25050565b6000610bcc338484611ec5565b5060015b92915050565b6000546001600160a01b03163314610c005760405162461bcd60e51b815260040161094290613b2d565b6007805460ff19166001179055601554600003610c205742601555436014555b565b6000546001600160a01b03163314610c4c5760405162461bcd60e51b815260040161094290613b2d565b6009548103610cc35760405162461bcd60e51b815260206004820152603d60248201527f546865205265766f6c7574696f6e20546f6b656e3a2043616e6e6f742075706460448201527f617465206d61785478416d6f756e7420746f2073616d652076616c75650000006064820152608401610942565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610d03848484611fe9565b610d558433610d5085604051806060016040528060288152602001613e35602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190612566565b611ec5565b5060019392505050565b6000546001600160a01b03163314610d895760405162461bcd60e51b815260040161094290613b2d565b6008548103610e0a5760405162461bcd60e51b815260206004820152604160248201527f546865205265766f6c7574696f6e20546f6b656e3a2043616e6e6f742075706460448201527f617465206d617857616c6c6574416d6f756e7420746f2073616d652076616c756064820152606560f81b608482015260a401610942565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000600554821115610eb9576040805162461bcd60e51b81526020600482015260248101919091527f546865205265766f6c7574696f6e20546f6b656e3a20416d6f756e74206d757360448201527f74206265206c657373207468616e20746f74616c207265666c656374696f6e736064820152608401610942565b6000610ec36125a0565b9050610ecf8184613c36565b9392505050565b6000546001600160a01b03163314610f005760405162461bcd60e51b815260040161094290613b2d565b6007805460ff19169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610bcc918590610d5090866125c3565b60006c01431e0fae6d7217caa0000000831115610fbf5760405162461bcd60e51b815260206004820152603560248201527f546865205265766f6c7574696f6e20546f6b656e3a20416d6f756e74206d757360448201527474206265206c657373207468616e20737570706c7960581b6064820152608401610942565b6000610fc96125a0565b90506000610fd78286613c4a565b905083610fe7579150610bd09050565b601e54600090839060649061100690600160281b900460ff1689613c4a565b6110109190613c36565b61101a9190613c4a565b905060006110288284613bda565b9450610bd09350505050565b6000546001600160a01b0316331461105e5760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b03811660009081526016602052604090205460ff166110c95760405162461bcd60e51b815260206004820152602c6024820152600080516020613df583398151915260448201526b081b9bdd08189b18dbdad95960a21b6064820152608401610942565b6001600160a01b038116600081815260166020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146111405760405162461bcd60e51b815260040161094290613b2d565b600047116111b65760405162461bcd60e51b815260206004820152603c60248201527f546865205265766f6c7574696f6e20546f6b656e3a2043616e6e6f742073656e60448201527f64206d6f7265207468616e20636f6e74726163742062616c616e6365000000006064820152608401610942565b4760006111cb6000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611215576040519150601f19603f3d011682016040523d82523d6000602084013e61121a565b606091505b505090508015611259576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6001600160a01b0381166000908152601b602052604081205460ff161561129a57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610bd090610e3d565b6000546001600160a01b031633146112e65760405162461bcd60e51b815260040161094290613b2d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461135a5760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b03821660009081526018602052604090205481151560ff90911615150361139a5760405162461bcd60e51b815260040161094290613b62565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610bb3565b6000546001600160a01b0316331461141c5760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b03811660009081526016602052604090205460ff161561148c5760405162461bcd60e51b81526020600482015260306024820152600080516020613df583398151915260448201526f08185b1c9958591e48189b1bd8dad95960821b6064820152608401610942565b6203f4806015544261149e9190613bda565b106115115760405162461bcd60e51b815260206004820152603860248201527f546865205265766f6c7574696f6e20546f6b656e3a2054696d6520746f20626c60448201527f6f636b206163636f756e747320686173206578706972656400000000000000006064820152608401610942565b6001600160a01b038116600081815260166020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b0316331461158d5760405162461bcd60e51b815260040161094290613b2d565b600d546001600160a01b0385811691161461167d576001600160a01b0384166116165760405162461bcd60e51b815260206004820152603560248201527f546865205265766f6c7574696f6e20546f6b656e3a20546865206c6971756964604482015274069747957616c6c65742063616e6e6f74206265203605c1b6064820152608401610942565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f0160405190819003812090600080516020613e1583398151915290600090a4600d80546001600160a01b0319166001600160a01b0386161790555b600e546001600160a01b0384811691161461176d576001600160a01b0383166117065760405162461bcd60e51b815260206004820152603560248201527f546865205265766f6c7574696f6e20546f6b656e3a20546865206d61726b65746044820152740696e6757616c6c65742063616e6e6f74206265203605c1b6064820152608401610942565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f0160405190819003812090600080516020613e1583398151915290600090a4600e80546001600160a01b0319166001600160a01b0385161790555b6010546001600160a01b03838116911614611851576001600160a01b0382166117f05760405162461bcd60e51b815260206004820152602f60248201527f546865205265766f6c7574696f6e20546f6b656e3a205468652064657657616c60448201526e06c65742063616e6e6f74206265203608c1b6064820152608401610942565b6010546040516819195d95d85b1b195d60ba1b81526001600160a01b039182169184169060090160405190819003812090600080516020613e1583398151915290600090a4601080546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b0382811691161461193d576001600160a01b0381166118d85760405162461bcd60e51b815260206004820152603360248201527f546865205265766f6c7574696f6e20546f6b656e3a205468652062757942616360448201527206b57616c6c65742063616e6e6f74206265203606c1b6064820152608401610942565b600f546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d0160405190819003812090600080516020613e1583398151915290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b0316331461196d5760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036119ad5760405162461bcd60e51b815260040161094290613b62565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610bb3565b6000546001600160a01b03163314611a2f5760405162461bcd60e51b815260040161094290613b2d565b611a3e60118686868686612622565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610bcc3384610d5085604051806060016040528060258152602001613e7d602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190612566565b6000610bcc338484611fe9565b6000546001600160a01b03163314611b425760405162461bcd60e51b815260040161094290613b2d565b600b548103611bcb5760405162461bcd60e51b815260206004820152604960248201527f546865205265766f6c7574696f6e20546f6b656e3a2043616e6e6f742075706460448201527f617465206d696e696d756d546f6b656e734265666f72655377617020746f2073606482015268616d652076616c756560b81b608482015260a401610942565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611c285760405162461bcd60e51b815260040161094290613b2d565b611c3760118686868686612906565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611a57565b6000546001600160a01b03163314611c7f5760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611cbf5760405162461bcd60e51b815260040161094290613b62565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610bb3565b6000546001600160a01b03163314611d415760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610bb3565b6000546001600160a01b03163314611dc35760405162461bcd60e51b815260040161094290613b2d565b6001600160a01b038116611e285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610942565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ecf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c06565b6001600160a01b038316611f275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610942565b6001600160a01b038216611f885760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610942565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661204d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610942565b6001600160a01b0382166120af5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610942565b600081116121115760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610942565b61211a8361125d565b81111561218f5760405162461bcd60e51b815260206004820152603760248201527f546865205265766f6c7574696f6e20546f6b656e3a2043616e6e6f742074726160448201527f6e73666572206d6f7265207468616e2062616c616e63650000000000000000006064820152608401610942565b6001600160a01b038084166000818152601a6020908152604080832054948716835280832054938352601c90915290205460ff9283169291821691161580156121f157506001600160a01b0384166000908152601c602052604090205460ff16155b156124535760075460ff166122655760405162461bcd60e51b815260206004820152603460248201527f546865205265766f6c7574696f6e20546f6b656e3a2054726164696e672069736044820152731031bab93932b73a363c903234b9b0b13632b21760611b6064820152608401610942565b6001600160a01b03841660009081526016602052604090205460ff161561229e5760405162461bcd60e51b815260040161094290613c69565b6001600160a01b03851660009081526016602052604090205460ff16156122d75760405162461bcd60e51b815260040161094290613c69565b6001600160a01b03841660009081526019602052604090205460ff1615801561231957506001600160a01b03851660009081526019602052604090205460ff16155b15612396576009548311156123965760405162461bcd60e51b815260206004820152603e60248201527f546865205265766f6c7574696f6e20546f6b656e3a205472616e73666572206160448201527f6d6f756e74206578636565647320746865206d61785478416d6f756e742e00006064820152608401610942565b6001600160a01b03841660009081526018602052604090205460ff1661245357600854836123c38661125d565b6123cd9190613c9f565b11156124535760405162461bcd60e51b815260206004820152604960248201527f546865205265766f6c7574696f6e20546f6b656e3a204578706563746564207760448201527f616c6c657420616d6f756e74206578636565647320746865206d617857616c6c60648201526832ba20b6b7bab73a1760b91b608482015260a401610942565b61245d8282612c34565b6000600b5461246b3061125d565b600754911115915060ff16801561247f5750805b801561248e5750600a5460ff16155b80156124a55750601e54600160281b900460ff1615155b80156124c957506001600160a01b0385166000908152601a602052604090205460ff165b156124ee57600a805460ff191660011790556124e3612e7d565b600a805460ff191690555b600a5460009060ff16158015612506575060075460ff165b6001600160a01b03881660009081526017602052604090205490915060ff168061254857506001600160a01b03861660009081526017602052604090205460ff165b15612551575060005b61255d8787878461316f565b50505050505050565b6000818484111561258a5760405162461bcd60e51b81526004016109429190613907565b5060006125978486613bda565b95945050505050565b60008060006125ad613340565b90925090506125bc8282611e83565b9250505090565b6000806125d08385613c9f565b905083811015610ecf5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610942565b600286015460ff8681169116146126a357604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613e5d833981519152916126899160481b90613cb7565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461273757604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613e5d833981519152916127169160481b90613cb7565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b90920416146127ca576040516a6465764665654f6e42757960a81b8152600b0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613e5d833981519152916127a69160481b90613cb7565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612863576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613e5d8339815191529161283d9160481b90613cb7565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b90920416146128fe576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613e5d833981519152916128d69160481b90613cb7565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461299757604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613e5d833981519152916129789160481b90613cb7565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612a3057604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613e5d83398151915291612a0d9160481b90613cb7565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612ac5576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613e5d83398151915291612aa09160481b90613cb7565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612b60576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613e5d83398151915291612b399160481b90613cb7565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b90920416146128fe576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613e5d83398151915291612bd49160481b90613cb7565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b60008183612c275760405162461bcd60e51b81526004016109429190613907565b5060006125978486613c36565b601e805464ffffffffff191690558115612ce657600560145443612c589190613bda565b11612c6f57601e805460ff19166064179055612ce6565b601354601e805460ff80841662ff00ff1990921691909117600160201b8085048316620100009081029290921763ff00ff00191661010092860484169290920263ff000000191691909117600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612d8e57601354601e805461010080840460ff90811662ff00ff1990931692909217600160281b8504831662010000021763ff00ff001916630100000080860484169290920263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790556015546203f48090612d739042613bda565b11612d8e57601e805464ffffffffff1916640208030a021790555b601e5460ff600160201b820481169163010000008104821691620100008204811691612dc291610100820481169116613cce565b612dcc9190613cce565b612dd69190613cce565b612de09190613cce565b601e805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001611250565b6000612e883061125d565b601e54909150479060ff600160281b820481169181811691610100820481169162010000810482169163010000008204811691600160201b9004166000600287612ed2888c613c4a565b612edc9190613c36565b612ee69190613c36565b90506000612ef4828b613bda565b9050612eff816134ed565b6000612f0b8a47613bda565b9050600084612f1b60028b613cf3565b612f25908c613d15565b612f2f9190613d15565b60ff16905060006002828b60ff1685612f489190613c4a565b612f529190613c36565b612f5c9190613c36565b9050600082612f6e60ff8b1686613c4a565b612f789190613c36565b9050600083612f8a60ff8b1687613c4a565b612f949190613c36565b9050600081612fa38486613c9f565b612fad9190613c9f565b612fb79087613bda565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ff2573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561302d573d6000803e3d6000fd5b50600f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613068573d6000803e3d6000fd5b5087156130bb57613079888561363f565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8d601e60056101000a81548160ff021916908360ff1602179055508c601e60006101000a81548160ff021916908360ff1602179055508b601e60016101000a81548160ff021916908360ff1602179055508a601e60026101000a81548160ff021916908360ff16021790555089601e60036101000a81548160ff021916908360ff16021790555088601e60046101000a81548160ff021916908360ff16021790555050505050505050505050505050505050565b600080600061317e85856136f3565b92509250925060008060008061319d8987876131986125a0565b6137bd565b6001600160a01b038f166000908152601b60205260409020549397509195509350915060ff1615613206576001600160a01b038b166000908152600360205260409020546131ec908a90613bda565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a166000908152601b602052604090205460ff1615613265576001600160a01b038a1660009081526003602052604090205461324b908890613c9f565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054613289908590613bda565b6001600160a01b03808d1660009081526002602052604080822093909355908c16815220546132b9908490613c9f565b6001600160a01b038b166000908152600260205260409020556132dc8186613815565b6132e6828761387a565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161332b91815260200190565b60405180910390a35050505050505050505050565b60055460009081906c01431e0fae6d7217caa0000000825b601d548110156134a7578260026000601d848154811061337a5761337a613bae565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806133e557508160036000601d84815481106133be576133be613bae565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613405575050600554936c01431e0fae6d7217caa00000009350915050565b60026000601d838154811061341c5761341c613bae565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461344b9084613bda565b925060036000601d838154811061346457613464613bae565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134939083613bda565b91508061349f81613c07565b915050613358565b506c01431e0fae6d7217caa00000006005546134c39190613c36565b8210156134e4575050600554926c01431e0fae6d7217caa000000092509050565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061352257613522613bae565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561357b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359f9190613d38565b816001815181106135b2576135b2613bae565b6001600160a01b0392831660209182029290920101526001546135d89130911684611ec5565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790613611908590600090869030904290600401613d55565b600060405180830381600087803b15801561362b57600080fd5b505af11580156128fe573d6000803e3d6000fd5b6001546136579030906001600160a01b031684611ec5565b600154600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156136c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136ec9190613dc6565b5050505050565b60008060008361370b575083915060009050806137b6565b601e5460009060649061372890600160201b900460ff1688613c4a565b6137329190613c36565b601e5490915060009060649060ff6301000000820481169161010081048216916137659162010000810482169116613cce565b61376f9190613cce565b6137799190613cce565b6137869060ff1689613c4a565b6137909190613c36565b9050600061379e8284613c9f565b6137a89089613bda565b955091935091506137b69050565b9250925092565b6000808080806137cd868a613c4a565b905060006137db878a613c4a565b905060006137e9888a613c4a565b905060006137f78284613c9f565b6138019085613bda565b939c939b5091995097509095505050505050565b306000908152601b602052604090205460ff161561385257306000908152600360205260408120805483929061384c908490613c9f565b90915550505b3060009081526002602052604081208054849290613871908490613c9f565b90915550505050565b816005600082825461388c9190613bda565b9250508190555080600660008282546138719190613c9f565b6001600160a01b03811681146138ba57600080fd5b50565b803580151581146138cd57600080fd5b919050565b600080604083850312156138e557600080fd5b82356138f0816138a5565b91506138fe602084016138bd565b90509250929050565b600060208083528351808285015260005b8181101561393457858101830151858201604001528201613918565b81811115613946576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561396f57600080fd5b823561397a816138a5565b946020939093013593505050565b60006020828403121561399a57600080fd5b5035919050565b6000806000606084860312156139b657600080fd5b83356139c1816138a5565b925060208401356139d1816138a5565b929592945050506040919091013590565b600080604083850312156139f557600080fd5b823591506138fe602084016138bd565b600060208284031215613a1757600080fd5b8135610ecf816138a5565b60008060008060808587031215613a3857600080fd5b8435613a43816138a5565b93506020850135613a53816138a5565b92506040850135613a63816138a5565b91506060850135613a73816138a5565b939692955090935050565b803560ff811681146138cd57600080fd5b600080600080600060a08688031215613aa757600080fd5b613ab086613a7e565b9450613abe60208701613a7e565b9350613acc60408701613a7e565b9250613ada60608701613a7e565b9150613ae860808701613a7e565b90509295509295909350565b60008060408385031215613b0757600080fd5b8235613b12816138a5565b91506020830135613b22816138a5565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526040908201819052600080516020613df5833981519152908201527f20616c7265616479207468652076616c7565206f6620276578636c7564656427606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613bec57613bec613bc4565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201613c1957613c19613bc4565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613c4557613c45613c20565b500490565b6000816000190483118215151615613c6457613c64613bc4565b500290565b6020808252602890820152600080516020613df583398151915260408201526708189b1bd8dad95960c21b606082015260800190565b60008219821115613cb257613cb2613bc4565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115613ceb57613ceb613bc4565b019392505050565b600060ff831680613d0657613d06613c20565b8060ff84160491505092915050565b600060ff821660ff841680821015613d2f57613d2f613bc4565b90039392505050565b600060208284031215613d4a57600080fd5b8151610ecf816138a5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613da55784516001600160a01b031683529383019391830191600101613d80565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ddb57600080fd5b835192506020840151915060408401519050925092509256fe546865205265766f6c7574696f6e20546f6b656e3a204163636f756e742069734af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b76fbb5b6168ccc74341ed0d9240631c3d1e84974a29ccfb31c5f04ba6c2bad64736f6c634300080d0033

Deployed Bytecode Sourcemap

7734:26033:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19648:840;;;;;;;;;;-1:-1:-1;19648:840:0;;;;;:::i;:::-;;:::i;:::-;;8434:28;;;;;;;;;;-1:-1:-1;8434:28:0;;;;;;;;;;;800:14:1;;793:22;775:41;;763:2;748:18;8434:28:0;;;;;;;;21155:76;;;;;;;;;;-1:-1:-1;21221:5:0;;;;;;;;;;;;-1:-1:-1;;;21221:5:0;;;;21155:76;;;;;;;:::i;13387:146::-;;;;;;;;;;-1:-1:-1;13387:146:0;;;;;:::i;:::-;;:::i;14601:201::-;;;;;;;;;;;;;:::i;21694:80::-;;;;;;;;;;-1:-1:-1;21759:10:0;;21694:80;;;1895:25:1;;;1883:2;1868:18;21694:80:0;1749:177:1;7849:30:0;;;;;;;;;;-1:-1:-1;7849:30:0;;;;-1:-1:-1;;;;;7849:30:0;;;;;;-1:-1:-1;;;;;2110:32:1;;;2092:51;;2080:2;2065:18;7849:30:0;1931:218:1;21404:88:0;;;;;;;;;;-1:-1:-1;8324:21:0;21404:88;;8956:28;;;;;;;;;;-1:-1:-1;8956:28:0;;;;-1:-1:-1;;;;;8956:28:0;;;19370:275;;;;;;;;;;-1:-1:-1;19370:275:0;;;;;:::i;:::-;;:::i;13536:292::-;;;;;;;;;;-1:-1:-1;13536:292:0;;;;;:::i;:::-;;:::i;19098:269::-;;;;;;;;;;-1:-1:-1;19098:269:0;;;;;:::i;:::-;;:::i;22361:251::-;;;;;;;;;;-1:-1:-1;22361:251:0;;;;;:::i;:::-;;:::i;21317:84::-;;;;;;;;;;-1:-1:-1;21317:84:0;;8064:2;3150:36:1;;3138:2;3123:18;21317:84:0;3008:184:1;14805:82:0;;;;;;;;;;;;;:::i;13831:202::-;;;;;;;;;;-1:-1:-1;13831:202:0;;;;;:::i;:::-;;:::i;22615:492::-;;;;;;;;;;-1:-1:-1;22615:492:0;;;;;:::i;:::-;;:::i;7883:38::-;;;;;;;;;;;;;;;15567:224;;;;;;;;;;-1:-1:-1;15567:224:0;;;;;:::i;:::-;;:::i;20812:325::-;;;;;;;;;;;;;:::i;21495:196::-;;;;;;;;;;-1:-1:-1;21495:196:0;;;;;:::i;:::-;;:::i;7366:133::-;;;;;;;;;;;;;:::i;8922:30::-;;;;;;;;;;-1:-1:-1;8922:30:0;;;;-1:-1:-1;;;;;8922:30:0;;;16300:332;;;;;;;;;;-1:-1:-1;16300:332:0;;;;;:::i;:::-;;:::i;15209:355::-;;;;;;;;;;-1:-1:-1;15209:355:0;;;;;:::i;:::-;;:::i;16987:1226::-;;;;;;;;;;-1:-1:-1;16987:1226:0;;;;;:::i;:::-;;:::i;16635:349::-;;;;;;;;;;-1:-1:-1;16635:349:0;;;;;:::i;:::-;;:::i;8610:51::-;;;;;;;;;;;;;;;;7182:70;;;;;;;;;;-1:-1:-1;7220:7:0;7241:6;-1:-1:-1;;;;;7241:6:0;7182:70;;8988:24;;;;;;;;;;-1:-1:-1;8988:24:0;;;;-1:-1:-1;;;;;8988:24:0;;;21234:80;;;;;;;;;;-1:-1:-1;21302:7:0;;;;;;;;;;;;-1:-1:-1;;;21302:7:0;;;;21234:80;;18234:421;;;;;;;;;;-1:-1:-1;18234:421:0;;;;;:::i;:::-;;:::i;14036:253::-;;;;;;;;;;-1:-1:-1;14036:253:0;;;;;:::i;:::-;;:::i;13230:154::-;;;;;;;;;;-1:-1:-1;13230:154:0;;;;;:::i;:::-;;:::i;8509:54::-;;;;;;;;;;;;;;;;20491:318;;;;;;;;;;-1:-1:-1;20491:318:0;;;;;:::i;:::-;;:::i;18658:437::-;;;;;;;;;;-1:-1:-1;18658:437:0;;;;;:::i;:::-;;:::i;9880:58::-;;;;;;;;;;-1:-1:-1;9880:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15999:295;;;;;;;;;;-1:-1:-1;15999:295:0;;;;;:::i;:::-;;:::i;21919:215::-;;;;;;;;;;-1:-1:-1;22015:23:0;;;;;;;22040;;;;;;-1:-1:-1;;;22065:17:0;;;;;-1:-1:-1;;;22084:21:0;;;;;-1:-1:-1;;;22107:21:0;;;;21919:215;;;;5277:4:1;5265:17;;;5247:36;;5319:17;;;5314:2;5299:18;;5292:45;5373:17;;;5353:18;;;5346:45;;;;5427:17;;5422:2;5407:18;;5400:45;5482:17;;;5476:3;5461:19;;5454:46;5234:3;5219:19;21919:215:0;5008:498:1;8741:64:0;;;;;;;;;;;;;;;;15794:202;;;;;;;;;;-1:-1:-1;15794:202:0;;;;;:::i;:::-;;:::i;8885:30::-;;;;;;;;;;-1:-1:-1;8885:30:0;;;;-1:-1:-1;;;;;8885:30:0;;;21777:136;;;;;;;;;;-1:-1:-1;21777:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;21881:18:0;;;21860:7;21881:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21777:136;7504:223;;;;;;;;;;-1:-1:-1;7504:223:0;;;;;:::i;:::-;;:::i;22137:221::-;;;;;;;;;;-1:-1:-1;22234:24:0;;;;;;;;;22260;;;;;;-1:-1:-1;;;22286:18:0;;;;;-1:-1:-1;;;22306:22:0;;;;;-1:-1:-1;;;22330:22:0;;;;22137:221;;19648:840;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;19740:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;19732:122:::1;;;;-1:-1:-1::0;;;19732:122:0::1;;;;;;;:::i;:::-;19862:8;19859:570;;;-1:-1:-1::0;;;;;19881:16:0;::::1;19900:1;19881:16:::0;;;:7:::1;:16;::::0;;;;;:20;19878:95:::1;;-1:-1:-1::0;;;;;19949:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19929:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19910:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19878:95:::1;-1:-1:-1::0;;;;;19978:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;19978:44:0::1;::::0;::::1;;;::::0;;20028:22:::1;:36:::0;;-1:-1:-1;20028:36:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;20028:36:0::1;::::0;;::::1;::::0;;19859:570:::1;;;20087:9;20082:342;20106:22;:29:::0;20102:33;::::1;20082:342;;;20182:7;-1:-1:-1::0;;;;;20153:36:0::1;:22;20176:1;20153:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20153:25:0::1;:36:::0;20149:269:::1;;20227:22;20250:29:::0;;:33:::1;::::0;20282:1:::1;::::0;20250:33:::1;:::i;:::-;20227:57;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20199:22:::1;:25:::0;;-1:-1:-1;;;;;20227:57:0;;::::1;::::0;20222:1;;20199:25;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:85:::0;;-1:-1:-1;;;;;;20199:85:0::1;-1:-1:-1::0;;;;;20199:85:0;;::::1;;::::0;;20292:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;20320:24:::1;:33:::0;;;;:41;;-1:-1:-1;;20320:41:0::1;::::0;;20369:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20369:28:0;;;;;-1:-1:-1;;;;;;20369:28:0::1;::::0;;;;;20405:5:::1;;20149:269;20137:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20082:342;;;;19859:570;20465:7;-1:-1:-1::0;;;;;20438:45:0::1;;20474:8;20438:45;;;;800:14:1::0;793:22;775:41;;763:2;748:18;;635:187;20438:45:0::1;;;;;;;;19648:840:::0;;:::o;13387:146::-;13462:4;13473:39;6648:10;13496:7;13505:6;13473:8;:39::i;:::-;-1:-1:-1;13524:4:0;13387:146;;;;;:::o;14601:201::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14652:16:::1;:23:::0;;-1:-1:-1;;14652:23:0::1;14671:4;14652:23;::::0;;14690:16:::1;::::0;14652::::1;14690:21:::0;14686:112:::1;;14738:15;14719:16;:34:::0;14780:12:::1;14759:18;:33:::0;14686:112:::1;14601:201::o:0;19370:275::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19465:11:::1;;19453:8;:23:::0;19445:97:::1;;;::::0;-1:-1:-1;;;19445:97:0;;7566:2:1;19445:97:0::1;::::0;::::1;7548:21:1::0;7605:2;7585:18;;;7578:30;7644:34;7624:18;;;7617:62;7715:31;7695:18;;;7688:59;7764:19;;19445:97:0::1;7364:425:1::0;19445:97:0::1;19595:11;::::0;19558:49:::1;::::0;19585:8;;19558:49:::1;::::0;;;::::1;19618:11;:22:::0;19370:275::o;13536:292::-;13635:4;13646:36;13656:6;13664:9;13675:6;13646:9;:36::i;:::-;13687:120;13696:6;6648:10;13718:88;13756:6;13718:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13718:19:0;;;;;;:11;:19;;;;;;;;6648:10;13718:33;;;;;;;;;;:37;:88::i;:::-;13687:8;:120::i;:::-;-1:-1:-1;13819:4:0;13536:292;;;;;:::o;19098:269::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19188:15:::1;;19176:8;:27:::0;19168:105:::1;;;::::0;-1:-1:-1;;;19168:105:0;;7996:2:1;19168:105:0::1;::::0;::::1;7978:21:1::0;8035:2;8015:18;;;8008:30;8074:34;8054:18;;;8047:62;8145:34;8125:18;;;8118:62;-1:-1:-1;;;8196:19:1;;;8189:32;8238:19;;19168:105:0::1;7794:469:1::0;19168:105:0::1;19315:15;::::0;19283:48:::1;::::0;19305:8;;19283:48:::1;::::0;;;::::1;19336:15;:26:::0;19098:269::o;22361:251::-;22427:7;22460;;22449;:18;;22441:95;;;;;-1:-1:-1;;;22441:95:0;;8470:2:1;22441:95:0;;;8452:21:1;8489:18;;;8482:30;;;;8548:34;8528:18;;;8521:62;8619:34;8599:18;;;8592:62;8671:19;;22441:95:0;8268:428:1;22441:95:0;22541:19;22564:10;:8;:10::i;:::-;22541:33;-1:-1:-1;22586:21:0;22541:33;22586:7;:21;:::i;:::-;22579:28;22361:251;-1:-1:-1;;;22361:251:0:o;14805:82::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14858:16:::1;:24:::0;;-1:-1:-1;;14858:24:0::1;::::0;;14805:82::o;13831:202::-;6648:10;13921:4;13961:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13961:34:0;;;;;;;;;;13921:4;;13931:81;;13953:7;;13961:50;;14000:10;13961:38;:50::i;22615:492::-;22708:7;8324:21;22730:7;:18;;22722:84;;;;-1:-1:-1;;;22722:84:0;;9160:2:1;22722:84:0;;;9142:21:1;9199:2;9179:18;;;9172:30;9238:34;9218:18;;;9211:62;-1:-1:-1;;;9289:18:1;;;9282:51;9350:19;;22722:84:0;8958:417:1;22722:84:0;22811:19;22833:10;:8;:10::i;:::-;22811:32;-1:-1:-1;22848:15:0;22867:21;22811:32;22867:7;:21;:::i;:::-;22848:40;;22898:17;22893:210;;22930:7;-1:-1:-1;22923:14:0;;-1:-1:-1;22923:14:0;22893:210;22989:9;;22958:17;;23007:11;;23001:3;;22979:19;;-1:-1:-1;;;22989:9:0;;;;22979:7;:19;:::i;:::-;:25;;;;:::i;:::-;:39;;;;:::i;:::-;22958:60;-1:-1:-1;23024:23:0;23050:19;22958:60;23050:7;:19;:::i;:::-;23024:45;-1:-1:-1;23075:22:0;;-1:-1:-1;;;;23075:22:0;15567:224;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15640:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;15632:76;;;::::0;-1:-1:-1;;;15632:76:0;;9755:2:1;15632:76:0::1;::::0;::::1;9737:21:1::0;9794:2;9774:18;;;9767:30;-1:-1:-1;;;;;;;;;;;9813:18:1;;;9806:62;-1:-1:-1;;;9884:18:1;;;9877:42;9936:19;;15632:76:0::1;9553:408:1::0;15632:76:0::1;-1:-1:-1::0;;;;;15713:19:0;::::1;15735:5;15713:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;15713:27:0::1;::::0;;15750:36;15735:5;;15713:19;15750:36:::1;::::0;15735:5;;15750:36:::1;15567:224:::0;:::o;20812:325::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20896:1:::1;20872:21;:25;20864:98;;;::::0;-1:-1:-1;;;20864:98:0;;10168:2:1;20864:98:0::1;::::0;::::1;10150:21:1::0;10207:2;10187:18;;;10180:30;10246:34;10226:18;;;10219:62;10317:30;10297:18;;;10290:58;10365:19;;20864:98:0::1;9966:424:1::0;20864:98:0::1;20990:21;20973:14;21042:7;7220::::0;7241:6;-1:-1:-1;;;;;7241:6:0;;7182:70;21042:7:::1;-1:-1:-1::0;;;;;21034:21:0::1;21064:6;21034:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21016:59;;;21084:7;21080:53;;;21103:24;::::0;1895:25:1;;;21103:24:0::1;::::0;1883:2:1;1868:18;21103:24:0::1;;;;;;;;21080:53;20859:278;;20812:325::o:0;21495:196::-;-1:-1:-1;;;;;21579:33:0;;21561:7;21579:33;;;:24;:33;;;;;;;;21575:62;;;-1:-1:-1;;;;;;21621:16:0;;;;;:7;:16;;;;;;;21495:196::o;21575:62::-;-1:-1:-1;;;;;21669:16:0;;;;;;:7;:16;;;;;;21649:37;;:19;:37::i;7366:133::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;7467:1:::1;7451:6:::0;;7430:40:::1;::::0;-1:-1:-1;;;;;7451:6:0;;::::1;::::0;7430:40:::1;::::0;7467:1;;7430:40:::1;7492:1;7475:19:::0;;-1:-1:-1;;;;;;7475:19:0::1;::::0;;7366:133::o;16300:332::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16399:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;16391:127:::1;;;;-1:-1:-1::0;;;16391:127:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16523:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;16523:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16582:45;;775:41:1;;;16582:45:0::1;::::0;748:18:1;16582:45:0::1;635:187:1::0;15209:355:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15281:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;15280:20;15272:81;;;::::0;-1:-1:-1;;;15272:81:0;;10807:2:1;15272:81:0::1;::::0;::::1;10789:21:1::0;10846:2;10826:18;;;10819:30;-1:-1:-1;;;;;;;;;;;10865:18:1;;;10858:62;-1:-1:-1;;;10936:18:1;;;10929:46;10992:19;;15272:81:0::1;10605:412:1::0;15272:81:0::1;9544:6;15385:16;;15367:15;:34;;;;:::i;:::-;15366:56;15358:125;;;::::0;-1:-1:-1;;;15358:125:0;;11224:2:1;15358:125:0::1;::::0;::::1;11206:21:1::0;11263:2;11243:18;;;11236:30;11302:34;11282:18;;;11275:62;11373:26;11353:18;;;11346:54;11417:19;;15358:125:0::1;11022:420:1::0;15358:125:0::1;-1:-1:-1::0;;;;;15488:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;15488:26:0::1;15510:4;15488:26:::0;;::::1;::::0;;;15524:35;;15510:4;;15488:19;15524:35:::1;::::0;::::1;15209:355:::0;:::o;16987:1226::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;17138:15:::1;::::0;-1:-1:-1;;;;;17138:37:0;;::::1;:15:::0;::::1;:37;17135:282;;-1:-1:-1::0;;;;;17200:32:0;::::1;17192:98;;;::::0;-1:-1:-1;;;17192:98:0;;11649:2:1;17192:98:0::1;::::0;::::1;11631:21:1::0;11688:2;11668:18;;;11661:30;11727:34;11707:18;;;11700:62;-1:-1:-1;;;11778:18:1;;;11771:51;11839:19;;17192:98:0::1;11447:417:1::0;17192:98:0::1;17353:15;::::0;17301:68:::1;::::0;-1:-1:-1;;;12071:30:1;;-1:-1:-1;;;;;17353:15:0;;::::1;::::0;17301:68;::::1;::::0;12126:2:1;12117:12;17301:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17301:68:0;;;::::1;17375:15;:36:::0;;-1:-1:-1;;;;;;17375:36:0::1;-1:-1:-1::0;;;;;17375:36:0;::::1;;::::0;;17135:282:::1;17430:15;::::0;-1:-1:-1;;;;;17430:37:0;;::::1;:15:::0;::::1;:37;17427:282;;-1:-1:-1::0;;;;;17492:32:0;::::1;17484:98;;;::::0;-1:-1:-1;;;17484:98:0;;12342:2:1;17484:98:0::1;::::0;::::1;12324:21:1::0;12381:2;12361:18;;;12354:30;12420:34;12400:18;;;12393:62;-1:-1:-1;;;12471:18:1;;;12464:51;12532:19;;17484:98:0::1;12140:417:1::0;17484:98:0::1;17645:15;::::0;17593:68:::1;::::0;-1:-1:-1;;;12764:30:1;;-1:-1:-1;;;;;17645:15:0;;::::1;::::0;17593:68;::::1;::::0;12819:2:1;12810:12;17593:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17593:68:0;;;::::1;17667:15;:36:::0;;-1:-1:-1;;;;;;17667:36:0::1;-1:-1:-1::0;;;;;17667:36:0;::::1;;::::0;;17427:282:::1;17716:9;::::0;-1:-1:-1;;;;;17716:25:0;;::::1;:9:::0;::::1;:25;17713:228;;-1:-1:-1::0;;;;;17766:26:0;::::1;17758:86;;;::::0;-1:-1:-1;;;17758:86:0;;13035:2:1;17758:86:0::1;::::0;::::1;13017:21:1::0;13074:2;13054:18;;;13047:30;13113:34;13093:18;;;13086:62;-1:-1:-1;;;13164:18:1;;;13157:45;13219:19;;17758:86:0::1;12833:411:1::0;17758:86:0::1;17895:9;::::0;17855:50:::1;::::0;-1:-1:-1;;;13451:24:1;;-1:-1:-1;;;;;17895:9:0;;::::1;::::0;17855:50;::::1;::::0;13500:1:1;13491:11;17855:50:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17855:50:0;;;::::1;17911:9;:24:::0;;-1:-1:-1;;;;;;17911:24:0::1;-1:-1:-1::0;;;;;17911:24:0;::::1;;::::0;;17713:228:::1;17948:13;::::0;-1:-1:-1;;;;;17948:33:0;;::::1;:13:::0;::::1;:33;17945:264;;-1:-1:-1::0;;;;;18006:30:0;::::1;17998:94;;;::::0;-1:-1:-1;;;17998:94:0;;13715:2:1;17998:94:0::1;::::0;::::1;13697:21:1::0;13754:2;13734:18;;;13727:30;13793:34;13773:18;;;13766:62;-1:-1:-1;;;13844:18:1;;;13837:49;13903:19;;17998:94:0::1;13513:415:1::0;17998:94:0::1;18151:13;::::0;18103:62:::1;::::0;-1:-1:-1;;;14135:28:1;;-1:-1:-1;;;;;18151:13:0;;::::1;::::0;18103:62;::::1;::::0;14188:2:1;14179:12;18103:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18103:62:0;;;::::1;18171:13;:32:::0;;-1:-1:-1;;;;;;18171:32:0::1;-1:-1:-1::0;;;;;18171:32:0;::::1;;::::0;;17945:264:::1;16987:1226:::0;;;;:::o;16635:349::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16739:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;16731:132:::1;;;;-1:-1:-1::0;;;16731:132:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16868:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;16868:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16932:47;;775:41:1;;;16932:47:0::1;::::0;748:18:1;16932:47:0::1;635:187:1::0;18234:421:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18406:119:::1;18429:5;18436:18;18456;18476:12;18490:16;18508;18406:22;:119::i;:::-;18535:115;::::0;-1:-1:-1;;;14404:27:1;;14456:2;14447:12;18535:115:0::1;;::::0;;;;;::::1;::::0;;5277:4:1;5265:17;;;5247:36;;5319:17;;;5314:2;5299:18;;5292:45;5373:17;;;5353:18;;;5346:45;5427:17;;;5422:2;5407:18;;5400:45;5482:17;;5476:3;5461:19;;5454:46;18535:115:0;;;;::::1;::::0;;;;;5234:3:1;18535:115:0;;::::1;18234:421:::0;;;;;:::o;14036:253::-;14131:4;14142:126;6648:10;14164:7;14172:95;14211:15;14172:95;;;;;;;;;;;;;;;;;6648:10;14172:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14172:34:0;;;;;;;;;;;;:38;:95::i;13230:154::-;13310:4;13321:42;6648:10;13345:9;13356:6;13321:9;:42::i;20491:318::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20589:23:::1;;20577:8;:35:::0;20569:121:::1;;;::::0;-1:-1:-1;;;20569:121:0;;14672:2:1;20569:121:0::1;::::0;::::1;14654:21:1::0;14711:2;14691:18;;;14684:30;14750:34;14730:18;;;14723:62;14821:34;14801:18;;;14794:62;-1:-1:-1;;;14872:19:1;;;14865:40;14922:19;;20569:121:0::1;14470:477:1::0;20569:121:0::1;20741:23;::::0;20700:65:::1;::::0;20731:8;;20700:65:::1;::::0;;;::::1;20770:23;:34:::0;20491:318::o;18658:437::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18834:125:::1;18858:5;18865:19;18886;18907:13;18922:17;18941;18834:23;:125::i;:::-;18969:121;::::0;-1:-1:-1;;;15154:28:1;;15207:2;15198:12;18969:121:0::1;14952:264:1::0;15999:295:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16088:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;16080:116:::1;;;;-1:-1:-1::0;;;16080:116:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16201:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;16201:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16249:40;;775:41:1;;;16249:40:0::1;::::0;748:18:1;16249:40:0::1;635:187:1::0;15794:202:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15883:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;15883:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15941:50;;775:41:1;;;15941:50:0::1;::::0;748:18:1;15941:50:0::1;635:187:1::0;7504:223:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7587:22:0;::::1;7579:73;;;::::0;-1:-1:-1;;;7579:73:0;;15423:2:1;7579:73:0::1;::::0;::::1;15405:21:1::0;15462:2;15442:18;;;15435:30;15501:34;15481:18;;;15474:62;-1:-1:-1;;;15552:18:1;;;15545:36;15598:19;;7579:73:0::1;15221:402:1::0;7579:73:0::1;7683:6;::::0;;7662:38:::1;::::0;-1:-1:-1;;;;;7662:38:0;;::::1;::::0;7683:6;::::1;::::0;7662:38:::1;::::0;::::1;7705:6;:17:::0;;-1:-1:-1;;;;;;7705:17:0::1;-1:-1:-1::0;;;;;7705:17:0;;;::::1;::::0;;;::::1;::::0;;7504:223::o;2663:123::-;2721:7;2742:39;2746:1;2749;2742:39;;;;;;;;;;;;;;;;;:3;:39::i;14292:306::-;-1:-1:-1;;;;;14377:19:0;;14369:68;;;;-1:-1:-1;;;14369:68:0;;15830:2:1;14369:68:0;;;15812:21:1;15869:2;15849:18;;;15842:30;15908:34;15888:18;;;15881:62;-1:-1:-1;;;15959:18:1;;;15952:34;16003:19;;14369:68:0;15628:400:1;14369:68:0;-1:-1:-1;;;;;14450:21:0;;14442:68;;;;-1:-1:-1;;;14442:68:0;;16235:2:1;14442:68:0;;;16217:21:1;16274:2;16254:18;;;16247:30;16313:34;16293:18;;;16286:62;-1:-1:-1;;;16364:18:1;;;16357:32;16406:19;;14442:68:0;16033:398:1;14442:68:0;-1:-1:-1;;;;;14515:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14561:32;;1895:25:1;;;14561:32:0;;1868:18:1;14561:32:0;;;;;;;14292:306;;;:::o;23122:1765::-;-1:-1:-1;;;;;23215:18:0;;23207:68;;;;-1:-1:-1;;;23207:68:0;;16638:2:1;23207:68:0;;;16620:21:1;16677:2;16657:18;;;16650:30;16716:34;16696:18;;;16689:62;-1:-1:-1;;;16767:18:1;;;16760:35;16812:19;;23207:68:0;16436:401:1;23207:68:0;-1:-1:-1;;;;;23288:16:0;;23280:64;;;;-1:-1:-1;;;23280:64:0;;17044:2:1;23280:64:0;;;17026:21:1;17083:2;17063:18;;;17056:30;17122:34;17102:18;;;17095:62;-1:-1:-1;;;17173:18:1;;;17166:33;17216:19;;23280:64:0;16842:399:1;23280:64:0;23366:1;23357:6;:10;23349:64;;;;-1:-1:-1;;;23349:64:0;;17448:2:1;23349:64:0;;;17430:21:1;17487:2;17467:18;;;17460:30;17526:34;17506:18;;;17499:62;-1:-1:-1;;;17577:18:1;;;17570:39;17626:19;;23349:64:0;17246:405:1;23349:64:0;23436:15;23446:4;23436:9;:15::i;:::-;23426:6;:25;;23418:93;;;;-1:-1:-1;;;23418:93:0;;17858:2:1;23418:93:0;;;17840:21:1;17897:2;17877:18;;;17870:30;17936:34;17916:18;;;17909:62;18007:25;17987:18;;;17980:53;18050:19;;23418:93:0;17656:419:1;23418:93:0;-1:-1:-1;;;;;23537:31:0;;;23518:16;23537:31;;;:25;:31;;;;;;;;;23591:29;;;;;;;;;23631:35;;;:29;:35;;;;;;23537:31;;;;;23591:29;;;;23631:35;23630:36;:74;;;;-1:-1:-1;;;;;;23671:33:0;;;;;;:29;:33;;;;;;;;23670:34;23630:74;23627:754;;;23720:16;;;;23712:81;;;;-1:-1:-1;;;23712:81:0;;18282:2:1;23712:81:0;;;18264:21:1;18321:2;18301:18;;;18294:30;18360:34;18340:18;;;18333:62;-1:-1:-1;;;18411:18:1;;;18404:50;18471:19;;23712:81:0;18080:416:1;23712:81:0;-1:-1:-1;;;;;23817:14:0;;;;;;:10;:14;;;;;;;;23816:15;23808:68;;;;-1:-1:-1;;;23808:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23891:16:0;;;;;;:10;:16;;;;;;;;23890:17;23882:70;;;;-1:-1:-1;;;23882:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23972:38:0;;;;;;:34;:38;;;;;;;;23971:39;:84;;;;-1:-1:-1;;;;;;24015:40:0;;;;;;:34;:40;;;;;;;;24014:41;23971:84;23967:221;;;24094:11;;24084:6;:21;;24076:96;;;;-1:-1:-1;;;24076:96:0;;19112:2:1;24076:96:0;;;19094:21:1;19151:2;19131:18;;;19124:30;19190:34;19170:18;;;19163:62;19261:32;19241:18;;;19234:60;19311:19;;24076:96:0;18910:426:1;24076:96:0;-1:-1:-1;;;;;24198:33:0;;;;;;:29;:33;;;;;;;;24193:183;;24276:15;;24265:6;24249:13;24259:2;24249:9;:13::i;:::-;:22;;;;:::i;:::-;24248:43;;24240:129;;;;-1:-1:-1;;;24240:129:0;;19676:2:1;24240:129:0;;;19658:21:1;19715:2;19695:18;;;19688:30;19754:34;19734:18;;;19727:62;19825:34;19805:18;;;19798:62;-1:-1:-1;;;19876:19:1;;;19869:40;19926:19;;24240:129:0;19474:477:1;24240:129:0;24387:37;24400:11;24413:10;24387:12;:37::i;:::-;24429:12;24472:23;;24444:24;24462:4;24444:9;:24::i;:::-;24511:16;;24444:51;-1:-1:-1;24444:51:0;;-1:-1:-1;24511:16:0;;:31;;;;;24535:7;24511:31;:49;;;;-1:-1:-1;24551:9:0;;;;24550:10;24511:49;:70;;;;-1:-1:-1;24568:9:0;;-1:-1:-1;;;24568:9:0;;;;:13;;24511:70;:107;;;;-1:-1:-1;;;;;;24589:29:0;;;;;;:25;:29;;;;;;;;24511:107;24502:196;;;24630:9;:16;;-1:-1:-1;;24630:16:0;24642:4;24630:16;;;24652:17;:15;:17::i;:::-;24675:9;:17;;-1:-1:-1;;24675:17:0;;;24502:196;24720:9;;24704:12;;24720:9;;24719:10;:30;;;;-1:-1:-1;24733:16:0;;;;24719:30;-1:-1:-1;;;;;24759:24:0;;;;;;:18;:24;;;;;;24704:45;;-1:-1:-1;24759:24:0;;;:50;;-1:-1:-1;;;;;;24787:22:0;;;;;;:18;:22;;;;;;;;24759:50;24756:81;;;-1:-1:-1;24826:5:0;24756:81;24841:41;24856:4;24862:2;24866:6;24874:7;24841:14;:41::i;:::-;23202:1685;;;;23122:1765;;;:::o;2071:171::-;2157:7;2187:12;2179:6;;;;2171:29;;;;-1:-1:-1;;;2171:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2205:9:0;2217:5;2221:1;2217;:5;:::i;:::-;2205:17;2071:171;-1:-1:-1;;;;;2071:171:0:o;26584:149::-;26626:7;26641:15;26658;26677:19;:17;:19::i;:::-;26640:56;;-1:-1:-1;26640:56:0;-1:-1:-1;26708:20:0;26640:56;;26708:11;:20::i;:::-;26701:27;;;;26584:149;:::o;1774:160::-;1832:7;;1858:5;1862:1;1858;:5;:::i;:::-;1846:17;;1881:1;1876;:6;;1868:46;;;;-1:-1:-1;;;1868:46:0;;20158:2:1;1868:46:0;;;20140:21:1;20197:2;20177:18;;;20170:30;20236:29;20216:18;;;20209:57;20283:18;;1868:46:0;19956:351:1;30065:1249:0;30287:21;;;;:43;;;;:21;;:43;30283:215;;30343:101;;-1:-1:-1;;;20514:32:1;;20571:2;20562:12;30343:101:0;;;;;;;;30385:21;;;;30429:14;;30343:101;;30385:21;;;;;30343:101;;;;-1:-1:-1;;;;;;;;;;;30343:101:0;;;30429:14;;;30343:101;:::i;:::-;;;;;;;;30450:21;;;:42;;-1:-1:-1;;30450:42:0;;;;;;;30283:215;30506:21;;;;:43;;;;:21;;;;;:43;30502:215;;30562:101;;-1:-1:-1;;;21001:32:1;;21058:2;21049:12;30562:101:0;;;;;;;;30604:21;;;;30648:14;;30562:101;;30604:21;;;;;;;;30562:101;;;;-1:-1:-1;;;;;;;;;;;30562:101:0;;;30648:14;;;30562:101;:::i;:::-;;;;;;;;30669:21;;;:42;;-1:-1:-1;;30669:42:0;;;;;;;;;30502:215;30731:15;;;;:31;;;;-1:-1:-1;;;30731:15:0;;;;:31;30727:173;;30775:83;;-1:-1:-1;;;21274:26:1;;21325:2;21316:12;30775:83:0;;;;;;;;30811:15;;;;30843:14;;30775:83;;30811:15;-1:-1:-1;;;30811:15:0;;;;;;30775:83;;;;-1:-1:-1;;;;;;;;;;;30775:83:0;;;30843:14;;;30775:83;:::i;:::-;;;;;;;;30864:15;;;:30;;-1:-1:-1;;30864:30:0;-1:-1:-1;;;30864:30:0;;;;;;;30727:173;30908:19;;;;:39;;;;-1:-1:-1;;;30908:19:0;;;;:39;30904:201;;30960:95;;-1:-1:-1;;;21541:30:1;;21596:2;21587:12;30960:95:0;;;;;;;;31000:19;;;;31040:14;;30960:95;;31000:19;-1:-1:-1;;;31000:19:0;;;;;;30960:95;;;;-1:-1:-1;;;;;;;;;;;30960:95:0;;;31040:14;;;30960:95;:::i;:::-;;;;;;;;31061:19;;;:38;;-1:-1:-1;;31061:38:0;-1:-1:-1;;;31061:38:0;;;;;;;30904:201;31113:19;;;;:39;;;;-1:-1:-1;;;31113:19:0;;;;:39;31109:201;;31165:95;;-1:-1:-1;;;21812:30:1;;21867:2;21858:12;31165:95:0;;;;;;;;31205:19;;;;31245:14;;31165:95;;31205:19;-1:-1:-1;;;31205:19:0;;;;;;31165:95;;;;-1:-1:-1;;;;;;;;;;;31165:95:0;;;31245:14;;;31165:95;:::i;:::-;;;;;;;;31266:19;;;:38;;-1:-1:-1;;31266:38:0;-1:-1:-1;;;31266:38:0;;;;;;;31109:201;30065:1249;;;;;;:::o;28772:1290::-;29000:22;;;;:45;;;;:22;;;;;:45;28996:222;;29058:104;;-1:-1:-1;;;22083:33:1;;22141:2;22132:12;29058:104:0;;;;;;;;29101:22;;;;29147:14;;29058:104;;29101:22;;;;;;;;29058:104;;;;-1:-1:-1;;;;;;;;;;;29058:104:0;;;29147:14;;;29058:104;:::i;:::-;;;;;;;;29168:22;;;:44;;-1:-1:-1;;29168:44:0;;;;;;;;;28996:222;29226:22;;;;:45;;;;:22;;;;;:45;29222:222;;29284:104;;-1:-1:-1;;;22357:33:1;;22415:2;22406:12;29284:104:0;;;;;;;;29327:22;;;;29373:14;;29284:104;;29327:22;;;;;;;;29284:104;;;;-1:-1:-1;;;;;;;;;;;29284:104:0;;;29373:14;;;29284:104;:::i;:::-;;;;;;;;29394:22;;;:44;;-1:-1:-1;;29394:44:0;;;;;;;;;29222:222;29458:16;;;;:33;;;;-1:-1:-1;;;29458:16:0;;;;:33;29454:180;;29504:86;;-1:-1:-1;;;22631:27:1;;22683:2;22674:12;29504:86:0;;;;;;;;29541:16;;;;29575:14;;29504:86;;29541:16;-1:-1:-1;;;29541:16:0;;;;;;29504:86;;;;-1:-1:-1;;;;;;;;;;;29504:86:0;;;29575:14;;;29504:86;:::i;:::-;;;;;;;;29596:16;;;:32;;-1:-1:-1;;29596:32:0;-1:-1:-1;;;29596:32:0;;;;;;;29454:180;29642:20;;;;:41;;;;-1:-1:-1;;;29642:20:0;;;;:41;29638:208;;29696:98;;-1:-1:-1;;;22899:31:1;;22955:2;22946:12;29696:98:0;;;;;;;;29737:20;;;;29779:14;;29696:98;;29737:20;-1:-1:-1;;;29737:20:0;;;;;;29696:98;;;;-1:-1:-1;;;;;;;;;;;29696:98:0;;;29779:14;;;29696:98;:::i;:::-;;;;;;;;29800:20;;;:40;;-1:-1:-1;;29800:40:0;-1:-1:-1;;;29800:40:0;;;;;;;29638:208;29854:20;;;;:41;;;;-1:-1:-1;;;29854:20:0;;;;:41;29850:208;;29908:98;;-1:-1:-1;;;23171:31:1;;23227:2;23218:12;29908:98:0;;;;;;;;29949:20;;;;29991:14;;29908:98;;29949:20;-1:-1:-1;;;29949:20:0;;;;;;29908:98;;;;-1:-1:-1;;;;;;;;;;;29908:98:0;;;29991:14;;;29908:98;:::i;:::-;;;;;;;;30012:20;;;:40;;;;;-1:-1:-1;;;30012:40:0;-1:-1:-1;;30012:40:0;;;;;;28772:1290;;;;;;:::o;2791:251::-;2877:7;2906:12;2899:5;2891:28;;;;-1:-1:-1;;;2891:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2924:9:0;2936:5;2940:1;2936;:5;:::i;27506:1263::-;27576:13;:17;;-1:-1:-1;;27656:15:0;;;27678:408;;;;27753:1;27730:18;;27715:12;:33;;;;:::i;:::-;27714:40;27710:371;;27763:13;:19;;-1:-1:-1;;27763:19:0;27779:3;27763:19;;;27710:371;;;27830:23;;27814:13;:39;;27830:23;;;;-1:-1:-1;;27872:27:0;;;;;;;-1:-1:-1;;;27882:17:0;;;;;27872:27;;;;;;;;-1:-1:-1;;27976:35:0;27830:23;27934;;;;;27918:39;;;;-1:-1:-1;;27976:35:0;;;;;-1:-1:-1;;;27990:21:0;;;;27976:35;;;-1:-1:-1;;28030:35:0;-1:-1:-1;;;28044:21:0;;;;;;;28030:35;;;;;;;27710:371;28094:10;28090:494;;;28137:24;;28121:13;:40;;28137:24;;;;;;;;-1:-1:-1;;28167:28:0;;;;;;;-1:-1:-1;;;28177:18:0;;;;28167:28;;;-1:-1:-1;;28247:36:0;28217:24;;;;;;28201:40;;;;-1:-1:-1;;28247:36:0;;-1:-1:-1;;;28261:22:0;;;;28247:36;;;;;-1:-1:-1;;28289:36:0;-1:-1:-1;;;28303:22:0;;;;-1:-1:-1;;;28289:36:0;;;;;;;28364:16;;28384:6;;28346:34;;:15;:34;:::i;:::-;:44;28342:237;;28411:13;:17;;-1:-1:-1;;28548:15:0;;;;;28342:237;28656:11;;;-1:-1:-1;;;28656:11:0;;;;;28642;;;;;;28632:7;;;;;;28600:29;;28656:11;28616:13;;;;;28600;:29;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:67;;;;:::i;:::-;28588:9;:79;;-1:-1:-1;;28588:79:0;;-1:-1:-1;;;28588:79:0;;;;;;;;;;;;;28677:87;;;28689:13;;;;;;;;;;23736:34:1;;28588:79:0;28704:13;;;;23801:2:1;23786:18;;23779:43;28719:7:0;;;;;23838:18:1;;;23831:43;;;;28728:11:0;;;;;23905:2:1;23890:18;;23883:43;-1:-1:-1;;;28741:11:0;;;;23957:3:1;23942:19;;23935:44;28754:9:0;;;;;;24010:3:1;23995:19;;23988:44;28677:87:0;;23700:3:1;23685:19;28677:87:0;23450:588:1;31317:1685:0;31357:23;31383:24;31401:4;31383:9;:24::i;:::-;31490:9;;31357:50;;-1:-1:-1;31440:21:0;;31490:9;-1:-1:-1;;;31490:9:0;;;;;31536:13;;;;31490:9;31586:13;;;;;31630:7;;;;;;31673:11;;;;;;-1:-1:-1;;;31713:11:0;;;31412:25;31630:7;31490:9;31757:31;31536:13;31357:50;31757:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;31731:73;-1:-1:-1;31809:26:0;31838:33;31731:73;31838:15;:33;:::i;:::-;31809:62;;31878:37;31896:18;31878:17;:37::i;:::-;31922:27;31952:41;31976:17;31952:21;:41;:::i;:::-;31922:71;-1:-1:-1;31998:19:0;32063:15;32037:21;32057:1;32037:17;:21;:::i;:::-;32020:39;;:13;:39;:::i;:::-;:59;;;;:::i;:::-;31998:81;;;;32084:26;32169:1;32155:11;32135:17;32113:39;;:19;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:57;;;;:::i;:::-;32084:86;-1:-1:-1;32175:20:0;32234:11;32198:33;;;;:19;:33;:::i;:::-;:47;;;;:::i;:::-;32175:70;-1:-1:-1;32250:24:0;32317:11;32277:37;;;;:19;:37;:::i;:::-;:51;;;;:::i;:::-;32250:78;-1:-1:-1;32333:26:0;32250:78;32385:33;32406:12;32385:18;:33;:::i;:::-;:52;;;;:::i;:::-;32362:76;;:19;:76;:::i;:::-;32453:15;;32445:53;;32333:105;;-1:-1:-1;;;;;;32453:15:0;;32445:53;;;;;32333:105;;32453:15;32445:53;32453:15;32445:53;32333:105;32453:15;32445:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32511:9:0;;32503:41;;-1:-1:-1;;;;;32511:9:0;;;;32503:41;;;;;32531:12;;32511:9;32503:41;32511:9;32503:41;32531:12;32511:9;32503:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32557:13:0;;32549:49;;-1:-1:-1;;;;;32557:13:0;;;;32549:49;;;;;32581:16;;32557:13;32549:49;32557:13;32549:49;32581:16;32557:13;32549:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32609:19:0;;32605:169;;32636:50;32650:15;32667:18;32636:13;:50::i;:::-;32697:71;;;24615:25:1;;;24671:2;24656:18;;24649:34;;;24699:18;;;24692:34;;;32697:71:0;;24603:2:1;24588:18;32697:71:0;;;;;;;32605:169;32790:13;32778:9;;:25;;;;;;;;;;;;;;;;;;32830:17;32814:13;;:33;;;;;;;;;;;;;;;;;;32874:17;32858:13;;:33;;;;;;;;;;;;;;;;;;32912:11;32902:7;;:21;;;;;;;;;;;;;;;;;;32948:15;32934:11;;:29;;;;;;;;;;;;;;;;;;32982:15;32968:11;;:29;;;;;;;;;;;;;;;;;;31352:1650;;;;;;;;;;;;;;;;31317:1685::o;24890:762::-;24993:23;25017:12;25031:14;25049:29;25061:7;25070;25049:11;:29::i;:::-;24992:86;;;;;;25084:15;25101:23;25126:12;25140:14;25158:46;25170:7;25179:4;25185:6;25193:10;:8;:10::i;:::-;25158:11;:46::i;:::-;-1:-1:-1;;;;;25215:32:0;;;;;;:24;:32;;;;;;25083:121;;-1:-1:-1;25083:121:0;;-1:-1:-1;25083:121:0;-1:-1:-1;25083:121:0;-1:-1:-1;25215:32:0;;25211:93;;;-1:-1:-1;;;;;25273:15:0;;;;;;:7;:15;;;;;;:25;;25291:7;;25273:25;:::i;:::-;-1:-1:-1;;;;;25255:15:0;;;;;;:7;:15;;;;;:43;25211:93;-1:-1:-1;;;;;25312:35:0;;;;;;:24;:35;;;;;;;;25308:110;;;-1:-1:-1;;;;;25376:18:0;;;;;;:7;:18;;;;;;:36;;25397:15;;25376:36;:::i;:::-;-1:-1:-1;;;;;25355:18:0;;;;;;:7;:18;;;;;:57;25308:110;-1:-1:-1;;;;;25440:15:0;;;;;;:7;:15;;;;;;:25;;25458:7;;25440:25;:::i;:::-;-1:-1:-1;;;;;25422:15:0;;;;;;;:7;:15;;;;;;:43;;;;25491:18;;;;;;;:36;;25512:15;;25491:36;:::i;:::-;-1:-1:-1;;;;;25470:18:0;;;;;;:7;:18;;;;;:57;25532:33;25550:6;25558;25532:17;:33::i;:::-;25570:23;25582:4;25588;25570:11;:23::i;:::-;25620:9;-1:-1:-1;;;;;25603:44:0;25612:6;-1:-1:-1;;;;;25603:44:0;;25631:15;25603:44;;;;1895:25:1;;1883:2;1868:18;;1749:177;25603:44:0;;;;;;;;24987:665;;;;;;;24890:762;;;;:::o;26736:562::-;26828:7;;26787;;;;8324:21;26787:7;26870:331;26894:22;:29;26890:33;;26870:331;;;26983:7;26946;:34;26954:22;26977:1;26954:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26954:25:0;26946:34;;;;;;;;;;;;;:44;;:97;;;27036:7;26999;:34;27007:22;27030:1;27007:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27007:25:0;26999:34;;;;;;;;;;;;;:44;26946:97;26936:139;;;-1:-1:-1;;27058:7:0;;;8324:21;;-1:-1:-1;26736:562:0;-1:-1:-1;;26736:562:0:o;26936:139::-;27101:7;:34;27109:22;27132:1;27109:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27109:25:0;27101:34;;;;;;;;;;;;;27091:44;;:7;:44;:::i;:::-;27081:54;;27161:7;:34;27169:22;27192:1;27169:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27169:25:0;27161:34;;;;;;;;;;;;;27151:44;;:7;:44;:::i;:::-;27141:54;-1:-1:-1;26925:3:0;;;;:::i;:::-;;;;26870:331;;;;8324:21;27219:7;;:17;;;;:::i;:::-;27209:7;:27;27205:58;;;-1:-1:-1;;27246:7:0;;;8324:21;;-1:-1:-1;26736:562:0;-1:-1:-1;26736:562:0:o;27205:58::-;27276:7;;27285;;-1:-1:-1;26736:562:0;-1:-1:-1;26736:562:0:o;33005:411::-;33090:16;;;33104:1;33090:16;;;;;;;;33066:21;;33090:16;;;;;;;;;;-1:-1:-1;33090:16:0;33066:40;;33129:4;33111;33116:1;33111:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33111:23:0;;;:7;;;;;;;;;;:23;;;;33149:15;;:22;;;-1:-1:-1;;;33149:22:0;;;;:15;;;;;:20;;:22;;;;;33111:7;;33149:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33139:4;33144:1;33139:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33139:32:0;;;:7;;;;;;;;;:32;33208:15;;33176:62;;33193:4;;33208:15;33226:11;33176:8;:62::i;:::-;33243:15;;:168;;-1:-1:-1;;;33243:168:0;;-1:-1:-1;;;;;33243:15:0;;;;:66;;:168;;33314:11;;33243:15;;33364:4;;33381;;33391:15;;33243:168;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33419:345;33527:15;;33495:62;;33512:4;;-1:-1:-1;;;;;33527:15:0;33545:11;33495:8;:62::i;:::-;33562:15;;33716;;33562:194;;-1:-1:-1;;;33562:194:0;;33624:4;33562:194;;;26451:34:1;26501:18;;;26494:34;;;33562:15:0;26544:18:1;;;26537:34;;;26587:18;;;26580:34;-1:-1:-1;;;;;33716:15:0;;;26630:19:1;;;26623:44;33736:15:0;26683:19:1;;;26676:35;33562:15:0;;;:31;;33601:9;;26385:19:1;;33562:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33419:345;;:::o;25763:413::-;25837:7;25845;25853;25871;25866:306;;-1:-1:-1;25894:7:0;;-1:-1:-1;25903:1:0;;-1:-1:-1;25903:1:0;25886:22;;25866:306;25954:11;;25929:12;;25968:3;;25944:21;;-1:-1:-1;;;25954:11:0;;;;25944:7;:21;:::i;:::-;:27;;;;:::i;:::-;26047:11;;25929:42;;-1:-1:-1;25977:14:0;;26062:3;;26047:11;;;;;;;;26031:13;;;;;26005:23;;26021:7;;;;;;26005:13;:23;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;25994:65;;;;:7;:65;:::i;:::-;:71;;;;:::i;:::-;25977:88;-1:-1:-1;26071:23:0;26108:13;25977:88;26108:4;:13;:::i;:::-;26097:25;;:7;:25;:::i;:::-;26071:51;-1:-1:-1;26153:4:0;;-1:-1:-1;26159:6:0;-1:-1:-1;26128:38:0;;-1:-1:-1;26128:38:0;25866:306;25763:413;;;;;:::o;26179:402::-;26308:7;;;;;26367:21;26377:11;26367:7;:21;:::i;:::-;26349:39;-1:-1:-1;26393:12:0;26408:18;26415:11;26408:4;:18;:::i;:::-;26393:33;-1:-1:-1;26431:14:0;26448:20;26457:11;26448:6;:20;:::i;:::-;26431:37;-1:-1:-1;26473:23:0;26510:13;26431:37;26510:4;:13;:::i;:::-;26499:25;;:7;:25;:::i;:::-;26537:7;;;;-1:-1:-1;26563:4:0;;-1:-1:-1;26563:4:0;-1:-1:-1;26179:402:0;;-1:-1:-1;;;;;;26179:402:0:o;27301:202::-;27410:4;27377:39;;;;:24;:39;;;;;;;;27373:89;;;27440:4;27424:22;;;;:7;:22;;;;;:32;;27450:6;;27424:22;:32;;27450:6;;27424:32;:::i;:::-;;;;-1:-1:-1;;27373:89:0;27482:4;27466:22;;;;:7;:22;;;;;:32;;27492:6;;27466:22;:32;;27492:6;;27466:32;:::i;:::-;;;;-1:-1:-1;;;;27301:202:0:o;25655:105::-;25728:4;25717:7;;:15;;;;;;;:::i;:::-;;;;;;;;25751:4;25737:10;;:18;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:160::-;215:20;;271:13;;264:21;254:32;;244:60;;300:1;297;290:12;244:60;150:160;;;:::o;315:315::-;380:6;388;441:2;429:9;420:7;416:23;412:32;409:52;;;457:1;454;447:12;409:52;496:9;483:23;515:31;540:5;515:31;:::i;:::-;565:5;-1:-1:-1;589:35:1;620:2;605:18;;589:35;:::i;:::-;579:45;;315:315;;;;;:::o;827:597::-;939:4;968:2;997;986:9;979:21;1029:6;1023:13;1072:6;1067:2;1056:9;1052:18;1045:34;1097:1;1107:140;1121:6;1118:1;1115:13;1107:140;;;1216:14;;;1212:23;;1206:30;1182:17;;;1201:2;1178:26;1171:66;1136:10;;1107:140;;;1265:6;1262:1;1259:13;1256:91;;;1335:1;1330:2;1321:6;1310:9;1306:22;1302:31;1295:42;1256:91;-1:-1:-1;1408:2:1;1387:15;-1:-1:-1;;1383:29:1;1368:45;;;;1415:2;1364:54;;827:597;-1:-1:-1;;;827:597:1:o;1429:315::-;1497:6;1505;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;1613:9;1600:23;1632:31;1657:5;1632:31;:::i;:::-;1682:5;1734:2;1719:18;;;;1706:32;;-1:-1:-1;;;1429:315:1:o;2362:180::-;2421:6;2474:2;2462:9;2453:7;2449:23;2445:32;2442:52;;;2490:1;2487;2480:12;2442:52;-1:-1:-1;2513:23:1;;2362:180;-1:-1:-1;2362:180:1:o;2547:456::-;2624:6;2632;2640;2693:2;2681:9;2672:7;2668:23;2664:32;2661:52;;;2709:1;2706;2699:12;2661:52;2748:9;2735:23;2767:31;2792:5;2767:31;:::i;:::-;2817:5;-1:-1:-1;2874:2:1;2859:18;;2846:32;2887:33;2846:32;2887:33;:::i;:::-;2547:456;;2939:7;;-1:-1:-1;;;2993:2:1;2978:18;;;;2965:32;;2547:456::o;3197:248::-;3262:6;3270;3323:2;3311:9;3302:7;3298:23;3294:32;3291:52;;;3339:1;3336;3329:12;3291:52;3375:9;3362:23;3352:33;;3404:35;3435:2;3424:9;3420:18;3404:35;:::i;3450:247::-;3509:6;3562:2;3550:9;3541:7;3537:23;3533:32;3530:52;;;3578:1;3575;3568:12;3530:52;3617:9;3604:23;3636:31;3661:5;3636:31;:::i;3702:671::-;3788:6;3796;3804;3812;3865:3;3853:9;3844:7;3840:23;3836:33;3833:53;;;3882:1;3879;3872:12;3833:53;3921:9;3908:23;3940:31;3965:5;3940:31;:::i;:::-;3990:5;-1:-1:-1;4047:2:1;4032:18;;4019:32;4060:33;4019:32;4060:33;:::i;:::-;4112:7;-1:-1:-1;4171:2:1;4156:18;;4143:32;4184:33;4143:32;4184:33;:::i;:::-;4236:7;-1:-1:-1;4295:2:1;4280:18;;4267:32;4308:33;4267:32;4308:33;:::i;:::-;3702:671;;;;-1:-1:-1;3702:671:1;;-1:-1:-1;;3702:671:1:o;4378:156::-;4444:20;;4504:4;4493:16;;4483:27;;4473:55;;4524:1;4521;4514:12;4539:464;4624:6;4632;4640;4648;4656;4709:3;4697:9;4688:7;4684:23;4680:33;4677:53;;;4726:1;4723;4716:12;4677:53;4749:27;4766:9;4749:27;:::i;:::-;4739:37;;4795:36;4827:2;4816:9;4812:18;4795:36;:::i;:::-;4785:46;;4850:36;4882:2;4871:9;4867:18;4850:36;:::i;:::-;4840:46;;4905:36;4937:2;4926:9;4922:18;4905:36;:::i;:::-;4895:46;;4960:37;4992:3;4981:9;4977:19;4960:37;:::i;:::-;4950:47;;4539:464;;;;;;;;:::o;5511:388::-;5579:6;5587;5640:2;5628:9;5619:7;5615:23;5611:32;5608:52;;;5656:1;5653;5646:12;5608:52;5695:9;5682:23;5714:31;5739:5;5714:31;:::i;:::-;5764:5;-1:-1:-1;5821:2:1;5806:18;;5793:32;5834:33;5793:32;5834:33;:::i;:::-;5886:7;5876:17;;;5511:388;;;;;:::o;5904:356::-;6106:2;6088:21;;;6125:18;;;6118:30;6184:34;6179:2;6164:18;;6157:62;6251:2;6236:18;;5904:356::o;6265:428::-;6467:2;6449:21;;;6506:2;6486:18;;;6479:30;;;-1:-1:-1;;;;;;;;;;;6525:18:1;;;6518:62;6616:34;6611:2;6596:18;;6589:62;6683:3;6668:19;;6265:428::o;6698:127::-;6759:10;6754:3;6750:20;6747:1;6740:31;6790:4;6787:1;6780:15;6814:4;6811:1;6804:15;6830:127;6891:10;6886:3;6882:20;6879:1;6872:31;6922:4;6919:1;6912:15;6946:4;6943:1;6936:15;6962:125;7002:4;7030:1;7027;7024:8;7021:34;;;7035:18;;:::i;:::-;-1:-1:-1;7072:9:1;;6962:125::o;7092:127::-;7153:10;7148:3;7144:20;7141:1;7134:31;7184:4;7181:1;7174:15;7208:4;7205:1;7198:15;7224:135;7263:3;7284:17;;;7281:43;;7304:18;;:::i;:::-;-1:-1:-1;7351:1:1;7340:13;;7224:135::o;8701:127::-;8762:10;8757:3;8753:20;8750:1;8743:31;8793:4;8790:1;8783:15;8817:4;8814:1;8807:15;8833:120;8873:1;8899;8889:35;;8904:18;;:::i;:::-;-1:-1:-1;8938:9:1;;8833:120::o;9380:168::-;9420:7;9486:1;9482;9478:6;9474:14;9471:1;9468:21;9463:1;9456:9;9449:17;9445:45;9442:71;;;9493:18;;:::i;:::-;-1:-1:-1;9533:9:1;;9380:168::o;18501:404::-;18703:2;18685:21;;;18742:2;18722:18;;;18715:30;-1:-1:-1;;;;;;;;;;;18776:2:1;18761:18;;18754:62;-1:-1:-1;;;18847:2:1;18832:18;;18825:38;18895:3;18880:19;;18501:404::o;19341:128::-;19381:3;19412:1;19408:6;19405:1;19402:13;19399:39;;;19418:18;;:::i;:::-;-1:-1:-1;19454:9:1;;19341:128::o;20585:209::-;-1:-1:-1;;20749:38:1;;;;20731:57;;20719:2;20704:18;;20585:209::o;23241:204::-;23279:3;23315:4;23312:1;23308:12;23347:4;23344:1;23340:12;23382:3;23376:4;23372:14;23367:3;23364:23;23361:49;;;23390:18;;:::i;:::-;23426:13;;23241:204;-1:-1:-1;;;23241:204:1:o;24043:165::-;24081:1;24115:4;24112:1;24108:12;24139:3;24129:37;;24146:18;;:::i;:::-;24198:3;24191:4;24188:1;24184:12;24180:22;24175:27;;;24043:165;;;;:::o;24213:195::-;24251:4;24288;24285:1;24281:12;24320:4;24317:1;24313:12;24345:3;24340;24337:12;24334:38;;;24352:18;;:::i;:::-;24389:13;;;24213:195;-1:-1:-1;;;24213:195:1:o;24869:251::-;24939:6;24992:2;24980:9;24971:7;24967:23;24963:32;24960:52;;;25008:1;25005;24998:12;24960:52;25040:9;25034:16;25059:31;25084:5;25059:31;:::i;25125:980::-;25387:4;25435:3;25424:9;25420:19;25466:6;25455:9;25448:25;25492:2;25530:6;25525:2;25514:9;25510:18;25503:34;25573:3;25568:2;25557:9;25553:18;25546:31;25597:6;25632;25626:13;25663:6;25655;25648:22;25701:3;25690:9;25686:19;25679:26;;25740:2;25732:6;25728:15;25714:29;;25761:1;25771:195;25785:6;25782:1;25779:13;25771:195;;;25850:13;;-1:-1:-1;;;;;25846:39:1;25834:52;;25941:15;;;;25906:12;;;;25882:1;25800:9;25771:195;;;-1:-1:-1;;;;;;;26022:32:1;;;;26017:2;26002:18;;25995:60;-1:-1:-1;;;26086:3:1;26071:19;26064:35;25983:3;25125:980;-1:-1:-1;;;25125:980:1:o;26722:306::-;26810:6;26818;26826;26879:2;26867:9;26858:7;26854:23;26850:32;26847:52;;;26895:1;26892;26885:12;26847:52;26924:9;26918:16;26908:26;;26974:2;26963:9;26959:18;26953:25;26943:35;;27018:2;27007:9;27003:18;26997:25;26987:35;;26722:306;;;;;:::o

Swarm Source

ipfs://1b76fbb5b6168ccc74341ed0d9240631c3d1e84974a29ccfb31c5f04ba6c2bad
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.