ETH Price: $2,601.19 (-2.63%)
Gas: 1 Gwei

Token

Red Knight Token (RKT)
 

Overview

Max Total Supply

999,000,000,000,000 RKT

Holders

157 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,021,188,818,229.453193693415019316 RKT

Value
$0.00
0x5dd79c16cbbf3b3dda14bece65bcb7797ce0dd82
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

It is a token that has been under development since November 25th, 2021. It was strategically planned out so we could find new utilities that will aid in mass adoption in the decentralized space while bringing transparency to a whole new level.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RedKnightToken

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-03-27
*/

// 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 () public {
		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 RedKnightToken is IERC20, Ownable {
	using Address for address;
	using SafeMath for uint256;

	IRouter public uniswapV2Router;
	address public immutable uniswapV2Pair;

	string private constant _name =  "Red Knight Token";
	string private constant _symbol = "RKT";
	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 = 999000000000000 * 10**18;
	uint256 private _rTotal = (MAX - (MAX % _tTotal));
	uint256 private _tFeeTotal;

	bool public isTradingEnabled;
    uint256 private _tradingPausedTimestamp;

	// max wallet is 2.0% of initialSupply
	uint256 public maxWalletAmount = _tTotal * 200 / 10000;

    // max tx is 0.53% of initialSupply
	uint256 public maxTxAmount = _tTotal * 530 / 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 devWallet;
	address public buyBackWallet;

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

	// Launch taxes
	bool private _isLaunched;
	uint256 private _launchStartTimestamp;
	uint256 private _launchBlockNumber;
	CustomTaxPeriod private _launch1 = CustomTaxPeriod('launch1',5,0,100,1,0,4,0,2,0,3,0,2);
	CustomTaxPeriod private _launch2 = CustomTaxPeriod('launch2',0,3600,1,2,4,10,2,3,3,10,2,5);
	CustomTaxPeriod private _launch3 = CustomTaxPeriod('launch3',0,86400,1,2,4,8,2,3,3,10,2,4);

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

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

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

	event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
	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 BlockedAccountChange(address indexed holder, bool indexed status);
	event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event ExcludeFromFeesChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
    event ExcludeFromDividendsChange(address indexed account, bool isExcluded);
	event AllowedWhenTradingDisabledChange(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();
        devWallet = owner();
		buyBackWallet = 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;

		_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 _getNow() private view returns (uint256) {
		return block.timestamp;
	}
	function launch() external onlyOwner {
		_launchStartTimestamp = _getNow();
		_launchBlockNumber = block.number;
		isTradingEnabled = true;
		_isLaunched = true;
	}
	function cancelLaunch() external onlyOwner {
		require(this.isInLaunch(), "RedKnightToken: Launch is not set");
		_launchStartTimestamp = 0;
		_launchBlockNumber = 0;
		_isLaunched = false;
	}
	function activateTrading() external onlyOwner {
		isTradingEnabled = true;
	}
	function deactivateTrading() external onlyOwner {
		isTradingEnabled = false;
		_tradingPausedTimestamp = _getNow();
	}
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
		require(automatedMarketMakerPairs[pair] != value, "RedKnightToken: Automated market maker pair is already set to that value");
		automatedMarketMakerPairs[pair] = value;
		emit AutomatedMarketMakerPairChange(pair, value);
	}
	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, "RedKnightToken: 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, "RedKnightToken: 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, "RedKnightToken: Account is already the value of 'excluded'");
		_isExcludedFromMaxTransactionLimit[account] = excluded;
		emit ExcludeFromMaxTransferChange(account, excluded);
	}
    function blockAccount(address account) external onlyOwner {
		uint256 currentTimestamp = _getNow();
		require(!_isBlocked[account], "RedKnightToken: Account is already blocked");
		if (_isLaunched) {
			require((currentTimestamp - _launchStartTimestamp) < _blockedTimeLimit, "RedKnightToken: Time to block accounts has expired");
		}
		_isBlocked[account] = true;
		emit BlockedAccountChange(account, true);
	}
	function unblockAccount(address account) external onlyOwner {
		require(_isBlocked[account], "RedKnightToken: Account is not blcoked");
		_isBlocked[account] = false;
		emit BlockedAccountChange(account, false);
	}
	function setWallets(address newLiquidityWallet, address newDevWallet, address newMarketingWallet, address newBuyBackWallett) external onlyOwner {
		if(liquidityWallet != newLiquidityWallet) {
            require(newLiquidityWallet != address(0), "RedKnightToken: The liquidityWallet cannot be 0");
			emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet);
			liquidityWallet = newLiquidityWallet;
		}
		if(devWallet != newDevWallet) {
            require(newDevWallet != address(0), "RedKnightToken: The devWallet cannot be 0");
			emit WalletChange('devWallet', newDevWallet, devWallet);
			devWallet = newDevWallet;
		}
		if(marketingWallet != newMarketingWallet) {
            require(newMarketingWallet != address(0), "RedKnightToken: The marketingWallet cannot be 0");
			emit WalletChange('marketingWallet', newMarketingWallet, marketingWallet);
			marketingWallet = newMarketingWallet;
		}
		if(buyBackWallet != newBuyBackWallett) {
            require(newBuyBackWallett != address(0), "RedKnightToken: The buyBackWallet cannot be 0");
			emit WalletChange('buyBackWallet', newBuyBackWallett, buyBackWallet);
			buyBackWallet = newBuyBackWallett;
		}
	}
    // 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);
	}
    //Launch2 Fees
	function setLaunch2FeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _devFeeOnBuy,  uint8 _buyBackFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner {
		_setCustomBuyTaxPeriod(_launch2, _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy);
		emit FeeChange('launch2Fees-Buy', _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy);
	}
	function setLaunch2FeesOnSell(uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _devFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner {
		_setCustomSellTaxPeriod(_launch2, _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell);
		emit FeeChange('launch2Fees-Sell', _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell);
	}
	//Launch3 Fees
	function setLaunch3FeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _devFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner {
		_setCustomBuyTaxPeriod(_launch3, _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy);
		emit FeeChange('launch3Fees-Buy', _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy);
	}
	function setLaunch3FeesOnSell(uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _devFeeOnSell, uint8 _buyBackFeeOnSell,  uint8 _holdersFeeOnSell) external onlyOwner {
		_setCustomSellTaxPeriod(_launch3, _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell);
		emit FeeChange('launch3Fees-Sell', _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell);
	}
	function setMaxWalletAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxWalletAmount, "RedKnightToken: Cannot update maxWalletAmount to same value");
		emit MaxWalletAmountChange(newValue, maxWalletAmount);
		maxWalletAmount = newValue;
	}
	function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxTxAmount, "RedKnightToken: Cannot update maxTxAmount to same value");
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
	}
	function excludeFromDividends(address account, bool excluded) public onlyOwner {
		require(_isExcludedFromDividends[account] != excluded, "RedKnightToken: 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, "RedKnightToken: Cannot update minimumTokensBeforeSwap to same value");
		emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
		minimumTokensBeforeSwap = newValue;
	}
	function claimETHOverflow() external onlyOwner {
		require(address(this).balance > 0, "RedKnightToken: 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 isInLaunch() external view returns (bool) {
		uint256 currentTimestamp = !isTradingEnabled && _tradingPausedTimestamp > _launchStartTimestamp  ? _tradingPausedTimestamp : _getNow();
		uint256 totalLaunchTime =  _launch1.timeInPeriod + _launch2.timeInPeriod + _launch3.timeInPeriod;
		if(_isLaunched && ((currentTimestamp - _launchStartTimestamp) < totalLaunchTime || (block.number - _launchBlockNumber) < _launch1.blocksInPeriod )) {
			return true;
		} else {
			return false;
		}
	}
    function getBaseBuyFees() external view returns (uint256, uint256, uint256, uint256, uint256){
		return (_base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.devFeeOnBuy, _base.buyBackFeeOnBuy, _base.holdersFeeOnBuy);
	}
	function getBaseSellFees() external view returns (uint256, uint256, uint256, uint256, uint256){
		return (_base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.devFeeOnSell, _base.buyBackFeeOnSell, _base.holdersFeeOnSell);
	}
	function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
		require(rAmount <= _rTotal, "RedKnightToken: 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, "RedKnightToken: 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), "RedKnightToken: Cannot transfer more than balance");

		bool isBuyFromLp = automatedMarketMakerPairs[from];
		bool isSelltoLp = automatedMarketMakerPairs[to];
        bool _isInLaunch = this.isInLaunch();

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

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

		if (
			isTradingEnabled &&
			canSwap &&
			!_swapping &&
			_totalFee > 0 &&
			automatedMarketMakerPairs[to] &&
			from != liquidityWallet && to != liquidityWallet &&
			from != devWallet && to != devWallet &&
			from != marketingWallet && to != marketingWallet &&
			from != buyBackWallet && to != buyBackWallet
		) {
			_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, bool isLaunching) private {
		uint256 blocksSinceLaunch = block.number - _launchBlockNumber;
		uint256 currentTimestamp = !isTradingEnabled && _tradingPausedTimestamp > _launchStartTimestamp  ? _tradingPausedTimestamp : _getNow();
		uint256 timeSinceLaunch = currentTimestamp - _launchStartTimestamp;

		_liquidityFee = 0;
		_devFee = 0;
		_marketingFee = 0;
		_buyBackFee = 0;
		_holdersFee = 0;

		if (isBuyFromLp) {
			_liquidityFee = _base.liquidityFeeOnBuy;
			_devFee = _base.devFeeOnBuy;
			_marketingFee = _base.marketingFeeOnBuy;
			_buyBackFee = _base.buyBackFeeOnBuy;
			_holdersFee = _base.holdersFeeOnBuy;

			if(isLaunching) {
				if (_isLaunched && blocksSinceLaunch < _launch1.blocksInPeriod) {
					_liquidityFee = _launch1.liquidityFeeOnBuy;
					_devFee = _launch1.devFeeOnBuy;
					_marketingFee = _launch1.marketingFeeOnBuy;
					_buyBackFee = _launch1.buyBackFeeOnBuy;
					_holdersFee = _launch1.holdersFeeOnBuy;
				}
				else if (_isLaunched && timeSinceLaunch <= _launch2.timeInPeriod && blocksSinceLaunch > _launch1.blocksInPeriod) {
					_liquidityFee = _launch2.liquidityFeeOnBuy;
					_devFee = _launch2.devFeeOnBuy;
					_marketingFee = _launch2.marketingFeeOnBuy;
					_buyBackFee = _launch2.buyBackFeeOnBuy;
					_holdersFee = _launch2.holdersFeeOnBuy;
				}
				else {
					_liquidityFee = _launch3.liquidityFeeOnBuy;
					_devFee = _launch3.devFeeOnBuy;
					_marketingFee = _launch3.marketingFeeOnBuy;
					_buyBackFee = _launch3.buyBackFeeOnBuy;
					_holdersFee = _launch3.holdersFeeOnBuy;
				}
			}
		}
		if (isSelltoLp) {
			_liquidityFee = _base.liquidityFeeOnSell;
			_devFee = _base.devFeeOnSell;
			_marketingFee = _base.marketingFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
			_holdersFee = _base.holdersFeeOnSell;

			if(isLaunching) {
				if (_isLaunched && blocksSinceLaunch < _launch1.blocksInPeriod) {
					_liquidityFee = _launch1.liquidityFeeOnSell;
					_devFee = _launch1.devFeeOnSell;
					_marketingFee = _launch1.marketingFeeOnSell;
					_buyBackFee = _launch1.buyBackFeeOnSell;
					_holdersFee = _launch1.holdersFeeOnSell;
				}
				else if (_isLaunched && timeSinceLaunch <= _launch2.timeInPeriod && blocksSinceLaunch > _launch1.blocksInPeriod) {
					_liquidityFee = _launch2.liquidityFeeOnSell;
					_devFee = _launch2.devFeeOnSell;
					_marketingFee = _launch2.marketingFeeOnSell;
					_buyBackFee = _launch2.buyBackFeeOnSell;
					_holdersFee = _launch2.holdersFeeOnSell;
				}
				else {
					_liquidityFee = _launch3.liquidityFeeOnSell;
					_devFee = _launch3.devFeeOnSell;
					_marketingFee = _launch3.marketingFeeOnSell;
					_buyBackFee = _launch3.buyBackFeeOnSell;
					_holdersFee = _launch3.holdersFeeOnSell;
				}
			}
		}

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

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

		_swapTokensForETH(amountToSwapForETH);

		uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
		uint256 totalETHFee = _totalFee - (_liquidityFee / 2);
		uint256 amountETHLiquidity = ETHBalanceAfterSwap * _liquidityFee / totalETHFee / 2;
		uint256 amountETHDev = ETHBalanceAfterSwap * _devFee / totalETHFee;
		uint256 amountETHBuyBack = ETHBalanceAfterSwap * _buyBackFee / 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;
	}
	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":"cancelLaunch","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"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":"isInLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","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":"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":"setLaunch2FeesOnBuy","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":"setLaunch2FeesOnSell","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":"setLaunch3FeesOnBuy","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":"setLaunch3FeesOnSell","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":"newDevWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallett","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"}]

60a0604052620000206d31412717f0c2f24c6d1fc000000060001962001822565b6200002e906000196200184f565b6005556127106200004f6d31412717f0c2f24c6d1fc000000060c862001869565b6200005b91906200188b565b600955620186a06200007e6d31412717f0c2f24c6d1fc000000061021262001869565b6200008a91906200188b565b600a55620f4240620000ac6d31412717f0c2f24c6d1fc000000060fa62001869565b620000b891906200188b565b600c5561dead600d60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604051806101a00160405280666c61756e63683160c81b6001600160481b0319168152602001600560ff16815260200160008152602001606460ff168152602001600160ff168152602001600060ff168152602001600460ff168152602001600060ff168152602001600260ff168152602001600060ff168152602001600360ff168152602001600060ff168152602001600260ff16815250601460008201518160000160006101000a8154816001600160b81b03021916908360481c021790555060208201518160000160176101000a81548160ff021916908360ff1602179055506040820151816001015560608201518160020160006101000a81548160ff021916908360ff16021790555060808201518160020160016101000a81548160ff021916908360ff16021790555060a08201518160020160026101000a81548160ff021916908360ff16021790555060c08201518160020160036101000a81548160ff021916908360ff16021790555060e08201518160020160046101000a81548160ff021916908360ff1602179055506101008201518160020160056101000a81548160ff021916908360ff1602179055506101208201518160020160066101000a81548160ff021916908360ff1602179055506101408201518160020160076101000a81548160ff021916908360ff1602179055506101608201518160020160086101000a81548160ff021916908360ff1602179055506101808201518160020160096101000a81548160ff021916908360ff1602179055505050604051806101a00160405280663630bab731b41960c91b6001600160481b0319168152602001600060ff168152602001610e108152602001600160ff168152602001600260ff168152602001600460ff168152602001600a60ff168152602001600260ff168152602001600360ff168152602001600360ff168152602001600a60ff168152602001600260ff168152602001600560ff16815250601760008201518160000160006101000a8154816001600160b81b03021916908360481c021790555060208201518160000160176101000a81548160ff021916908360ff1602179055506040820151816001015560608201518160020160006101000a81548160ff021916908360ff16021790555060808201518160020160016101000a81548160ff021916908360ff16021790555060a08201518160020160026101000a81548160ff021916908360ff16021790555060c08201518160020160036101000a81548160ff021916908360ff16021790555060e08201518160020160046101000a81548160ff021916908360ff1602179055506101008201518160020160056101000a81548160ff021916908360ff1602179055506101208201518160020160066101000a81548160ff021916908360ff1602179055506101408201518160020160076101000a81548160ff021916908360ff1602179055506101608201518160020160086101000a81548160ff021916908360ff1602179055506101808201518160020160096101000a81548160ff021916908360ff1602179055505050604051806101a00160405280666c61756e63683360c81b6001600160481b0319168152602001600060ff168152602001620151808152602001600160ff168152602001600260ff168152602001600460ff168152602001600860ff168152602001600260ff168152602001600360ff168152602001600360ff168152602001600a60ff168152602001600260ff168152602001600460ff16815250601a60008201518160000160006101000a8154816001600160b81b03021916908360481c021790555060208201518160000160176101000a81548160ff021916908360ff1602179055506040820151816001015560608201518160020160006101000a81548160ff021916908360ff16021790555060808201518160020160016101000a81548160ff021916908360ff16021790555060a08201518160020160026101000a81548160ff021916908360ff16021790555060c08201518160020160036101000a81548160ff021916908360ff16021790555060e08201518160020160046101000a81548160ff021916908360ff1602179055506101008201518160020160056101000a81548160ff021916908360ff1602179055506101208201518160020160066101000a81548160ff021916908360ff1602179055506101408201518160020160076101000a81548160ff021916908360ff1602179055506101608201518160020160086101000a81548160ff021916908360ff1602179055506101808201518160020160096101000a81548160ff021916908360ff1602179055505050604051806101a0016040528066191959985d5b1d60ca1b6001600160481b0319168152602001600060ff16815260200160008152602001600160ff168152602001600160ff168152602001600460ff168152602001600460ff168152602001600260ff168152602001600260ff168152602001600360ff168152602001600360ff168152602001600260ff168152602001600260ff16815250601d60008201518160000160006101000a8154816001600160b81b03021916908360481c021790555060208201518160000160176101000a81548160ff021916908360ff1602179055506040820151816001015560608201518160020160006101000a81548160ff021916908360ff16021790555060808201518160020160016101000a81548160ff021916908360ff16021790555060a08201518160020160026101000a81548160ff021916908360ff16021790555060c08201518160020160036101000a81548160ff021916908360ff16021790555060e08201518160020160046101000a81548160ff021916908360ff1602179055506101008201518160020160056101000a81548160ff021916908360ff1602179055506101208201518160020160066101000a81548160ff021916908360ff1602179055506101408201518160020160076101000a81548160ff021916908360ff1602179055506101608201518160020160086101000a81548160ff021916908360ff1602179055506101808201518160020160096101000a81548160ff021916908360ff1602179055505050604051806101a00160405280636261736560e01b6001600160481b0319168152602001600060ff16815260200160008152602001600160ff168152602001600160ff168152602001600460ff168152602001600460ff168152602001600260ff168152602001600260ff168152602001600360ff168152602001600360ff168152602001600260ff168152602001600260ff16815250602060008201518160000160006101000a8154816001600160b81b03021916908360481c021790555060208201518160000160176101000a81548160ff021916908360ff1602179055506040820151816001015560608201518160020160006101000a81548160ff021916908360ff16021790555060808201518160020160016101000a81548160ff021916908360ff16021790555060a08201518160020160026101000a81548160ff021916908360ff16021790555060c08201518160020160036101000a81548160ff021916908360ff16021790555060e08201518160020160046101000a81548160ff021916908360ff1602179055506101008201518160020160056101000a81548160ff021916908360ff1602179055506101208201518160020160066101000a81548160ff021916908360ff1602179055506101408201518160020160076101000a81548160ff021916908360ff1602179055506101608201518160020160086101000a81548160ff021916908360ff1602179055506101808201518160020160096101000a81548160ff021916908360ff160217905550505034801562000c2757600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008054600e80546001600160a01b039092166001600160a01b03199283168117909155600f805483168217905560108054831682179055601180549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000d00573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d269190620018a2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000d74573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d9a9190620018a2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000de8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e0e9190620018a2565b600180546001600160a01b0319166001600160a01b03858116919091178255821660805290915062000e42908290620010a9565b60016024600062000e5b6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308082526024909352208054909216600190811790925562000ea991620011aa565b600d5462000ec2906001600160a01b03166001620011aa565b62000ecf826001620011aa565b60016023600062000ee86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905585821681526025938490528281208054861660019081179091558054909216815282812080548616831790553081529182208054909416811790935562000f656000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152602693849052828120805486166001908117909155600d5490921681529182208054909416811790935562000fd36000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560055490600290620010186000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620010456000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6d31412717f0c2f24c6d1fc00000006040516200109991815260200190565b60405180910390a350506200196d565b6001600160a01b03821660009081526029602052604090205481151560ff909116151503620011565760405162461bcd60e51b815260206004820152604860248201527f5265644b6e69676874546f6b656e3a204175746f6d61746564206d61726b657460448201527f206d616b6572207061697220697320616c72656164792073657420746f20746860648201526761742076616c756560c01b608482015260a4015b60405180910390fd5b6001600160a01b038216600081815260296020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6000546001600160a01b03163314620012065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200114d565b6001600160a01b03821660009081526027602052604090205481151560ff9091161515036200129e5760405162461bcd60e51b815260206004820152603a60248201527f5265644b6e69676874546f6b656e3a204163636f756e7420697320616c72656160448201527f6479207468652076616c7565206f6620276578636c756465642700000000000060648201526084016200114d565b80156200136b576001600160a01b0382166000908152600260205260409020541562001302576001600160a01b038216600090815260026020526040902054620012e890620014ec565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152602760205260408120805460ff1916841515179055602a805460018101825591527fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d20180546001600160a01b0319169091179055620014a2565b60005b602a54811015620014a057826001600160a01b0316602a8281548110620013995762001399620018cd565b6000918252602090912001546001600160a01b0316036200148b57602a8054620013c6906001906200184f565b81548110620013d957620013d9620018cd565b600091825260209091200154602a80546001600160a01b039092169183908110620014085762001408620018cd565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055602790925220805460ff19169055602a805480620014635762001463620018e3565b600082815260209020810160001990810180546001600160a01b0319169055019055620014a0565b806200149781620018f9565b9150506200136e565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051620014e0911515815260200190565b60405180910390a25050565b6000600554821115620015685760405162461bcd60e51b815260206004820152603a60248201527f5265644b6e69676874546f6b656e3a20416d6f756e74206d757374206265206c60448201527f657373207468616e20746f74616c207265666c656374696f6e7300000000000060648201526084016200114d565b60006200157462001589565b90506200158281846200188b565b9392505050565b6000808062001597620015bc565b91509150620015b581836200178660201b6200230f1790919060201c565b9250505090565b60055460009081906d31412717f0c2f24c6d1fc0000000825b602a548110156200173b578260026000602a8481548110620015fb57620015fb620018cd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200166a57508160036000602a8481548110620016435762001643620018cd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200168c575050600554936d31412717f0c2f24c6d1fc00000009350915050565b60026000602a8381548110620016a657620016a6620018cd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620016d790846200184f565b925060036000602a8381548110620016f357620016f3620018cd565b60009182526020808320909101546001600160a01b031683528201929092526040019020546200172490836200184f565b9150806200173281620018f9565b915050620015d5565b506d31412717f0c2f24c6d1fc00000006005546200175a91906200188b565b8210156200177d575050600554926d31412717f0c2f24c6d1fc000000092509050565b90939092509050565b60006200158283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620017d060201b60201c565b60008183620017f45760405162461bcd60e51b81526004016200114d919062001915565b5060006200180384866200188b565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b6000826200183457620018346200180c565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562001864576200186462001839565b500390565b600081600019048311821515161562001886576200188662001839565b500290565b6000826200189d576200189d6200180c565b500490565b600060208284031215620018b557600080fd5b81516001600160a01b03811681146200158257600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016200190e576200190e62001839565b5060010190565b600060208083528351808285015260005b81811015620019445785810183015185820160400152820162001926565b8181111562001957576000604083870101525b50601f01601f1916929092016040019392505050565b60805161480b6200198960003960006105ec015261480b6000f3fe60806040526004361061031e5760003560e01c806375f0a874116101ab578063aa4bde28116100f7578063d322157611610095578063f2fde38b1161006f578063f2fde38b146109bf578063f4b587c1146109df578063fc960745146109ff578063fe01753514610a1f57600080fd5b8063d322157614610939578063d469801614610959578063dd62ed3e1461097957600080fd5b8063b62496f5116100d1578063b62496f51461086e578063c02466681461089e578063cd43e228146108be578063d2d7ad831461092357600080fd5b8063aa4bde2814610818578063aee50b1e1461082e578063b1ba39ea1461084e57600080fd5b80638c0b5e221161016457806395d89b411161013e57806395d89b411461078c5780639fad9683146107b8578063a457c2d7146107d8578063a9059cbb146107f857600080fd5b80638c0b5e22146107385780638da5cb5b1461074e5780638ea5220f1461076c57600080fd5b806375f0a87414610678578063781edb3c146106985780637c0a893d146106b857806383672f3e146106d8578063880bcbc1146106f857806389886efa1461071857600080fd5b806327a14fc21161026a57806339509351116102235780634d78fdc6116101fd5780634d78fdc61461060e57806366164f6f1461062e57806370a0823114610643578063715018a61461066357600080fd5b8063395093511461059a5780634549b039146105ba57806349bd5a5e146105da57600080fd5b806327a14fc2146104ff5780632d8381191461051f578063313ce5671461053f57806332769db61461055b57806334cf1fea14610570578063392c695e1461058557600080fd5b80630bd05b69116102d757806318160ddd116102b157806318160ddd1461047e5780631cd348c01461049f5780631e293c10146104bf57806323b872dd146104df57600080fd5b80630bd05b691461041257806313114a9d146104275780631694505e1461044657600080fd5b806301339c211461032a5780630483f7a014610341578063064a59d01461036157806306fdde031461039057806307f8f43d146103d2578063095ea7b3146103f257600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a65565b005b34801561034d57600080fd5b5061033f61035c3660046141ec565b610ac2565b34801561036d57600080fd5b5060075461037b9060ff1681565b60405190151581526020015b60405180910390f35b34801561039c57600080fd5b5060408051808201909152601081526f2932b21025b734b3b43a102a37b5b2b760811b60208201525b6040516103879190614225565b3480156103de57600080fd5b5061033f6103ed366004614290565b610d60565b3480156103fe57600080fd5b5061037b61040d3660046142f5565b610e1a565b34801561041e57600080fd5b5061033f610e31565b34801561043357600080fd5b506006545b604051908152602001610387565b34801561045257600080fd5b50600154610466906001600160a01b031681565b6040516001600160a01b039091168152602001610387565b34801561048a57600080fd5b506d31412717f0c2f24c6d1fc0000000610438565b3480156104ab57600080fd5b50601154610466906001600160a01b031681565b3480156104cb57600080fd5b5061033f6104da366004614321565b610e6a565b3480156104eb57600080fd5b5061037b6104fa36600461433a565b610f3e565b34801561050b57600080fd5b5061033f61051a366004614321565b610fa7565b34801561052b57600080fd5b5061043861053a366004614321565b61107b565b34801561054b57600080fd5b5060405160128152602001610387565b34801561056757600080fd5b5061037b611112565b34801561057c57600080fd5b5061033f6111c0565b34801561059157600080fd5b5061033f6111fa565b3480156105a657600080fd5b5061037b6105b53660046142f5565b6112f5565b3480156105c657600080fd5b506104386105d536600461437b565b61132b565b3480156105e657600080fd5b506104667f000000000000000000000000000000000000000000000000000000000000000081565b34801561061a57600080fd5b5061033f6106293660046143a0565b611418565b34801561063a57600080fd5b5061033f611506565b34801561064f57600080fd5b5061043861065e3660046143a0565b611645565b34801561066f57600080fd5b5061033f6116a4565b34801561068457600080fd5b50600f54610466906001600160a01b031681565b3480156106a457600080fd5b5061033f6106b33660046141ec565b611718565b3480156106c457600080fd5b5061033f6106d33660046143a0565b6117da565b3480156106e457600080fd5b5061033f6106f33660046143bd565b611961565b34801561070457600080fd5b5061033f6107133660046141ec565b611d29565b34801561072457600080fd5b5061033f610733366004614290565b611deb565b34801561074457600080fd5b50610438600a5481565b34801561075a57600080fd5b506000546001600160a01b0316610466565b34801561077857600080fd5b50601054610466906001600160a01b031681565b34801561079857600080fd5b506040805180820190915260038152621492d560ea1b60208201526103c5565b3480156107c457600080fd5b5061033f6107d3366004614290565b611e44565b3480156107e457600080fd5b5061037b6107f33660046142f5565b611e9a565b34801561080457600080fd5b5061037b6108133660046142f5565b611ee9565b34801561082457600080fd5b5061043860095481565b34801561083a57600080fd5b5061033f610849366004614321565b611ef6565b34801561085a57600080fd5b5061033f610869366004614290565b611fd6565b34801561087a57600080fd5b5061037b6108893660046143a0565b60296020526000908152604090205460ff1681565b3480156108aa57600080fd5b5061033f6108b93660046141ec565b61202d565b3480156108ca57600080fd5b5060225460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b604080519586526020860194909452928401919091526060830152608082015260a001610387565b34801561092f57600080fd5b50610438600c5481565b34801561094557600080fd5b5061033f6109543660046141ec565b6120ef565b34801561096557600080fd5b50600e54610466906001600160a01b031681565b34801561098557600080fd5b50610438610994366004614419565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156109cb57600080fd5b5061033f6109da3660046143a0565b612171565b3480156109eb57600080fd5b5061033f6109fa366004614290565b61225b565b348015610a0b57600080fd5b5061033f610a1a366004614290565b6122b5565b348015610a2b57600080fd5b5060225460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166108fb565b6000546001600160a01b03163314610a985760405162461bcd60e51b8152600401610a8f90614447565b60405180910390fd5b42601255436013556007805460ff191660011790556011805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610aec5760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b03821660009081526027602052604090205481151560ff909116151503610b2c5760405162461bcd60e51b8152600401610a8f9061447c565b8015610bf4576001600160a01b03821660009081526002602052604090205415610b8c576001600160a01b038216600090815260026020526040902054610b729061107b565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152602760205260408120805460ff1916841515179055602a805460018101825591527fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d20180546001600160a01b0319169091179055610d17565b60005b602a54811015610d1557826001600160a01b0316602a8281548110610c1e57610c1e6144d9565b6000918252602090912001546001600160a01b031603610d0357602a8054610c4890600190614505565b81548110610c5857610c586144d9565b600091825260209091200154602a80546001600160a01b039092169183908110610c8457610c846144d9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055602790925220805460ff19169055602a805480610cdc57610cdc61451c565b600082815260209020810160001990810180546001600160a01b0319169055019055610d15565b80610d0d81614532565b915050610bf7565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610d54911515815260200190565b60405180910390a25050565b6000546001600160a01b03163314610d8a5760405162461bcd60e51b8152600401610a8f90614447565b610d99601a8686868686612351565b6040516e6c61756e636833466565732d42757960881b8152600f015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610e27338484612634565b5060015b92915050565b6000546001600160a01b03163314610e5b5760405162461bcd60e51b8152600401610a8f90614447565b6007805460ff19166001179055565b6000546001600160a01b03163314610e945760405162461bcd60e51b8152600401610a8f90614447565b600a548103610f0b5760405162461bcd60e51b815260206004820152603760248201527f5265644b6e69676874546f6b656e3a2043616e6e6f7420757064617465206d6160448201527f785478416d6f756e7420746f2073616d652076616c75650000000000000000006064820152608401610a8f565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610f4b848484612758565b610f9d8433610f9885604051806060016040528060288152602001614769602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190612dfd565b612634565b5060019392505050565b6000546001600160a01b03163314610fd15760405162461bcd60e51b8152600401610a8f90614447565b60095481036110485760405162461bcd60e51b815260206004820152603b60248201527f5265644b6e69676874546f6b656e3a2043616e6e6f7420757064617465206d6160448201527f7857616c6c6574416d6f756e7420746f2073616d652076616c756500000000006064820152608401610a8f565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b60006005548211156110f55760405162461bcd60e51b815260206004820152603a60248201527f5265644b6e69676874546f6b656e3a20416d6f756e74206d757374206265206c60448201527f657373207468616e20746f74616c207265666c656374696f6e730000000000006064820152608401610a8f565b60006110ff612e37565b905061110b8184614561565b9392505050565b600754600090819060ff1615801561112d5750601254600854115b611137574261113b565b6008545b601b546018546015549293506000926111549190614575565b61115e9190614575565b601154909150600160a01b900460ff1680156111a9575080601254836111849190614505565b10806111a95750601454601354600160b81b90910460ff16906111a79043614505565b105b156111b75760019250505090565b60009250505090565b6000546001600160a01b031633146111ea5760405162461bcd60e51b8152600401610a8f90614447565b6007805460ff1916905542600855565b6000546001600160a01b031633146112245760405162461bcd60e51b8152600401610a8f90614447565b306001600160a01b03166332769db66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611286919061458d565b6112dc5760405162461bcd60e51b815260206004820152602160248201527f5265644b6e69676874546f6b656e3a204c61756e6368206973206e6f742073656044820152601d60fa1b6064820152608401610a8f565b600060128190556013556011805460ff60a01b19169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610e27918590610f989086612e5a565b60006d31412717f0c2f24c6d1fc00000008311156113a35760405162461bcd60e51b815260206004820152602f60248201527f5265644b6e69676874546f6b656e3a20416d6f756e74206d757374206265206c60448201526e657373207468616e20737570706c7960881b6064820152608401610a8f565b60006113ad612e37565b905060006113bb82866145aa565b9050836113cb579150610e2b9050565b602b5460009083906064906113ea90600160281b900460ff16896145aa565b6113f49190614561565b6113fe91906145aa565b9050600061140c8284614505565b9450610e2b9350505050565b6000546001600160a01b031633146114425760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b03811660009081526028602052604090205460ff166114b95760405162461bcd60e51b815260206004820152602660248201527f5265644b6e69676874546f6b656e3a204163636f756e74206973206e6f7420626044820152651b18dbdad95960d21b6064820152608401610a8f565b6001600160a01b038116600081815260286020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146115305760405162461bcd60e51b8152600401610a8f90614447565b6000471161159f5760405162461bcd60e51b815260206004820152603660248201527f5265644b6e69676874546f6b656e3a2043616e6e6f742073656e64206d6f7265604482015275207468616e20636f6e74726163742062616c616e636560501b6064820152608401610a8f565b4760006115b46000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146115fe576040519150601f19603f3d011682016040523d82523d6000602084013e611603565b606091505b505090508015611641576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6001600160a01b03811660009081526027602052604081205460ff161561168257506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610e2b9061107b565b6000546001600160a01b031633146116ce5760405162461bcd60e51b8152600401610a8f90614447565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117425760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b03821660009081526025602052604090205481151560ff9091161515036117825760405162461bcd60e51b8152600401610a8f9061447c565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610d54565b6000546001600160a01b031633146118045760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b038116600090815260286020526040902054429060ff16156118825760405162461bcd60e51b815260206004820152602a60248201527f5265644b6e69676874546f6b656e3a204163636f756e7420697320616c726561604482015269191e48189b1bd8dad95960b21b6064820152608401610a8f565b601154600160a01b900460ff161561190e576202a300601254826118a69190614505565b1061190e5760405162461bcd60e51b815260206004820152603260248201527f5265644b6e69676874546f6b656e3a2054696d6520746f20626c6f636b20616360448201527118dbdd5b9d1cc81a185cc8195e1c1a5c995960721b6064820152608401610a8f565b6001600160a01b038216600081815260286020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a35050565b6000546001600160a01b0316331461198b5760405162461bcd60e51b8152600401610a8f90614447565b600e546001600160a01b03858116911614611a75576001600160a01b038416611a0e5760405162461bcd60e51b815260206004820152602f60248201527f5265644b6e69676874546f6b656e3a20546865206c697175696469747957616c60448201526e06c65742063616e6e6f74206265203608c1b6064820152608401610a8f565b600e546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f016040519081900381209060008051602061474983398151915290600090a4600e80546001600160a01b0319166001600160a01b0386161790555b6010546001600160a01b03848116911614611b53576001600160a01b038316611af25760405162461bcd60e51b815260206004820152602960248201527f5265644b6e69676874546f6b656e3a205468652064657657616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610a8f565b6010546040516819195d95d85b1b195d60ba1b81526001600160a01b03918216918516906009016040519081900381209060008051602061474983398151915290600090a4601080546001600160a01b0319166001600160a01b0385161790555b600f546001600160a01b03838116911614611c3d576001600160a01b038216611bd65760405162461bcd60e51b815260206004820152602f60248201527f5265644b6e69676874546f6b656e3a20546865206d61726b6574696e6757616c60448201526e06c65742063616e6e6f74206265203608c1b6064820152608401610a8f565b600f80546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b039182169291851691016040519081900381209060008051602061474983398151915290600090a4600f80546001600160a01b0319166001600160a01b0384161790555b6011546001600160a01b03828116911614611d23576001600160a01b038116611cbe5760405162461bcd60e51b815260206004820152602d60248201527f5265644b6e69676874546f6b656e3a20546865206275794261636b57616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610a8f565b6011546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d016040519081900381209060008051602061474983398151915290600090a4601180546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b03163314611d535760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b03821660009081526026602052604090205481151560ff909116151503611d935760405162461bcd60e51b8152600401610a8f9061447c565b6001600160a01b038216600081815260266020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610d54565b6000546001600160a01b03163314611e155760405162461bcd60e51b8152600401610a8f90614447565b611e2460178686868686612351565b6040516e6c61756e636832466565732d42757960881b8152600f01610db5565b6000546001600160a01b03163314611e6e5760405162461bcd60e51b8152600401610a8f90614447565b611e7d60208686868686612351565b6040516b62617365466565732d42757960a01b8152600c01610db5565b6000610e273384610f98856040518060600160405280602581526020016147b1602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190612dfd565b6000610e27338484612758565b6000546001600160a01b03163314611f205760405162461bcd60e51b8152600401610a8f90614447565b600c548103611fa35760405162461bcd60e51b815260206004820152604360248201527f5265644b6e69676874546f6b656e3a2043616e6e6f7420757064617465206d6960448201527f6e696d756d546f6b656e734265666f72655377617020746f2073616d652076616064820152626c756560e81b608482015260a401610a8f565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146120005760405162461bcd60e51b8152600401610a8f90614447565b61200f60208686868686612eb9565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01610db5565b6000546001600160a01b031633146120575760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b03821660009081526024602052604090205481151560ff9091161515036120975760405162461bcd60e51b8152600401610a8f9061447c565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610d54565b6000546001600160a01b031633146121195760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610d54565b6000546001600160a01b0316331461219b5760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b0381166122005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a8f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122855760405162461bcd60e51b8152600401610a8f90614447565b612294601a8686868686612eb9565b6040516f1b185d5b98da0cd199595ccb54d95b1b60821b8152601001610db5565b6000546001600160a01b031633146122df5760405162461bcd60e51b8152600401610a8f90614447565b6122ee60178686868686612eb9565b6040516f1b185d5b98da0c9199595ccb54d95b1b60821b8152601001610db5565b600061110b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131b9565b600286015460ff8681169116146123d257604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020614791833981519152916123b89160481b906145c9565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461246657604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020614791833981519152916124459160481b906145c9565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b90920416146124f8576040516a6465764665654f6e42757960a81b8152600b0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020614791833981519152916124d59160481b906145c9565b60405180910390a460028601805460ff60201b1916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612591576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b909204821692918616916000805160206147918339815191529161256b9160481b906145c9565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b909204161461262c576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020614791833981519152916126049160481b906145c9565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b6001600160a01b0383166126965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a8f565b6001600160a01b0382166126f75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a8f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166127bc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a8f565b6001600160a01b03821661281e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a8f565b600081116128805760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a8f565b61288983611645565b8111156128f25760405162461bcd60e51b815260206004820152603160248201527f5265644b6e69676874546f6b656e3a2043616e6e6f74207472616e73666572206044820152706d6f7265207468616e2062616c616e636560781b6064820152608401610a8f565b6001600160a01b03838116600090815260296020908152604080832054938616835280832054815163193b4edb60e11b8152915160ff95861695909116939230926332769db692600480830193928290030181865afa158015612959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297d919061458d565b6001600160a01b03871660009081526023602052604090205490915060ff161580156129c257506001600160a01b03851660009081526023602052604090205460ff16155b15612c185760075460ff16612a305760405162461bcd60e51b815260206004820152602e60248201527f5265644b6e69676874546f6b656e3a2054726164696e6720697320637572726560448201526d373a363c903234b9b0b13632b21760911b6064820152608401610a8f565b6001600160a01b03851660009081526028602052604090205460ff1615612a695760405162461bcd60e51b8152600401610a8f906145e0565b6001600160a01b03861660009081526028602052604090205460ff1615612aa25760405162461bcd60e51b8152600401610a8f906145e0565b6001600160a01b03851660009081526026602052604090205460ff16158015612ae457506001600160a01b03861660009081526026602052604090205460ff16155b15612b6157600a54841115612b615760405162461bcd60e51b815260206004820152603860248201527f5265644b6e69676874546f6b656e3a205472616e7366657220616d6f756e742060448201527f6578636565647320746865206d61785478416d6f756e742e00000000000000006064820152608401610a8f565b6001600160a01b03851660009081526025602052604090205460ff16612c185760095484612b8e87611645565b612b989190614575565b1115612c185760405162461bcd60e51b815260206004820152604360248201527f5265644b6e69676874546f6b656e3a2045787065637465642077616c6c65742060448201527f616d6f756e74206578636565647320746865206d617857616c6c6574416d6f75606482015262373a1760e91b608482015260a401610a8f565b612c238383836131e7565b6000600c54612c3130611645565b600754911115915060ff168015612c455750805b8015612c545750600b5460ff16155b8015612c6b5750602b54600160281b900460ff1615155b8015612c8f57506001600160a01b03861660009081526029602052604090205460ff165b8015612ca95750600e546001600160a01b03888116911614155b8015612cc35750600e546001600160a01b03878116911614155b8015612cdd57506010546001600160a01b03888116911614155b8015612cf757506010546001600160a01b03878116911614155b8015612d115750600f546001600160a01b03888116911614155b8015612d2b5750600f546001600160a01b03878116911614155b8015612d4557506011546001600160a01b03888116911614155b8015612d5f57506011546001600160a01b03878116911614155b15612d8457600b805460ff19166001179055612d796137ba565b600b805460ff191690555b600b5460009060ff16158015612d9c575060075460ff165b6001600160a01b03891660009081526024602052604090205490915060ff1680612dde57506001600160a01b03871660009081526024602052604090205460ff165b15612de7575060005b612df388888884613a8c565b5050505050505050565b60008184841115612e215760405162461bcd60e51b8152600401610a8f9190614225565b506000612e2e8486614505565b95945050505050565b6000806000612e44613c5d565b9092509050612e53828261230f565b9250505090565b600080612e678385614575565b90508381101561110b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a8f565b600286015460ff8681166101009092041614612f4a57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff6101009092048216929189169160008051602061479183398151915291612f2b9160481b906145c9565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612fe357604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff63010000009092048216929188169160008051602061479183398151915291612fc09160481b906145c9565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614613078576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020614791833981519152916130539160481b906145c9565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614613113576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020614791833981519152916130ec9160481b906145c9565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b909204161461262c576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020614791833981519152916131879160481b906145c9565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b600081836131da5760405162461bcd60e51b8152600401610a8f9190614225565b506000612e2e8486614561565b6000601354436131f79190614505565b60075490915060009060ff161580156132135750601254600854115b61321d5742613221565b6008545b90506000601254826132339190614505565b602b805464ffffffffff191690559050851561347657602254602b805460ff80841661ffff1990921691909117610100600160201b8086048416919091029190911763ffff000019166201000080860484160263ff000000191617600160301b850483166301000000021760ff60201b1916600160401b9094049190911602919091179055831561347657601154600160a01b900460ff1680156132e25750601454600160b81b900460ff1683105b1561335b57601654602b805460ff80841661ffff1990921691909117610100600160201b8086048416919091029190911763ffff000019166201000080860484160263ff000000191617600160301b850483166301000000021760ff60201b1916600160401b9094049190911602919091179055613476565b601154600160a01b900460ff16801561337657506018548111155b801561338d5750601454600160b81b900460ff1683115b1561340657601954602b805460ff80841661ffff1990921691909117610100600160201b8086048416919091029190911763ffff000019166201000080860484160263ff000000191617600160301b850483166301000000021760ff60201b1916600160401b9094049190911602919091179055613476565b601c54602b805460ff80841661ffff1990921691909117610100600160201b8086048416919091029190911763ffff000019166201000080860484160263ff000000191617600160301b850483166301000000021760ff60201b1916600160401b90940491909116029190911790555b84156136c557602254602b805461010080840460ff90811661ffff1990931692909217600160281b85048316919091021763ffff0000191663010000008085048316620100000263ff000000191691909117600160381b85048316919091021760ff60201b1916600160481b90930416600160201b0291909117905583156136c557601154600160a01b900460ff16801561351c5750601454600160b81b900460ff1683105b1561359c57601654602b805461010080840460ff90811661ffff1990931692909217600160281b85048316919091021763ffff0000191663010000008085048316620100000263ff000000191691909117600160381b85048316919091021760ff60201b1916600160481b90930416600160201b029190911790556136c5565b601154600160a01b900460ff1680156135b757506018548111155b80156135ce5750601454600160b81b900460ff1683115b1561364e57601954602b805461010080840460ff90811661ffff1990931692909217600160281b85048316919091021763ffff0000191663010000008085048316620100000263ff000000191691909117600160381b85048316919091021760ff60201b1916600160481b90930416600160201b029190911790556136c5565b601c54602b805461010080840460ff90811661ffff1990931692909217600160281b85048316919091021763ffff0000191663010000008085048316620100000263ff000000191691909117600160381b85048316919091021760ff60201b1916600160481b90930416600160201b029190911790555b602b5460ff600160201b82048116916301000000810482169161010082048116916136f99162010000820481169116614622565b6137039190614622565b61370d9190614622565b6137179190614622565b602b805460ff928316600160281b90810265ff0000000000198316811793849055604080519186169386169390931781526201000084048516602082015261010084048516818401526301000000840485166060820152600160201b840485166080820152920490921660a082015290517f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29181900360c00190a1505050505050565b60006137c530611645565b602b54909150479060ff600160281b82048116918181169162010000820481169161010081048216916301000000909104166000600286613806878b6145aa565b6138109190614561565b61381a9190614561565b90506000613828828a614505565b905061383381613e0e565b600061383f8947614505565b602b549091506000906138579060029060ff16614647565b602b5461386e9190600160281b900460ff16614669565b602b5460ff9182169250600091600291849161388b9116866145aa565b6138959190614561565b61389f9190614561565b602b5490915060009083906138bc90610100900460ff16866145aa565b6138c69190614561565b602b5490915060009084906138e5906301000000900460ff16876145aa565b6138ef9190614561565b90506000816138fe8486614575565b6139089190614575565b6139129087614505565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561394d573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613988573d6000803e3d6000fd5b506011546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156139c3573d6000803e3d6000fd5b508715613a16576139d48885613f60565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050602b805460ff98891663010000000263ff000000199a8a16610100029a909a1663ff00ff00199b8a16620100000262ff00ff199e8b16600160281b029e909e1665ff0000ff00ff19909216919091179b9098169a909a179a909a179790971694909417949094179095555050505050505050565b6000806000613a9b8585614014565b925092509250600080600080613aba898787613ab5612e37565b6140de565b6001600160a01b038f166000908152602760205260409020549397509195509350915060ff1615613b23576001600160a01b038b16600090815260036020526040902054613b09908a90614505565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a1660009081526027602052604090205460ff1615613b82576001600160a01b038a16600090815260036020526040902054613b68908890614575565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054613ba6908590614505565b6001600160a01b03808d1660009081526002602052604080822093909355908c1681522054613bd6908490614575565b6001600160a01b038b16600090815260026020526040902055613bf98186614136565b613c03828761419b565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051613c4891815260200190565b60405180910390a35050505050505050505050565b60055460009081906d31412717f0c2f24c6d1fc0000000825b602a54811015613dc6578260026000602a8481548110613c9857613c986144d9565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613d0357508160036000602a8481548110613cdc57613cdc6144d9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613d24575050600554936d31412717f0c2f24c6d1fc00000009350915050565b60026000602a8381548110613d3b57613d3b6144d9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613d6a9084614505565b925060036000602a8381548110613d8357613d836144d9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613db29083614505565b915080613dbe81614532565b915050613c76565b506d31412717f0c2f24c6d1fc0000000600554613de39190614561565b821015613e05575050600554926d31412717f0c2f24c6d1fc000000092509050565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613e4357613e436144d9565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec0919061468c565b81600181518110613ed357613ed36144d9565b6001600160a01b039283166020918202929092010152600154613ef99130911684612634565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790613f329085906000908690309042906004016146a9565b600060405180830381600087803b158015613f4c57600080fd5b505af115801561262c573d6000803e3d6000fd5b600154613f789030906001600160a01b031684612634565b600154600e5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613fe8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061400d919061471a565b5050505050565b60008060008361402c575083915060009050806140d7565b602b5460009060649061404990600160201b900460ff16886145aa565b6140539190614561565b602b5490915060009060649060ff6301000000820481169162010000810482169161408691610100810482169116614622565b6140909190614622565b61409a9190614622565b6140a79060ff16896145aa565b6140b19190614561565b905060006140bf8284614575565b6140c99089614505565b955091935091506140d79050565b9250925092565b6000808080806140ee868a6145aa565b905060006140fc878a6145aa565b9050600061410a888a6145aa565b905060006141188284614575565b6141229085614505565b939c939b5091995097509095505050505050565b3060009081526027602052604090205460ff161561417357306000908152600360205260408120805483929061416d908490614575565b90915550505b3060009081526002602052604081208054849290614192908490614575565b90915550505050565b81600560008282546141ad9190614505565b9250508190555080600660008282546141929190614575565b6001600160a01b03811681146141db57600080fd5b50565b80151581146141db57600080fd5b600080604083850312156141ff57600080fd5b823561420a816141c6565b9150602083013561421a816141de565b809150509250929050565b600060208083528351808285015260005b8181101561425257858101830151858201604001528201614236565b81811115614264576000604083870101525b50601f01601f1916929092016040019392505050565b803560ff8116811461428b57600080fd5b919050565b600080600080600060a086880312156142a857600080fd5b6142b18661427a565b94506142bf6020870161427a565b93506142cd6040870161427a565b92506142db6060870161427a565b91506142e96080870161427a565b90509295509295909350565b6000806040838503121561430857600080fd5b8235614313816141c6565b946020939093013593505050565b60006020828403121561433357600080fd5b5035919050565b60008060006060848603121561434f57600080fd5b833561435a816141c6565b9250602084013561436a816141c6565b929592945050506040919091013590565b6000806040838503121561438e57600080fd5b82359150602083013561421a816141de565b6000602082840312156143b257600080fd5b813561110b816141c6565b600080600080608085870312156143d357600080fd5b84356143de816141c6565b935060208501356143ee816141c6565b925060408501356143fe816141c6565b9150606085013561440e816141c6565b939692955090935050565b6000806040838503121561442c57600080fd5b8235614437816141c6565b9150602083013561421a816141c6565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603a908201527f5265644b6e69676874546f6b656e3a204163636f756e7420697320616c72656160408201527f6479207468652076616c7565206f6620276578636c7564656427000000000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015614517576145176144ef565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201614544576145446144ef565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826145705761457061454b565b500490565b60008219821115614588576145886144ef565b500190565b60006020828403121561459f57600080fd5b815161110b816141de565b60008160001904831182151516156145c4576145c46144ef565b500290565b68ffffffffffffffffff1991909116815260200190565b60208082526022908201527f5265644b6e69676874546f6b656e3a204163636f756e7420697320626c6f636b604082015261195960f21b606082015260800190565b600060ff821660ff84168060ff0382111561463f5761463f6144ef565b019392505050565b600060ff83168061465a5761465a61454b565b8060ff84160491505092915050565b600060ff821660ff841680821015614683576146836144ef565b90039392505050565b60006020828403121561469e57600080fd5b815161110b816141c6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146f95784516001600160a01b0316835293830193918301916001016146d4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561472f57600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b8643d65851e9b5ef12d9c2773980f59bffd796145290105a400a38be25dcccf64736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806375f0a874116101ab578063aa4bde28116100f7578063d322157611610095578063f2fde38b1161006f578063f2fde38b146109bf578063f4b587c1146109df578063fc960745146109ff578063fe01753514610a1f57600080fd5b8063d322157614610939578063d469801614610959578063dd62ed3e1461097957600080fd5b8063b62496f5116100d1578063b62496f51461086e578063c02466681461089e578063cd43e228146108be578063d2d7ad831461092357600080fd5b8063aa4bde2814610818578063aee50b1e1461082e578063b1ba39ea1461084e57600080fd5b80638c0b5e221161016457806395d89b411161013e57806395d89b411461078c5780639fad9683146107b8578063a457c2d7146107d8578063a9059cbb146107f857600080fd5b80638c0b5e22146107385780638da5cb5b1461074e5780638ea5220f1461076c57600080fd5b806375f0a87414610678578063781edb3c146106985780637c0a893d146106b857806383672f3e146106d8578063880bcbc1146106f857806389886efa1461071857600080fd5b806327a14fc21161026a57806339509351116102235780634d78fdc6116101fd5780634d78fdc61461060e57806366164f6f1461062e57806370a0823114610643578063715018a61461066357600080fd5b8063395093511461059a5780634549b039146105ba57806349bd5a5e146105da57600080fd5b806327a14fc2146104ff5780632d8381191461051f578063313ce5671461053f57806332769db61461055b57806334cf1fea14610570578063392c695e1461058557600080fd5b80630bd05b69116102d757806318160ddd116102b157806318160ddd1461047e5780631cd348c01461049f5780631e293c10146104bf57806323b872dd146104df57600080fd5b80630bd05b691461041257806313114a9d146104275780631694505e1461044657600080fd5b806301339c211461032a5780630483f7a014610341578063064a59d01461036157806306fdde031461039057806307f8f43d146103d2578063095ea7b3146103f257600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a65565b005b34801561034d57600080fd5b5061033f61035c3660046141ec565b610ac2565b34801561036d57600080fd5b5060075461037b9060ff1681565b60405190151581526020015b60405180910390f35b34801561039c57600080fd5b5060408051808201909152601081526f2932b21025b734b3b43a102a37b5b2b760811b60208201525b6040516103879190614225565b3480156103de57600080fd5b5061033f6103ed366004614290565b610d60565b3480156103fe57600080fd5b5061037b61040d3660046142f5565b610e1a565b34801561041e57600080fd5b5061033f610e31565b34801561043357600080fd5b506006545b604051908152602001610387565b34801561045257600080fd5b50600154610466906001600160a01b031681565b6040516001600160a01b039091168152602001610387565b34801561048a57600080fd5b506d31412717f0c2f24c6d1fc0000000610438565b3480156104ab57600080fd5b50601154610466906001600160a01b031681565b3480156104cb57600080fd5b5061033f6104da366004614321565b610e6a565b3480156104eb57600080fd5b5061037b6104fa36600461433a565b610f3e565b34801561050b57600080fd5b5061033f61051a366004614321565b610fa7565b34801561052b57600080fd5b5061043861053a366004614321565b61107b565b34801561054b57600080fd5b5060405160128152602001610387565b34801561056757600080fd5b5061037b611112565b34801561057c57600080fd5b5061033f6111c0565b34801561059157600080fd5b5061033f6111fa565b3480156105a657600080fd5b5061037b6105b53660046142f5565b6112f5565b3480156105c657600080fd5b506104386105d536600461437b565b61132b565b3480156105e657600080fd5b506104667f000000000000000000000000d87a52037d166d20e74abc10ce0ea743e11baf1481565b34801561061a57600080fd5b5061033f6106293660046143a0565b611418565b34801561063a57600080fd5b5061033f611506565b34801561064f57600080fd5b5061043861065e3660046143a0565b611645565b34801561066f57600080fd5b5061033f6116a4565b34801561068457600080fd5b50600f54610466906001600160a01b031681565b3480156106a457600080fd5b5061033f6106b33660046141ec565b611718565b3480156106c457600080fd5b5061033f6106d33660046143a0565b6117da565b3480156106e457600080fd5b5061033f6106f33660046143bd565b611961565b34801561070457600080fd5b5061033f6107133660046141ec565b611d29565b34801561072457600080fd5b5061033f610733366004614290565b611deb565b34801561074457600080fd5b50610438600a5481565b34801561075a57600080fd5b506000546001600160a01b0316610466565b34801561077857600080fd5b50601054610466906001600160a01b031681565b34801561079857600080fd5b506040805180820190915260038152621492d560ea1b60208201526103c5565b3480156107c457600080fd5b5061033f6107d3366004614290565b611e44565b3480156107e457600080fd5b5061037b6107f33660046142f5565b611e9a565b34801561080457600080fd5b5061037b6108133660046142f5565b611ee9565b34801561082457600080fd5b5061043860095481565b34801561083a57600080fd5b5061033f610849366004614321565b611ef6565b34801561085a57600080fd5b5061033f610869366004614290565b611fd6565b34801561087a57600080fd5b5061037b6108893660046143a0565b60296020526000908152604090205460ff1681565b3480156108aa57600080fd5b5061033f6108b93660046141ec565b61202d565b3480156108ca57600080fd5b5060225460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b604080519586526020860194909452928401919091526060830152608082015260a001610387565b34801561092f57600080fd5b50610438600c5481565b34801561094557600080fd5b5061033f6109543660046141ec565b6120ef565b34801561096557600080fd5b50600e54610466906001600160a01b031681565b34801561098557600080fd5b50610438610994366004614419565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156109cb57600080fd5b5061033f6109da3660046143a0565b612171565b3480156109eb57600080fd5b5061033f6109fa366004614290565b61225b565b348015610a0b57600080fd5b5061033f610a1a366004614290565b6122b5565b348015610a2b57600080fd5b5060225460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166108fb565b6000546001600160a01b03163314610a985760405162461bcd60e51b8152600401610a8f90614447565b60405180910390fd5b42601255436013556007805460ff191660011790556011805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610aec5760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b03821660009081526027602052604090205481151560ff909116151503610b2c5760405162461bcd60e51b8152600401610a8f9061447c565b8015610bf4576001600160a01b03821660009081526002602052604090205415610b8c576001600160a01b038216600090815260026020526040902054610b729061107b565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152602760205260408120805460ff1916841515179055602a805460018101825591527fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d20180546001600160a01b0319169091179055610d17565b60005b602a54811015610d1557826001600160a01b0316602a8281548110610c1e57610c1e6144d9565b6000918252602090912001546001600160a01b031603610d0357602a8054610c4890600190614505565b81548110610c5857610c586144d9565b600091825260209091200154602a80546001600160a01b039092169183908110610c8457610c846144d9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055602790925220805460ff19169055602a805480610cdc57610cdc61451c565b600082815260209020810160001990810180546001600160a01b0319169055019055610d15565b80610d0d81614532565b915050610bf7565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610d54911515815260200190565b60405180910390a25050565b6000546001600160a01b03163314610d8a5760405162461bcd60e51b8152600401610a8f90614447565b610d99601a8686868686612351565b6040516e6c61756e636833466565732d42757960881b8152600f015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610e27338484612634565b5060015b92915050565b6000546001600160a01b03163314610e5b5760405162461bcd60e51b8152600401610a8f90614447565b6007805460ff19166001179055565b6000546001600160a01b03163314610e945760405162461bcd60e51b8152600401610a8f90614447565b600a548103610f0b5760405162461bcd60e51b815260206004820152603760248201527f5265644b6e69676874546f6b656e3a2043616e6e6f7420757064617465206d6160448201527f785478416d6f756e7420746f2073616d652076616c75650000000000000000006064820152608401610a8f565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610f4b848484612758565b610f9d8433610f9885604051806060016040528060288152602001614769602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190612dfd565b612634565b5060019392505050565b6000546001600160a01b03163314610fd15760405162461bcd60e51b8152600401610a8f90614447565b60095481036110485760405162461bcd60e51b815260206004820152603b60248201527f5265644b6e69676874546f6b656e3a2043616e6e6f7420757064617465206d6160448201527f7857616c6c6574416d6f756e7420746f2073616d652076616c756500000000006064820152608401610a8f565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b60006005548211156110f55760405162461bcd60e51b815260206004820152603a60248201527f5265644b6e69676874546f6b656e3a20416d6f756e74206d757374206265206c60448201527f657373207468616e20746f74616c207265666c656374696f6e730000000000006064820152608401610a8f565b60006110ff612e37565b905061110b8184614561565b9392505050565b600754600090819060ff1615801561112d5750601254600854115b611137574261113b565b6008545b601b546018546015549293506000926111549190614575565b61115e9190614575565b601154909150600160a01b900460ff1680156111a9575080601254836111849190614505565b10806111a95750601454601354600160b81b90910460ff16906111a79043614505565b105b156111b75760019250505090565b60009250505090565b6000546001600160a01b031633146111ea5760405162461bcd60e51b8152600401610a8f90614447565b6007805460ff1916905542600855565b6000546001600160a01b031633146112245760405162461bcd60e51b8152600401610a8f90614447565b306001600160a01b03166332769db66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611286919061458d565b6112dc5760405162461bcd60e51b815260206004820152602160248201527f5265644b6e69676874546f6b656e3a204c61756e6368206973206e6f742073656044820152601d60fa1b6064820152608401610a8f565b600060128190556013556011805460ff60a01b19169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610e27918590610f989086612e5a565b60006d31412717f0c2f24c6d1fc00000008311156113a35760405162461bcd60e51b815260206004820152602f60248201527f5265644b6e69676874546f6b656e3a20416d6f756e74206d757374206265206c60448201526e657373207468616e20737570706c7960881b6064820152608401610a8f565b60006113ad612e37565b905060006113bb82866145aa565b9050836113cb579150610e2b9050565b602b5460009083906064906113ea90600160281b900460ff16896145aa565b6113f49190614561565b6113fe91906145aa565b9050600061140c8284614505565b9450610e2b9350505050565b6000546001600160a01b031633146114425760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b03811660009081526028602052604090205460ff166114b95760405162461bcd60e51b815260206004820152602660248201527f5265644b6e69676874546f6b656e3a204163636f756e74206973206e6f7420626044820152651b18dbdad95960d21b6064820152608401610a8f565b6001600160a01b038116600081815260286020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146115305760405162461bcd60e51b8152600401610a8f90614447565b6000471161159f5760405162461bcd60e51b815260206004820152603660248201527f5265644b6e69676874546f6b656e3a2043616e6e6f742073656e64206d6f7265604482015275207468616e20636f6e74726163742062616c616e636560501b6064820152608401610a8f565b4760006115b46000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146115fe576040519150601f19603f3d011682016040523d82523d6000602084013e611603565b606091505b505090508015611641576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6001600160a01b03811660009081526027602052604081205460ff161561168257506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610e2b9061107b565b6000546001600160a01b031633146116ce5760405162461bcd60e51b8152600401610a8f90614447565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117425760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b03821660009081526025602052604090205481151560ff9091161515036117825760405162461bcd60e51b8152600401610a8f9061447c565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610d54565b6000546001600160a01b031633146118045760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b038116600090815260286020526040902054429060ff16156118825760405162461bcd60e51b815260206004820152602a60248201527f5265644b6e69676874546f6b656e3a204163636f756e7420697320616c726561604482015269191e48189b1bd8dad95960b21b6064820152608401610a8f565b601154600160a01b900460ff161561190e576202a300601254826118a69190614505565b1061190e5760405162461bcd60e51b815260206004820152603260248201527f5265644b6e69676874546f6b656e3a2054696d6520746f20626c6f636b20616360448201527118dbdd5b9d1cc81a185cc8195e1c1a5c995960721b6064820152608401610a8f565b6001600160a01b038216600081815260286020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a35050565b6000546001600160a01b0316331461198b5760405162461bcd60e51b8152600401610a8f90614447565b600e546001600160a01b03858116911614611a75576001600160a01b038416611a0e5760405162461bcd60e51b815260206004820152602f60248201527f5265644b6e69676874546f6b656e3a20546865206c697175696469747957616c60448201526e06c65742063616e6e6f74206265203608c1b6064820152608401610a8f565b600e546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f016040519081900381209060008051602061474983398151915290600090a4600e80546001600160a01b0319166001600160a01b0386161790555b6010546001600160a01b03848116911614611b53576001600160a01b038316611af25760405162461bcd60e51b815260206004820152602960248201527f5265644b6e69676874546f6b656e3a205468652064657657616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610a8f565b6010546040516819195d95d85b1b195d60ba1b81526001600160a01b03918216918516906009016040519081900381209060008051602061474983398151915290600090a4601080546001600160a01b0319166001600160a01b0385161790555b600f546001600160a01b03838116911614611c3d576001600160a01b038216611bd65760405162461bcd60e51b815260206004820152602f60248201527f5265644b6e69676874546f6b656e3a20546865206d61726b6574696e6757616c60448201526e06c65742063616e6e6f74206265203608c1b6064820152608401610a8f565b600f80546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b039182169291851691016040519081900381209060008051602061474983398151915290600090a4600f80546001600160a01b0319166001600160a01b0384161790555b6011546001600160a01b03828116911614611d23576001600160a01b038116611cbe5760405162461bcd60e51b815260206004820152602d60248201527f5265644b6e69676874546f6b656e3a20546865206275794261636b57616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610a8f565b6011546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d016040519081900381209060008051602061474983398151915290600090a4601180546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b03163314611d535760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b03821660009081526026602052604090205481151560ff909116151503611d935760405162461bcd60e51b8152600401610a8f9061447c565b6001600160a01b038216600081815260266020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610d54565b6000546001600160a01b03163314611e155760405162461bcd60e51b8152600401610a8f90614447565b611e2460178686868686612351565b6040516e6c61756e636832466565732d42757960881b8152600f01610db5565b6000546001600160a01b03163314611e6e5760405162461bcd60e51b8152600401610a8f90614447565b611e7d60208686868686612351565b6040516b62617365466565732d42757960a01b8152600c01610db5565b6000610e273384610f98856040518060600160405280602581526020016147b1602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190612dfd565b6000610e27338484612758565b6000546001600160a01b03163314611f205760405162461bcd60e51b8152600401610a8f90614447565b600c548103611fa35760405162461bcd60e51b815260206004820152604360248201527f5265644b6e69676874546f6b656e3a2043616e6e6f7420757064617465206d6960448201527f6e696d756d546f6b656e734265666f72655377617020746f2073616d652076616064820152626c756560e81b608482015260a401610a8f565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146120005760405162461bcd60e51b8152600401610a8f90614447565b61200f60208686868686612eb9565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01610db5565b6000546001600160a01b031633146120575760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b03821660009081526024602052604090205481151560ff9091161515036120975760405162461bcd60e51b8152600401610a8f9061447c565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610d54565b6000546001600160a01b031633146121195760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610d54565b6000546001600160a01b0316331461219b5760405162461bcd60e51b8152600401610a8f90614447565b6001600160a01b0381166122005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a8f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122855760405162461bcd60e51b8152600401610a8f90614447565b612294601a8686868686612eb9565b6040516f1b185d5b98da0cd199595ccb54d95b1b60821b8152601001610db5565b6000546001600160a01b031633146122df5760405162461bcd60e51b8152600401610a8f90614447565b6122ee60178686868686612eb9565b6040516f1b185d5b98da0c9199595ccb54d95b1b60821b8152601001610db5565b600061110b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131b9565b600286015460ff8681169116146123d257604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020614791833981519152916123b89160481b906145c9565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461246657604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020614791833981519152916124459160481b906145c9565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b90920416146124f8576040516a6465764665654f6e42757960a81b8152600b0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020614791833981519152916124d59160481b906145c9565b60405180910390a460028601805460ff60201b1916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612591576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b909204821692918616916000805160206147918339815191529161256b9160481b906145c9565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b909204161461262c576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020614791833981519152916126049160481b906145c9565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b6001600160a01b0383166126965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a8f565b6001600160a01b0382166126f75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a8f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166127bc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a8f565b6001600160a01b03821661281e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a8f565b600081116128805760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a8f565b61288983611645565b8111156128f25760405162461bcd60e51b815260206004820152603160248201527f5265644b6e69676874546f6b656e3a2043616e6e6f74207472616e73666572206044820152706d6f7265207468616e2062616c616e636560781b6064820152608401610a8f565b6001600160a01b03838116600090815260296020908152604080832054938616835280832054815163193b4edb60e11b8152915160ff95861695909116939230926332769db692600480830193928290030181865afa158015612959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297d919061458d565b6001600160a01b03871660009081526023602052604090205490915060ff161580156129c257506001600160a01b03851660009081526023602052604090205460ff16155b15612c185760075460ff16612a305760405162461bcd60e51b815260206004820152602e60248201527f5265644b6e69676874546f6b656e3a2054726164696e6720697320637572726560448201526d373a363c903234b9b0b13632b21760911b6064820152608401610a8f565b6001600160a01b03851660009081526028602052604090205460ff1615612a695760405162461bcd60e51b8152600401610a8f906145e0565b6001600160a01b03861660009081526028602052604090205460ff1615612aa25760405162461bcd60e51b8152600401610a8f906145e0565b6001600160a01b03851660009081526026602052604090205460ff16158015612ae457506001600160a01b03861660009081526026602052604090205460ff16155b15612b6157600a54841115612b615760405162461bcd60e51b815260206004820152603860248201527f5265644b6e69676874546f6b656e3a205472616e7366657220616d6f756e742060448201527f6578636565647320746865206d61785478416d6f756e742e00000000000000006064820152608401610a8f565b6001600160a01b03851660009081526025602052604090205460ff16612c185760095484612b8e87611645565b612b989190614575565b1115612c185760405162461bcd60e51b815260206004820152604360248201527f5265644b6e69676874546f6b656e3a2045787065637465642077616c6c65742060448201527f616d6f756e74206578636565647320746865206d617857616c6c6574416d6f75606482015262373a1760e91b608482015260a401610a8f565b612c238383836131e7565b6000600c54612c3130611645565b600754911115915060ff168015612c455750805b8015612c545750600b5460ff16155b8015612c6b5750602b54600160281b900460ff1615155b8015612c8f57506001600160a01b03861660009081526029602052604090205460ff165b8015612ca95750600e546001600160a01b03888116911614155b8015612cc35750600e546001600160a01b03878116911614155b8015612cdd57506010546001600160a01b03888116911614155b8015612cf757506010546001600160a01b03878116911614155b8015612d115750600f546001600160a01b03888116911614155b8015612d2b5750600f546001600160a01b03878116911614155b8015612d4557506011546001600160a01b03888116911614155b8015612d5f57506011546001600160a01b03878116911614155b15612d8457600b805460ff19166001179055612d796137ba565b600b805460ff191690555b600b5460009060ff16158015612d9c575060075460ff165b6001600160a01b03891660009081526024602052604090205490915060ff1680612dde57506001600160a01b03871660009081526024602052604090205460ff165b15612de7575060005b612df388888884613a8c565b5050505050505050565b60008184841115612e215760405162461bcd60e51b8152600401610a8f9190614225565b506000612e2e8486614505565b95945050505050565b6000806000612e44613c5d565b9092509050612e53828261230f565b9250505090565b600080612e678385614575565b90508381101561110b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a8f565b600286015460ff8681166101009092041614612f4a57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff6101009092048216929189169160008051602061479183398151915291612f2b9160481b906145c9565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612fe357604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff63010000009092048216929188169160008051602061479183398151915291612fc09160481b906145c9565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614613078576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020614791833981519152916130539160481b906145c9565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614613113576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020614791833981519152916130ec9160481b906145c9565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b909204161461262c576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020614791833981519152916131879160481b906145c9565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b600081836131da5760405162461bcd60e51b8152600401610a8f9190614225565b506000612e2e8486614561565b6000601354436131f79190614505565b60075490915060009060ff161580156132135750601254600854115b61321d5742613221565b6008545b90506000601254826132339190614505565b602b805464ffffffffff191690559050851561347657602254602b805460ff80841661ffff1990921691909117610100600160201b8086048416919091029190911763ffff000019166201000080860484160263ff000000191617600160301b850483166301000000021760ff60201b1916600160401b9094049190911602919091179055831561347657601154600160a01b900460ff1680156132e25750601454600160b81b900460ff1683105b1561335b57601654602b805460ff80841661ffff1990921691909117610100600160201b8086048416919091029190911763ffff000019166201000080860484160263ff000000191617600160301b850483166301000000021760ff60201b1916600160401b9094049190911602919091179055613476565b601154600160a01b900460ff16801561337657506018548111155b801561338d5750601454600160b81b900460ff1683115b1561340657601954602b805460ff80841661ffff1990921691909117610100600160201b8086048416919091029190911763ffff000019166201000080860484160263ff000000191617600160301b850483166301000000021760ff60201b1916600160401b9094049190911602919091179055613476565b601c54602b805460ff80841661ffff1990921691909117610100600160201b8086048416919091029190911763ffff000019166201000080860484160263ff000000191617600160301b850483166301000000021760ff60201b1916600160401b90940491909116029190911790555b84156136c557602254602b805461010080840460ff90811661ffff1990931692909217600160281b85048316919091021763ffff0000191663010000008085048316620100000263ff000000191691909117600160381b85048316919091021760ff60201b1916600160481b90930416600160201b0291909117905583156136c557601154600160a01b900460ff16801561351c5750601454600160b81b900460ff1683105b1561359c57601654602b805461010080840460ff90811661ffff1990931692909217600160281b85048316919091021763ffff0000191663010000008085048316620100000263ff000000191691909117600160381b85048316919091021760ff60201b1916600160481b90930416600160201b029190911790556136c5565b601154600160a01b900460ff1680156135b757506018548111155b80156135ce5750601454600160b81b900460ff1683115b1561364e57601954602b805461010080840460ff90811661ffff1990931692909217600160281b85048316919091021763ffff0000191663010000008085048316620100000263ff000000191691909117600160381b85048316919091021760ff60201b1916600160481b90930416600160201b029190911790556136c5565b601c54602b805461010080840460ff90811661ffff1990931692909217600160281b85048316919091021763ffff0000191663010000008085048316620100000263ff000000191691909117600160381b85048316919091021760ff60201b1916600160481b90930416600160201b029190911790555b602b5460ff600160201b82048116916301000000810482169161010082048116916136f99162010000820481169116614622565b6137039190614622565b61370d9190614622565b6137179190614622565b602b805460ff928316600160281b90810265ff0000000000198316811793849055604080519186169386169390931781526201000084048516602082015261010084048516818401526301000000840485166060820152600160201b840485166080820152920490921660a082015290517f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29181900360c00190a1505050505050565b60006137c530611645565b602b54909150479060ff600160281b82048116918181169162010000820481169161010081048216916301000000909104166000600286613806878b6145aa565b6138109190614561565b61381a9190614561565b90506000613828828a614505565b905061383381613e0e565b600061383f8947614505565b602b549091506000906138579060029060ff16614647565b602b5461386e9190600160281b900460ff16614669565b602b5460ff9182169250600091600291849161388b9116866145aa565b6138959190614561565b61389f9190614561565b602b5490915060009083906138bc90610100900460ff16866145aa565b6138c69190614561565b602b5490915060009084906138e5906301000000900460ff16876145aa565b6138ef9190614561565b90506000816138fe8486614575565b6139089190614575565b6139129087614505565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561394d573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613988573d6000803e3d6000fd5b506011546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156139c3573d6000803e3d6000fd5b508715613a16576139d48885613f60565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050602b805460ff98891663010000000263ff000000199a8a16610100029a909a1663ff00ff00199b8a16620100000262ff00ff199e8b16600160281b029e909e1665ff0000ff00ff19909216919091179b9098169a909a179a909a179790971694909417949094179095555050505050505050565b6000806000613a9b8585614014565b925092509250600080600080613aba898787613ab5612e37565b6140de565b6001600160a01b038f166000908152602760205260409020549397509195509350915060ff1615613b23576001600160a01b038b16600090815260036020526040902054613b09908a90614505565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a1660009081526027602052604090205460ff1615613b82576001600160a01b038a16600090815260036020526040902054613b68908890614575565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054613ba6908590614505565b6001600160a01b03808d1660009081526002602052604080822093909355908c1681522054613bd6908490614575565b6001600160a01b038b16600090815260026020526040902055613bf98186614136565b613c03828761419b565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051613c4891815260200190565b60405180910390a35050505050505050505050565b60055460009081906d31412717f0c2f24c6d1fc0000000825b602a54811015613dc6578260026000602a8481548110613c9857613c986144d9565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613d0357508160036000602a8481548110613cdc57613cdc6144d9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613d24575050600554936d31412717f0c2f24c6d1fc00000009350915050565b60026000602a8381548110613d3b57613d3b6144d9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613d6a9084614505565b925060036000602a8381548110613d8357613d836144d9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613db29083614505565b915080613dbe81614532565b915050613c76565b506d31412717f0c2f24c6d1fc0000000600554613de39190614561565b821015613e05575050600554926d31412717f0c2f24c6d1fc000000092509050565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613e4357613e436144d9565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec0919061468c565b81600181518110613ed357613ed36144d9565b6001600160a01b039283166020918202929092010152600154613ef99130911684612634565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790613f329085906000908690309042906004016146a9565b600060405180830381600087803b158015613f4c57600080fd5b505af115801561262c573d6000803e3d6000fd5b600154613f789030906001600160a01b031684612634565b600154600e5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613fe8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061400d919061471a565b5050505050565b60008060008361402c575083915060009050806140d7565b602b5460009060649061404990600160201b900460ff16886145aa565b6140539190614561565b602b5490915060009060649060ff6301000000820481169162010000810482169161408691610100810482169116614622565b6140909190614622565b61409a9190614622565b6140a79060ff16896145aa565b6140b19190614561565b905060006140bf8284614575565b6140c99089614505565b955091935091506140d79050565b9250925092565b6000808080806140ee868a6145aa565b905060006140fc878a6145aa565b9050600061410a888a6145aa565b905060006141188284614575565b6141229085614505565b939c939b5091995097509095505050505050565b3060009081526027602052604090205460ff161561417357306000908152600360205260408120805483929061416d908490614575565b90915550505b3060009081526002602052604081208054849290614192908490614575565b90915550505050565b81600560008282546141ad9190614505565b9250508190555080600660008282546141929190614575565b6001600160a01b03811681146141db57600080fd5b50565b80151581146141db57600080fd5b600080604083850312156141ff57600080fd5b823561420a816141c6565b9150602083013561421a816141de565b809150509250929050565b600060208083528351808285015260005b8181101561425257858101830151858201604001528201614236565b81811115614264576000604083870101525b50601f01601f1916929092016040019392505050565b803560ff8116811461428b57600080fd5b919050565b600080600080600060a086880312156142a857600080fd5b6142b18661427a565b94506142bf6020870161427a565b93506142cd6040870161427a565b92506142db6060870161427a565b91506142e96080870161427a565b90509295509295909350565b6000806040838503121561430857600080fd5b8235614313816141c6565b946020939093013593505050565b60006020828403121561433357600080fd5b5035919050565b60008060006060848603121561434f57600080fd5b833561435a816141c6565b9250602084013561436a816141c6565b929592945050506040919091013590565b6000806040838503121561438e57600080fd5b82359150602083013561421a816141de565b6000602082840312156143b257600080fd5b813561110b816141c6565b600080600080608085870312156143d357600080fd5b84356143de816141c6565b935060208501356143ee816141c6565b925060408501356143fe816141c6565b9150606085013561440e816141c6565b939692955090935050565b6000806040838503121561442c57600080fd5b8235614437816141c6565b9150602083013561421a816141c6565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603a908201527f5265644b6e69676874546f6b656e3a204163636f756e7420697320616c72656160408201527f6479207468652076616c7565206f6620276578636c7564656427000000000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015614517576145176144ef565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201614544576145446144ef565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826145705761457061454b565b500490565b60008219821115614588576145886144ef565b500190565b60006020828403121561459f57600080fd5b815161110b816141de565b60008160001904831182151516156145c4576145c46144ef565b500290565b68ffffffffffffffffff1991909116815260200190565b60208082526022908201527f5265644b6e69676874546f6b656e3a204163636f756e7420697320626c6f636b604082015261195960f21b606082015260800190565b600060ff821660ff84168060ff0382111561463f5761463f6144ef565b019392505050565b600060ff83168061465a5761465a61454b565b8060ff84160491505092915050565b600060ff821660ff841680821015614683576146836144ef565b90039392505050565b60006020828403121561469e57600080fd5b815161110b816141c6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146f95784516001600160a01b0316835293830193918301916001016146d4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561472f57600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b8643d65851e9b5ef12d9c2773980f59bffd796145290105a400a38be25dcccf64736f6c634300080d0033

Deployed Bytecode Sourcemap

7780:30959:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15120:169;;;;;;;;;;;;;:::i;:::-;;22252:834;;;;;;;;;;-1:-1:-1;22252:834:0;;;;;:::i;:::-;;:::i;8472:28::-;;;;;;;;;;-1:-1:-1;8472:28:0;;;;;;;;;;;825:14:1;;818:22;800:41;;788:2;773:18;8472:28:0;;;;;;;;23741:76;;;;;;;;;;-1:-1:-1;23807:5:0;;;;;;;;;;;;-1:-1:-1;;;23807:5:0;;;;23741:76;;;;;;;:::i;20833:428::-;;;;;;;;;;-1:-1:-1;20833:428:0;;;;;:::i;:::-;;:::i;13821:146::-;;;;;;;;;;-1:-1:-1;13821:146:0;;;;;:::i;:::-;;:::i;15492:79::-;;;;;;;;;;;;;:::i;24280:80::-;;;;;;;;;;-1:-1:-1;24345:10:0;;24280:80;;;2550:25:1;;;2538:2;2523:18;24280:80:0;2404:177:1;7888:30:0;;;;;;;;;;-1:-1:-1;7888:30:0;;;;-1:-1:-1;;;;;7888:30:0;;;;;;-1:-1:-1;;;;;2765:32:1;;;2747:51;;2735:2;2720:18;7888:30:0;2586:218:1;23990:88:0;;;;;;;;;;-1:-1:-1;8359:24:0;23990:88;;9068:28;;;;;;;;;;-1:-1:-1;9068:28:0;;;;-1:-1:-1;;;;;9068:28:0;;;21980:269;;;;;;;;;;-1:-1:-1;21980:269:0;;;;;:::i;:::-;;:::i;13970:292::-;;;;;;;;;;-1:-1:-1;13970:292:0;;;;;:::i;:::-;;:::i;21714:263::-;;;;;;;;;;-1:-1:-1;21714:263:0;;;;;:::i;:::-;;:::i;25471:245::-;;;;;;;;;;-1:-1:-1;25471:245:0;;;;;:::i;:::-;;:::i;23903:84::-;;;;;;;;;;-1:-1:-1;23903:84:0;;8099:2;3805:36:1;;3793:2;3778:18;23903:84:0;3663:184:1;24502:501:0;;;;;;;;;;;;;:::i;15574:122::-;;;;;;;;;;;;;:::i;15292:197::-;;;;;;;;;;;;;:::i;14265:202::-;;;;;;;;;;-1:-1:-1;14265:202:0;;;;;:::i;:::-;;:::i;25719:486::-;;;;;;;;;;-1:-1:-1;25719:486:0;;;;;:::i;:::-;;:::i;7922:38::-;;;;;;;;;;;;;;;17608:218;;;;;;;;;;-1:-1:-1;17608:218:0;;;;;:::i;:::-;;:::i;23404:319::-;;;;;;;;;;;;;:::i;24081:196::-;;;;;;;;;;-1:-1:-1;24081:196:0;;;;;:::i;:::-;;:::i;7412:133::-;;;;;;;;;;;;;:::i;9006:30::-;;;;;;;;;;-1:-1:-1;9006:30:0;;;;-1:-1:-1;;;;;9006:30:0;;;16509:326;;;;;;;;;;-1:-1:-1;16509:326:0;;;;;:::i;:::-;;:::i;17187:418::-;;;;;;;;;;-1:-1:-1;17187:418:0;;;;;:::i;:::-;;:::i;17829:1201::-;;;;;;;;;;-1:-1:-1;17829:1201:0;;;;;:::i;:::-;;:::i;16838:343::-;;;;;;;;;;-1:-1:-1;16838:343:0;;;;;:::i;:::-;;:::i;19935:429::-;;;;;;;;;;-1:-1:-1;19935:429:0;;;;;:::i;:::-;;:::i;8694:51::-;;;;;;;;;;;;;;;;7228:70;;;;;;;;;;-1:-1:-1;7266:7:0;7287:6;-1:-1:-1;;;;;7287:6:0;7228:70;;9040:24;;;;;;;;;;-1:-1:-1;9040:24:0;;;;-1:-1:-1;;;;;9040:24:0;;;23820:80;;;;;;;;;;-1:-1:-1;23888:7:0;;;;;;;;;;;;-1:-1:-1;;;23888:7:0;;;;23820:80;;19051:421;;;;;;;;;;-1:-1:-1;19051:421:0;;;;;:::i;:::-;;:::i;14470:253::-;;;;;;;;;;-1:-1:-1;14470:253:0;;;;;:::i;:::-;;:::i;13664:154::-;;;;;;;;;;-1:-1:-1;13664:154:0;;;;;:::i;:::-;;:::i;8593:54::-;;;;;;;;;;;;;;;;23089:312;;;;;;;;;;-1:-1:-1;23089:312:0;;;;;:::i;:::-;;:::i;19475:437::-;;;;;;;;;;-1:-1:-1;19475:437:0;;;;;:::i;:::-;;:::i;10508:58::-;;;;;;;;;;-1:-1:-1;10508:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16214:289;;;;;;;;;;-1:-1:-1;16214:289:0;;;;;:::i;:::-;;:::i;25009:225::-;;;;;;;;;;-1:-1:-1;25115:23:0;;;;;;;25140;;;;;;-1:-1:-1;;;25165:17:0;;;;;-1:-1:-1;;;25184:21:0;;;;;-1:-1:-1;;;25207:21:0;;;;25009:225;;;;5353:25:1;;;5409:2;5394:18;;5387:34;;;;5437:18;;;5430:34;;;;5495:2;5480:18;;5473:34;5538:3;5523:19;;5516:35;5340:3;5325:19;25009:225:0;5094:463:1;8825:64:0;;;;;;;;;;;;;;;;16009:202;;;;;;;;;;-1:-1:-1;16009:202:0;;;;;:::i;:::-;;:::i;8969:30::-;;;;;;;;;;-1:-1:-1;8969:30:0;;;;-1:-1:-1;;;;;8969:30:0;;;24363:136;;;;;;;;;;-1:-1:-1;24363:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;24467:18:0;;;24446:7;24467:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24363:136;7550:223;;;;;;;;;;-1:-1:-1;7550:223:0;;;;;:::i;:::-;;:::i;21264:447::-;;;;;;;;;;-1:-1:-1;21264:447:0;;;;;:::i;:::-;;:::i;20367:446::-;;;;;;;;;;-1:-1:-1;20367:446:0;;;;;:::i;:::-;;:::i;25237:231::-;;;;;;;;;;-1:-1:-1;25344:24:0;;;;;;;;;25370;;;;;;-1:-1:-1;;;25396:18:0;;;;;-1:-1:-1;;;25416:22:0;;;;;-1:-1:-1;;;25440:22:0;;;;25237:231;;15120:169;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;;;;;;;;;15097:15;15162:21:::1;:33:::0;15221:12:::1;15200:18;:33:::0;15238:16:::1;:23:::0;;-1:-1:-1;;15238:23:0::1;15257:4;15238:23;::::0;;15266:11:::1;:18:::0;;-1:-1:-1;;;;15266:18:0::1;-1:-1:-1::0;;;15266:18:0::1;::::0;;15120:169::o;22252:834::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22344:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;22336:116:::1;;;;-1:-1:-1::0;;;22336:116:0::1;;;;;;;:::i;:::-;22460:8;22457:570;;;-1:-1:-1::0;;;;;22479:16:0;::::1;22498:1;22479:16:::0;;;:7:::1;:16;::::0;;;;;:20;22476:95:::1;;-1:-1:-1::0;;;;;22547:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22527:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22508:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22476:95:::1;-1:-1:-1::0;;;;;22576:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;22576:44:0::1;::::0;::::1;;;::::0;;22626:22:::1;:36:::0;;-1:-1:-1;22626:36:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22626:36:0::1;::::0;;::::1;::::0;;22457:570:::1;;;22685:9;22680:342;22704:22;:29:::0;22700:33;::::1;22680:342;;;22780:7;-1:-1:-1::0;;;;;22751:36:0::1;:22;22774:1;22751:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22751:25:0::1;:36:::0;22747:269:::1;;22825:22;22848:29:::0;;:33:::1;::::0;22880:1:::1;::::0;22848:33:::1;:::i;:::-;22825:57;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22797:22:::1;:25:::0;;-1:-1:-1;;;;;22825:57:0;;::::1;::::0;22820:1;;22797:25;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:85:::0;;-1:-1:-1;;;;;;22797:85:0::1;-1:-1:-1::0;;;;;22797:85:0;;::::1;;::::0;;22890:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22918:24:::1;:33:::0;;;;:41;;-1:-1:-1;;22918:41:0::1;::::0;;22967:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22967:28:0;;;;;-1:-1:-1;;;;;;22967:28:0::1;::::0;;;;;23003:5:::1;;22747:269;22735:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22680:342;;;;22457:570;23063:7;-1:-1:-1::0;;;;;23036:45:0::1;;23072:8;23036:45;;;;825:14:1::0;818:22;800:41;;788:2;773:18;;660:187;23036:45:0::1;;;;;;;;22252:834:::0;;:::o;20833:428::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;21006:122:::1;21029:8;21039:18;21059;21079:12;21093:16;21111;21006:22;:122::i;:::-;21138:118;::::0;-1:-1:-1;;;7611:30:1;;7666:2;7657:12;21138:118:0::1;;::::0;;;;;::::1;::::0;;7949:4:1;7937:17;;;7919:36;;7991:17;;;7986:2;7971:18;;7964:45;8045:17;;;8025:18;;;8018:45;8099:17;;;8094:2;8079:18;;8072:45;8154:17;;8148:3;8133:19;;8126:46;21138:118:0;;;;::::1;::::0;;;;;7906:3:1;21138:118:0;;::::1;20833:428:::0;;;;;:::o;13821:146::-;13896:4;13907:39;6687:10;13930:7;13939:6;13907:8;:39::i;:::-;-1:-1:-1;13958:4:0;13821:146;;;;;:::o;15492:79::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;15543:16:::1;:23:::0;;-1:-1:-1;;15543:23:0::1;15562:4;15543:23;::::0;;15492:79::o;21980:269::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;22075:11:::1;;22063:8;:23:::0;22055:91:::1;;;::::0;-1:-1:-1;;;22055:91:0;;8385:2:1;22055:91:0::1;::::0;::::1;8367:21:1::0;8424:2;8404:18;;;8397:30;8463:34;8443:18;;;8436:62;8534:25;8514:18;;;8507:53;8577:19;;22055:91:0::1;8183:419:1::0;22055:91:0::1;22199:11;::::0;22162:49:::1;::::0;22189:8;;22162:49:::1;::::0;;;::::1;22222:11;:22:::0;21980:269::o;13970:292::-;14069:4;14080:36;14090:6;14098:9;14109:6;14080:9;:36::i;:::-;14121:120;14130:6;6687:10;14152:88;14190:6;14152:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14152:19:0;;;;;;:11;:19;;;;;;;;6687:10;14152:33;;;;;;;;;;:37;:88::i;:::-;14121:8;:120::i;:::-;-1:-1:-1;14253:4:0;13970:292;;;;;:::o;21714:263::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;21804:15:::1;;21792:8;:27:::0;21784:99:::1;;;::::0;-1:-1:-1;;;21784:99:0;;8809:2:1;21784:99:0::1;::::0;::::1;8791:21:1::0;8848:2;8828:18;;;8821:30;8887:34;8867:18;;;8860:62;8958:29;8938:18;;;8931:57;9005:19;;21784:99:0::1;8607:423:1::0;21784:99:0::1;21925:15;::::0;21893:48:::1;::::0;21915:8;;21893:48:::1;::::0;;;::::1;21946:15;:26:::0;21714:263::o;25471:245::-;25537:7;25570;;25559;:18;;25551:89;;;;-1:-1:-1;;;25551:89:0;;9237:2:1;25551:89:0;;;9219:21:1;9276:2;9256:18;;;9249:30;9315:34;9295:18;;;9288:62;9386:28;9366:18;;;9359:56;9432:19;;25551:89:0;9035:422:1;25551:89:0;25645:19;25668:10;:8;:10::i;:::-;25645:33;-1:-1:-1;25690:21:0;25645:33;25690:7;:21;:::i;:::-;25683:28;25471:245;-1:-1:-1;;;25471:245:0:o;24502:501::-;24586:16;;24547:4;;;;24586:16;;24585:17;:68;;;;;24632:21;;24606:23;;:47;24585:68;:107;;15097:15;24585:107;;;24657:23;;24585:107;24772:21;;24748;;24724;;24558:134;;-1:-1:-1;24697:23:0;;24724:45;;24748:21;24724:45;:::i;:::-;:69;;;;:::i;:::-;24801:11;;24697:96;;-1:-1:-1;;;;24801:11:0;;;;:143;;;;;24862:15;24837:21;;24818:16;:40;;;;:::i;:::-;24817:60;:125;;;-1:-1:-1;24919:8:0;:23;24897:18;;-1:-1:-1;;;24919:23:0;;;;;;24882:33;;:12;:33;:::i;:::-;24881:61;24817:125;24798:201;;;24959:4;24952:11;;;;24502:501;:::o;24798:201::-;24988:5;24981:12;;;;24502:501;:::o;15574:122::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;15627:16:::1;:24:::0;;-1:-1:-1;;15627:24:0::1;::::0;;15097:15;15656:23:::1;:35:::0;15574:122::o;15292:197::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;15348:4:::1;-1:-1:-1::0;;;;;15348:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15340:63;;;::::0;-1:-1:-1;;;15340:63:0;;10304:2:1;15340:63:0::1;::::0;::::1;10286:21:1::0;10343:2;10323:18;;;10316:30;10382:34;10362:18;;;10355:62;-1:-1:-1;;;10433:18:1;;;10426:31;10474:19;;15340:63:0::1;10102:397:1::0;15340:63:0::1;15432:1;15408:21;:25:::0;;;15438:18:::1;:22:::0;15465:11:::1;:19:::0;;-1:-1:-1;;;;15465:19:0::1;::::0;;15292:197::o;14265:202::-;6687:10;14355:4;14395:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14395:34:0;;;;;;;;;;14355:4;;14365:81;;14387:7;;14395:50;;14434:10;14395:38;:50::i;25719:486::-;25812:7;8359:24;25834:7;:18;;25826:78;;;;-1:-1:-1;;;25826:78:0;;10706:2:1;25826:78:0;;;10688:21:1;10745:2;10725:18;;;10718:30;10784:34;10764:18;;;10757:62;-1:-1:-1;;;10835:18:1;;;10828:45;10890:19;;25826:78:0;10504:411:1;25826:78:0;25909:19;25931:10;:8;:10::i;:::-;25909:32;-1:-1:-1;25946:15:0;25965:21;25909:32;25965:7;:21;:::i;:::-;25946:40;;25996:17;25991:210;;26028:7;-1:-1:-1;26021:14:0;;-1:-1:-1;26021:14:0;25991:210;26087:9;;26056:17;;26105:11;;26099:3;;26077:19;;-1:-1:-1;;;26087:9:0;;;;26077:7;:19;:::i;:::-;:25;;;;:::i;:::-;:39;;;;:::i;:::-;26056:60;-1:-1:-1;26122:23:0;26148:19;26056:60;26148:7;:19;:::i;:::-;26122:45;-1:-1:-1;26173:22:0;;-1:-1:-1;;;;26173:22:0;17608:218;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17681:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;17673:70;;;::::0;-1:-1:-1;;;17673:70:0;;11295:2:1;17673:70:0::1;::::0;::::1;11277:21:1::0;11334:2;11314:18;;;11307:30;11373:34;11353:18;;;11346:62;-1:-1:-1;;;11424:18:1;;;11417:36;11470:19;;17673:70:0::1;11093:402:1::0;17673:70:0::1;-1:-1:-1::0;;;;;17748:19:0;::::1;17770:5;17748:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;17748:27:0::1;::::0;;17785:36;17770:5;;17748:19;17785:36:::1;::::0;17770:5;;17785:36:::1;17608:218:::0;:::o;23404:319::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;23488:1:::1;23464:21;:25;23456:92;;;::::0;-1:-1:-1;;;23456:92:0;;11702:2:1;23456:92:0::1;::::0;::::1;11684:21:1::0;11741:2;11721:18;;;11714:30;11780:34;11760:18;;;11753:62;-1:-1:-1;;;11831:18:1;;;11824:52;11893:19;;23456:92:0::1;11500:418:1::0;23456:92:0::1;23576:21;23559:14;23628:7;7266::::0;7287:6;-1:-1:-1;;;;;7287:6:0;;7228:70;23628:7:::1;-1:-1:-1::0;;;;;23620:21:0::1;23650:6;23620:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23602:59;;;23670:7;23666:53;;;23689:24;::::0;2550:25:1;;;23689:24:0::1;::::0;2538:2:1;2523:18;23689:24:0::1;;;;;;;23666:53;23451:272;;23404:319::o:0;24081:196::-;-1:-1:-1;;;;;24165:33:0;;24147:7;24165:33;;;:24;:33;;;;;;;;24161:62;;;-1:-1:-1;;;;;;24207:16:0;;;;;:7;:16;;;;;;;24081:196::o;24161:62::-;-1:-1:-1;;;;;24255:16:0;;;;;;:7;:16;;;;;;24235:37;;:19;:37::i;7412:133::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;7513:1:::1;7497:6:::0;;7476:40:::1;::::0;-1:-1:-1;;;;;7497:6:0;;::::1;::::0;7476:40:::1;::::0;7513:1;;7476:40:::1;7538:1;7521:19:::0;;-1:-1:-1;;;;;;7521:19:0::1;::::0;;7412:133::o;16509:326::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16608:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;16600:121:::1;;;;-1:-1:-1::0;;;16600:121:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16726:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;16726:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16785:45;;800:41:1;;;16785:45:0::1;::::0;773:18:1;16785:45:0::1;660:187:1::0;17187:418:0;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17300:19:0;::::1;17250:24;17300:19:::0;;;:10:::1;:19;::::0;;;;;15097:15;;17300:19:::1;;17299:20;17291:75;;;::::0;-1:-1:-1;;;17291:75:0;;12335:2:1;17291:75:0::1;::::0;::::1;12317:21:1::0;12374:2;12354:18;;;12347:30;12413:34;12393:18;;;12386:62;-1:-1:-1;;;12464:18:1;;;12457:40;12514:19;;17291:75:0::1;12133:406:1::0;17291:75:0::1;17375:11;::::0;-1:-1:-1;;;17375:11:0;::::1;;;17371:154;;;10123:6;17422:21;;17403:16;:40;;;;:::i;:::-;17402:62;17394:125;;;::::0;-1:-1:-1;;;17394:125:0;;12746:2:1;17394:125:0::1;::::0;::::1;12728:21:1::0;12785:2;12765:18;;;12758:30;12824:34;12804:18;;;12797:62;-1:-1:-1;;;12875:18:1;;;12868:48;12933:19;;17394:125:0::1;12544:414:1::0;17394:125:0::1;-1:-1:-1::0;;;;;17529:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;17529:26:0::1;17551:4;17529:26:::0;;::::1;::::0;;;17565:35;;17551:4;;17529:19;17565:35:::1;::::0;::::1;17245:360;17187:418:::0;:::o;17829:1201::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;17981:15:::1;::::0;-1:-1:-1;;;;;17981:37:0;;::::1;:15:::0;::::1;:37;17978:276;;-1:-1:-1::0;;;;;18043:32:0;::::1;18035:92;;;::::0;-1:-1:-1;;;18035:92:0;;13165:2:1;18035:92:0::1;::::0;::::1;13147:21:1::0;13204:2;13184:18;;;13177:30;13243:34;13223:18;;;13216:62;-1:-1:-1;;;13294:18:1;;;13287:45;13349:19;;18035:92:0::1;12963:411:1::0;18035:92:0::1;18190:15;::::0;18138:68:::1;::::0;-1:-1:-1;;;13581:30:1;;-1:-1:-1;;;;;18190:15:0;;::::1;::::0;18138:68;::::1;::::0;13636:2:1;13627:12;18138:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18138:68:0;;;::::1;18212:15;:36:::0;;-1:-1:-1;;;;;;18212:36:0::1;-1:-1:-1::0;;;;;18212:36:0;::::1;;::::0;;17978:276:::1;18261:9;::::0;-1:-1:-1;;;;;18261:25:0;;::::1;:9:::0;::::1;:25;18258:222;;-1:-1:-1::0;;;;;18311:26:0;::::1;18303:80;;;::::0;-1:-1:-1;;;18303:80:0;;13852:2:1;18303:80:0::1;::::0;::::1;13834:21:1::0;13891:2;13871:18;;;13864:30;13930:34;13910:18;;;13903:62;-1:-1:-1;;;13981:18:1;;;13974:39;14030:19;;18303:80:0::1;13650:405:1::0;18303:80:0::1;18434:9;::::0;18394:50:::1;::::0;-1:-1:-1;;;14262:24:1;;-1:-1:-1;;;;;18434:9:0;;::::1;::::0;18394:50;::::1;::::0;14311:1:1;14302:11;18394:50:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18394:50:0;;;::::1;18450:9;:24:::0;;-1:-1:-1;;;;;;18450:24:0::1;-1:-1:-1::0;;;;;18450:24:0;::::1;;::::0;;18258:222:::1;18487:15;::::0;-1:-1:-1;;;;;18487:37:0;;::::1;:15:::0;::::1;:37;18484:276;;-1:-1:-1::0;;;;;18549:32:0;::::1;18541:92;;;::::0;-1:-1:-1;;;18541:92:0;;14526:2:1;18541:92:0::1;::::0;::::1;14508:21:1::0;14565:2;14545:18;;;14538:30;14604:34;14584:18;;;14577:62;-1:-1:-1;;;14655:18:1;;;14648:45;14710:19;;18541:92:0::1;14324:411:1::0;18541:92:0::1;18696:15;::::0;;18644:68:::1;::::0;-1:-1:-1;;;14942:30:1;;-1:-1:-1;;;;;18696:15:0;;::::1;::::0;18644:68;;::::1;::::0;14988:12:1;18644:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18644:68:0;;;::::1;18718:15;:36:::0;;-1:-1:-1;;;;;;18718:36:0::1;-1:-1:-1::0;;;;;18718:36:0;::::1;;::::0;;18484:276:::1;18767:13;::::0;-1:-1:-1;;;;;18767:34:0;;::::1;:13:::0;::::1;:34;18764:262;;-1:-1:-1::0;;;;;18826:31:0;::::1;18818:89;;;::::0;-1:-1:-1;;;18818:89:0;;15213:2:1;18818:89:0::1;::::0;::::1;15195:21:1::0;15252:2;15232:18;;;15225:30;15291:34;15271:18;;;15264:62;-1:-1:-1;;;15342:18:1;;;15335:43;15395:19;;18818:89:0::1;15011:409:1::0;18818:89:0::1;18967:13;::::0;18918:63:::1;::::0;-1:-1:-1;;;15627:28:1;;-1:-1:-1;;;;;18967:13:0;;::::1;::::0;18918:63;::::1;::::0;15680:2:1;15671:12;18918:63:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18918:63:0;;;::::1;18987:13;:33:::0;;-1:-1:-1;;;;;;18987:33:0::1;-1:-1:-1::0;;;;;18987:33:0;::::1;;::::0;;18764:262:::1;17829:1201:::0;;;;:::o;16838:343::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16942:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;16934:126:::1;;;;-1:-1:-1::0;;;16934:126:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17065:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;17065:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17129:47;;800:41:1;;;17129:47:0::1;::::0;773:18:1;17129:47:0::1;660:187:1::0;19935:429:0;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;20109:122:::1;20132:8;20142:18;20162;20182:12;20196:16;20214;20109:22;:122::i;:::-;20241:118;::::0;-1:-1:-1;;;15896:30:1;;15951:2;15942:12;20241:118:0::1;15694:266:1::0;19051:421:0;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;19223:119:::1;19246:5;19253:18;19273;19293:12;19307:16;19325;19223:22;:119::i;:::-;19352:115;::::0;-1:-1:-1;;;16167:27:1;;16219:2;16210:12;19352:115:0::1;15965:263:1::0;14470:253:0;14565:4;14576:126;6687:10;14598:7;14606:95;14645:15;14606:95;;;;;;;;;;;;;;;;;6687:10;14606:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14606:34:0;;;;;;;;;;;;:38;:95::i;13664:154::-;13744:4;13755:42;6687:10;13779:9;13790:6;13755:9;:42::i;23089:312::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;23187:23:::1;;23175:8;:35:::0;23167:115:::1;;;::::0;-1:-1:-1;;;23167:115:0;;16435:2:1;23167:115:0::1;::::0;::::1;16417:21:1::0;16474:2;16454:18;;;16447:30;16513:34;16493:18;;;16486:62;16584:34;16564:18;;;16557:62;-1:-1:-1;;;16635:19:1;;;16628:34;16679:19;;23167:115:0::1;16233:471:1::0;23167:115:0::1;23333:23;::::0;23292:65:::1;::::0;23323:8;;23292:65:::1;::::0;;;::::1;23362:23;:34:::0;23089:312::o;19475:437::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;19651:125:::1;19675:5;19682:19;19703;19724:13;19739:17;19758;19651:23;:125::i;:::-;19786:121;::::0;-1:-1:-1;;;16911:28:1;;16964:2;16955:12;19786:121:0::1;16709:264:1::0;16214:289:0;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16303:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;16295:110:::1;;;;-1:-1:-1::0;;;16295:110:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16410:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;16410:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16458:40;;800:41:1;;;16458:40:0::1;::::0;773:18:1;16458:40:0::1;660:187:1::0;16009:202:0;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16098:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;16098:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16156:50;;800:41:1;;;16156:50:0::1;::::0;773:18:1;16156:50:0::1;660:187:1::0;7550:223:0;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7633:22:0;::::1;7625:73;;;::::0;-1:-1:-1;;;7625:73:0;;17180:2:1;7625:73:0::1;::::0;::::1;17162:21:1::0;17219:2;17199:18;;;17192:30;17258:34;17238:18;;;17231:62;-1:-1:-1;;;17309:18:1;;;17302:36;17355:19;;7625:73:0::1;16978:402:1::0;7625:73:0::1;7729:6;::::0;;7708:38:::1;::::0;-1:-1:-1;;;;;7708:38:0;;::::1;::::0;7729:6;::::1;::::0;7708:38:::1;::::0;::::1;7751:6;:17:::0;;-1:-1:-1;;;;;;7751:17:0::1;-1:-1:-1::0;;;;;7751:17:0;;;::::1;::::0;;;::::1;::::0;;7550:223::o;21264:447::-;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;21444:128:::1;21468:8;21478:19;21499;21520:13;21535:17;21554;21444:23;:128::i;:::-;21582:124;::::0;-1:-1:-1;;;17587:31:1;;17643:2;17634:12;21582:124:0::1;17385:267:1::0;20367:446:0;7337:6;;-1:-1:-1;;;;;7337:6:0;6687:10;7337:22;7329:67;;;;-1:-1:-1;;;7329:67:0;;;;;;;:::i;:::-;20546:128:::1;20570:8;20580:19;20601;20622:13;20637:17;20656;20546:23;:128::i;:::-;20684:124;::::0;-1:-1:-1;;;17859:31:1;;17915:2;17906:12;20684:124:0::1;17657:267:1::0;2702:123:0;2760:7;2781:39;2785:1;2788;2781:39;;;;;;;;;;;;;;;;;:3;:39::i;35145:1249::-;35367:21;;;;:43;;;;:21;;:43;35363:215;;35423:101;;-1:-1:-1;;;18131:32:1;;18188:2;18179:12;35423:101:0;;;;;;;;35465:21;;;;35509:14;;35423:101;;35465:21;;;;;35423:101;;;;-1:-1:-1;;;;;;;;;;;35423:101:0;;;35509:14;;;35423:101;:::i;:::-;;;;;;;;35530:21;;;:42;;-1:-1:-1;;35530:42:0;;;;;;;35363:215;35586:21;;;;:43;;;;:21;;;;;:43;35582:215;;35642:101;;-1:-1:-1;;;18618:32:1;;18675:2;18666:12;35642:101:0;;;;;;;;35684:21;;;;35728:14;;35642:101;;35684:21;;;;;;;;35642:101;;;;-1:-1:-1;;;;;;;;;;;35642:101:0;;;35728:14;;;35642:101;:::i;:::-;;;;;;;;35749:21;;;:42;;-1:-1:-1;;35749:42:0;;;;;;;;;35582:215;35811:15;;;;:31;;;;-1:-1:-1;;;35811:15:0;;;;:31;35807:173;;35855:83;;-1:-1:-1;;;18891:26:1;;18942:2;18933:12;35855:83:0;;;;;;;;35891:15;;;;35923:14;;35855:83;;35891:15;-1:-1:-1;;;35891:15:0;;;;;;35855:83;;;;-1:-1:-1;;;;;;;;;;;35855:83:0;;;35923:14;;;35855:83;:::i;:::-;;;;;;;;35944:15;;;:30;;-1:-1:-1;;;;35944:30:0;-1:-1:-1;;;35944:30:0;;;;;;;35807:173;35988:19;;;;:39;;;;-1:-1:-1;;;35988:19:0;;;;:39;35984:201;;36040:95;;-1:-1:-1;;;19158:30:1;;19213:2;19204:12;36040:95:0;;;;;;;;36080:19;;;;36120:14;;36040:95;;36080:19;-1:-1:-1;;;36080:19:0;;;;;;36040:95;;;;-1:-1:-1;;;;;;;;;;;36040:95:0;;;36120:14;;;36040:95;:::i;:::-;;;;;;;;36141:19;;;:38;;-1:-1:-1;;36141:38:0;-1:-1:-1;;;36141:38:0;;;;;;;35984:201;36193:19;;;;:39;;;;-1:-1:-1;;;36193:19:0;;;;:39;36189:201;;36245:95;;-1:-1:-1;;;19429:30:1;;19484:2;19475:12;36245:95:0;;;;;;;;36285:19;;;;36325:14;;36245:95;;36285:19;-1:-1:-1;;;36285:19:0;;;;;;36245:95;;;;-1:-1:-1;;;;;;;;;;;36245:95:0;;;36325:14;;;36245:95;:::i;:::-;;;;;;;;36346:19;;;:38;;-1:-1:-1;;36346:38:0;-1:-1:-1;;;36346:38:0;;;;;;;36189:201;35145:1249;;;;;;:::o;14726:306::-;-1:-1:-1;;;;;14811:19:0;;14803:68;;;;-1:-1:-1;;;14803:68:0;;19700:2:1;14803:68:0;;;19682:21:1;19739:2;19719:18;;;19712:30;19778:34;19758:18;;;19751:62;-1:-1:-1;;;19829:18:1;;;19822:34;19873:19;;14803:68:0;19498:400:1;14803:68:0;-1:-1:-1;;;;;14884:21:0;;14876:68;;;;-1:-1:-1;;;14876:68:0;;20105:2:1;14876:68:0;;;20087:21:1;20144:2;20124:18;;;20117:30;20183:34;20163:18;;;20156:62;-1:-1:-1;;;20234:18:1;;;20227:32;20276:19;;14876:68:0;19903:398:1;14876:68:0;-1:-1:-1;;;;;14949:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14995:32;;2550:25:1;;;14995:32:0;;2523:18:1;14995:32:0;;;;;;;14726:306;;;:::o;26220:1988::-;-1:-1:-1;;;;;26313:18:0;;26305:68;;;;-1:-1:-1;;;26305:68:0;;20508:2:1;26305:68:0;;;20490:21:1;20547:2;20527:18;;;20520:30;20586:34;20566:18;;;20559:62;-1:-1:-1;;;20637:18:1;;;20630:35;20682:19;;26305:68:0;20306:401:1;26305:68:0;-1:-1:-1;;;;;26386:16:0;;26378:64;;;;-1:-1:-1;;;26378:64:0;;20914:2:1;26378:64:0;;;20896:21:1;20953:2;20933:18;;;20926:30;20992:34;20972:18;;;20965:62;-1:-1:-1;;;21043:18:1;;;21036:33;21086:19;;26378:64:0;20712:399:1;26378:64:0;26464:1;26455:6;:10;26447:64;;;;-1:-1:-1;;;26447:64:0;;21318:2:1;26447:64:0;;;21300:21:1;21357:2;21337:18;;;21330:30;21396:34;21376:18;;;21369:62;-1:-1:-1;;;21447:18:1;;;21440:39;21496:19;;26447:64:0;21116:405:1;26447:64:0;26534:15;26544:4;26534:9;:15::i;:::-;26524:6;:25;;26516:87;;;;-1:-1:-1;;;26516:87:0;;21728:2:1;26516:87:0;;;21710:21:1;21767:2;21747:18;;;21740:30;21806:34;21786:18;;;21779:62;-1:-1:-1;;;21857:18:1;;;21850:47;21914:19;;26516:87:0;21526:413:1;26516:87:0;-1:-1:-1;;;;;26629:31:0;;;26610:16;26629:31;;;:25;:31;;;;;;;;;26683:29;;;;;;;;;26742:17;;-1:-1:-1;;;26742:17:0;;;;26629:31;;;;;26683:29;;;;26610:16;26742:4;;:15;;:17;;;;;26629:31;26742:17;;;;;:4;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26770:35:0;;;;;;:29;:35;;;;;;26723:36;;-1:-1:-1;26770:35:0;;26769:36;:74;;;;-1:-1:-1;;;;;;26810:33:0;;;;;;:29;:33;;;;;;;;26809:34;26769:74;26766:715;;;26859:16;;;;26851:75;;;;-1:-1:-1;;;26851:75:0;;22146:2:1;26851:75:0;;;22128:21:1;22185:2;22165:18;;;22158:30;22224:34;22204:18;;;22197:62;-1:-1:-1;;;22275:18:1;;;22268:44;22329:19;;26851:75:0;21944:410:1;26851:75:0;-1:-1:-1;;;;;26941:14:0;;;;;;:10;:14;;;;;;;;26940:15;26932:62;;;;-1:-1:-1;;;26932:62:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27009:16:0;;;;;;:10;:16;;;;;;;;27008:17;27000:64;;;;-1:-1:-1;;;27000:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27084:38:0;;;;;;:34;:38;;;;;;;;27083:39;:84;;;;-1:-1:-1;;;;;;27127:40:0;;;;;;:34;:40;;;;;;;;27126:41;27083:84;27079:215;;;27206:11;;27196:6;:21;;27188:90;;;;-1:-1:-1;;;27188:90:0;;22964:2:1;27188:90:0;;;22946:21:1;23003:2;22983:18;;;22976:30;23042:34;23022:18;;;23015:62;23113:26;23093:18;;;23086:54;23157:19;;27188:90:0;22762:420:1;27188:90:0;-1:-1:-1;;;;;27304:33:0;;;;;;:29;:33;;;;;;;;27299:177;;27382:15;;27371:6;27355:13;27365:2;27355:9;:13::i;:::-;:22;;;;:::i;:::-;27354:43;;27346:123;;;;-1:-1:-1;;;27346:123:0;;23389:2:1;27346:123:0;;;23371:21:1;23428:2;23408:18;;;23401:30;23467:34;23447:18;;;23440:62;23538:34;23518:18;;;23511:62;-1:-1:-1;;;23589:19:1;;;23582:34;23633:19;;27346:123:0;23187:471:1;27346:123:0;27487:50;27500:11;27513:10;27525:11;27487:12;:50::i;:::-;27542:12;27585:23;;27557:24;27575:4;27557:9;:24::i;:::-;27624:16;;27557:51;-1:-1:-1;27557:51:0;;-1:-1:-1;27624:16:0;;:31;;;;;27648:7;27624:31;:49;;;;-1:-1:-1;27664:9:0;;;;27663:10;27624:49;:70;;;;-1:-1:-1;27681:9:0;;-1:-1:-1;;;27681:9:0;;;;:13;;27624:70;:107;;;;-1:-1:-1;;;;;;27702:29:0;;;;;;:25;:29;;;;;;;;27624:107;:138;;;;-1:-1:-1;27747:15:0;;-1:-1:-1;;;;;27739:23:0;;;27747:15;;27739:23;;27624:138;:163;;;;-1:-1:-1;27772:15:0;;-1:-1:-1;;;;;27766:21:0;;;27772:15;;27766:21;;27624:163;:188;;;;-1:-1:-1;27803:9:0;;-1:-1:-1;;;;;27795:17:0;;;27803:9;;27795:17;;27624:188;:207;;;;-1:-1:-1;27822:9:0;;-1:-1:-1;;;;;27816:15:0;;;27822:9;;27816:15;;27624:207;:238;;;;-1:-1:-1;27847:15:0;;-1:-1:-1;;;;;27839:23:0;;;27847:15;;27839:23;;27624:238;:263;;;;-1:-1:-1;27872:15:0;;-1:-1:-1;;;;;27866:21:0;;;27872:15;;27866:21;;27624:263;:292;;;;-1:-1:-1;27903:13:0;;-1:-1:-1;;;;;27895:21:0;;;27903:13;;27895:21;;27624:292;:315;;;;-1:-1:-1;27926:13:0;;-1:-1:-1;;;;;27920:19:0;;;27926:13;;27920:19;;27624:315;27615:404;;;27951:9;:16;;-1:-1:-1;;27951:16:0;27963:4;27951:16;;;27973:17;:15;:17::i;:::-;27996:9;:17;;-1:-1:-1;;27996:17:0;;;27615:404;28041:9;;28025:12;;28041:9;;28040:10;:30;;;;-1:-1:-1;28054:16:0;;;;28040:30;-1:-1:-1;;;;;28080:24:0;;;;;;:18;:24;;;;;;28025:45;;-1:-1:-1;28080:24:0;;;:50;;-1:-1:-1;;;;;;28108:22:0;;;;;;:18;:22;;;;;;;;28080:50;28077:81;;;-1:-1:-1;28147:5:0;28077:81;28162:41;28177:4;28183:2;28187:6;28195:7;28162:14;:41::i;:::-;26300:1908;;;;;26220:1988;;;:::o;2110:171::-;2196:7;2226:12;2218:6;;;;2210:29;;;;-1:-1:-1;;;2210:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2244:9:0;2256:5;2260:1;2256;:5;:::i;:::-;2244:17;2110:171;-1:-1:-1;;;;;2110:171:0:o;29905:149::-;29947:7;29962:15;29979;29998:19;:17;:19::i;:::-;29961:56;;-1:-1:-1;29961:56:0;-1:-1:-1;30029:20:0;29961:56;;30029:11;:20::i;:::-;30022:27;;;;29905:149;:::o;1813:160::-;1871:7;;1897:5;1901:1;1897;:5;:::i;:::-;1885:17;;1920:1;1915;:6;;1907:46;;;;-1:-1:-1;;;1907:46:0;;23865:2:1;1907:46:0;;;23847:21:1;23904:2;23884:18;;;23877:30;23943:29;23923:18;;;23916:57;23990:18;;1907:46:0;23663:351:1;33852:1290:0;34080:22;;;;:45;;;;:22;;;;;:45;34076:222;;34138:104;;-1:-1:-1;;;24221:33:1;;24279:2;24270:12;34138:104:0;;;;;;;;34181:22;;;;34227:14;;34138:104;;34181:22;;;;;;;;34138:104;;;;-1:-1:-1;;;;;;;;;;;34138:104:0;;;34227:14;;;34138:104;:::i;:::-;;;;;;;;34248:22;;;:44;;-1:-1:-1;;34248:44:0;;;;;;;;;34076:222;34306:22;;;;:45;;;;:22;;;;;:45;34302:222;;34364:104;;-1:-1:-1;;;24495:33:1;;24553:2;24544:12;34364:104:0;;;;;;;;34407:22;;;;34453:14;;34364:104;;34407:22;;;;;;;;34364:104;;;;-1:-1:-1;;;;;;;;;;;34364:104:0;;;34453:14;;;34364:104;:::i;:::-;;;;;;;;34474:22;;;:44;;-1:-1:-1;;34474:44:0;;;;;;;;;34302:222;34538:16;;;;:33;;;;-1:-1:-1;;;34538:16:0;;;;:33;34534:180;;34584:86;;-1:-1:-1;;;24769:27:1;;24821:2;24812:12;34584:86:0;;;;;;;;34621:16;;;;34655:14;;34584:86;;34621:16;-1:-1:-1;;;34621:16:0;;;;;;34584:86;;;;-1:-1:-1;;;;;;;;;;;34584:86:0;;;34655:14;;;34584:86;:::i;:::-;;;;;;;;34676:16;;;:32;;-1:-1:-1;;34676:32:0;-1:-1:-1;;;34676:32:0;;;;;;;34534:180;34722:20;;;;:41;;;;-1:-1:-1;;;34722:20:0;;;;:41;34718:208;;34776:98;;-1:-1:-1;;;25037:31:1;;25093:2;25084:12;34776:98:0;;;;;;;;34817:20;;;;34859:14;;34776:98;;34817:20;-1:-1:-1;;;34817:20:0;;;;;;34776:98;;;;-1:-1:-1;;;;;;;;;;;34776:98:0;;;34859:14;;;34776:98;:::i;:::-;;;;;;;;34880:20;;;:40;;-1:-1:-1;;34880:40:0;-1:-1:-1;;;34880:40:0;;;;;;;34718:208;34934:20;;;;:41;;;;-1:-1:-1;;;34934:20:0;;;;:41;34930:208;;34988:98;;-1:-1:-1;;;25309:31:1;;25365:2;25356:12;34988:98:0;;;;;;;;35029:20;;;;35071:14;;34988:98;;35029:20;-1:-1:-1;;;35029:20:0;;;;;;34988:98;;;;-1:-1:-1;;;;;;;;;;;34988:98:0;;;35071:14;;;34988:98;:::i;:::-;;;;;;;;35092:20;;;:40;;;;;-1:-1:-1;;;35092:40:0;-1:-1:-1;;35092:40:0;;;;;;33852:1290;;;;;;:::o;2830:251::-;2916:7;2945:12;2938:5;2930:28;;;;-1:-1:-1;;;2930:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2963:9:0;2975:5;2979:1;2975;:5;:::i;30827:3022::-;30915:25;30958:18;;30943:12;:33;;;;:::i;:::-;31009:16;;30915:61;;-1:-1:-1;30981:24:0;;31009:16;;31008:17;:68;;;;;31055:21;;31029:23;;:47;31008:68;:107;;15097:15;31008:107;;;31080:23;;31008:107;30981:134;;31120:23;31165:21;;31146:16;:40;;;;:::i;:::-;31193:13;:17;;-1:-1:-1;;31273:15:0;;;31120:66;-1:-1:-1;31295:1172:0;;;;31334:23;;31318:13;:39;;31334:23;;;;-1:-1:-1;;31363:27:0;;;;;;;31334:23;-1:-1:-1;;;31373:17:0;;;;;31363:27;;;;;;;;-1:-1:-1;;31441:35:0;31412:23;;;;;;31396:39;-1:-1:-1;;31441:35:0;;-1:-1:-1;;;31455:21:0;;;;31441:35;;;-1:-1:-1;;;;31482:35:0;-1:-1:-1;;;31496:21:0;;;;;;;31482:35;;;;;;;31525:937;;;;31552:11;;-1:-1:-1;;;31552:11:0;;;;:58;;;;-1:-1:-1;31587:8:0;:23;-1:-1:-1;;;31587:23:0;;;;31567:43;;31552:58;31548:908;;;31636:26;;31620:13;:42;;31636:26;;;;-1:-1:-1;;31670:30:0;;;;;;;31636:26;-1:-1:-1;;;31680:20:0;;;;;31670:30;;;;;;;;-1:-1:-1;;31758:38:0;31724:26;;;;;;31708:42;-1:-1:-1;;31758:38:0;;-1:-1:-1;;;31772:24:0;;;;31758:38;;;-1:-1:-1;;;;31804:38:0;-1:-1:-1;;;31818:24:0;;;;;;;31804:38;;;;;;;31548:908;;;31865:11;;-1:-1:-1;;;31865:11:0;;;;:55;;;;-1:-1:-1;31899:21:0;;31880:40;;;31865:55;:102;;;;-1:-1:-1;31944:8:0;:23;-1:-1:-1;;;31944:23:0;;;;31924:43;;31865:102;31861:595;;;31993:26;;31977:13;:42;;31993:26;;;;-1:-1:-1;;32027:30:0;;;;;;;31993:26;-1:-1:-1;;;32037:20:0;;;;;32027:30;;;;;;;;-1:-1:-1;;32115:38:0;32081:26;;;;;;32065:42;-1:-1:-1;;32115:38:0;;-1:-1:-1;;;32129:24:0;;;;32115:38;;;-1:-1:-1;;;;32161:38:0;-1:-1:-1;;;32175:24:0;;;;;;;32161:38;;;;;;;31861:595;;;32242:26;;32226:13;:42;;32242:26;;;;-1:-1:-1;;32276:30:0;;;;;;;32242:26;-1:-1:-1;;;32286:20:0;;;;;32276:30;;;;;;;;-1:-1:-1;;32364:38:0;32330:26;;;;;;32314:42;-1:-1:-1;;32364:38:0;;-1:-1:-1;;;32378:24:0;;;;32364:38;;;-1:-1:-1;;;;32410:38:0;-1:-1:-1;;;32424:24:0;;;;;;;32410:38;;;;;;;31861:595;32475:10;32471:1191;;;32509:24;;32493:13;:40;;32509:24;;;;;;;;-1:-1:-1;;32539:28:0;;;;;;;-1:-1:-1;;;32549:18:0;;;;32539:28;;;;;-1:-1:-1;;32619:36:0;32589:24;;;;;;32573:40;;-1:-1:-1;;32619:36:0;;;;;-1:-1:-1;;;32633:22:0;;;;32619:36;;;;;-1:-1:-1;;;;32661:36:0;-1:-1:-1;;;32675:22:0;;;;-1:-1:-1;;;32661:36:0;;;;;;;32705:952;;;;32732:11;;-1:-1:-1;;;32732:11:0;;;;:58;;;;-1:-1:-1;32767:8:0;:23;-1:-1:-1;;;32767:23:0;;;;32747:43;;32732:58;32728:923;;;32816:27;;32800:13;:43;;32816:27;;;;;;;;-1:-1:-1;;32851:31:0;;;;;;;-1:-1:-1;;;32861:21:0;;;;32851:31;;;;;-1:-1:-1;;32941:39:0;32906:27;;;;;;32890:43;;-1:-1:-1;;32941:39:0;;;;;-1:-1:-1;;;32955:25:0;;;;32941:39;;;;;-1:-1:-1;;;;32988:39:0;-1:-1:-1;;;33002:25:0;;;;-1:-1:-1;;;32988:39:0;;;;;;;32728:923;;;33050:11;;-1:-1:-1;;;33050:11:0;;;;:55;;;;-1:-1:-1;33084:21:0;;33065:40;;;33050:55;:102;;;;-1:-1:-1;33129:8:0;:23;-1:-1:-1;;;33129:23:0;;;;33109:43;;33050:102;33046:605;;;33178:27;;33162:13;:43;;33178:27;;;;;;;;-1:-1:-1;;33213:31:0;;;;;;;-1:-1:-1;;;33223:21:0;;;;33213:31;;;;;-1:-1:-1;;33303:39:0;33268:27;;;;;;33252:43;;-1:-1:-1;;33303:39:0;;;;;-1:-1:-1;;;33317:25:0;;;;33303:39;;;;;-1:-1:-1;;;;33350:39:0;-1:-1:-1;;;33364:25:0;;;;-1:-1:-1;;;33350:39:0;;;;;;;33046:605;;;33432:27;;33416:13;:43;;33432:27;;;;;;;;-1:-1:-1;;33467:31:0;;;;;;;-1:-1:-1;;;33477:21:0;;;;33467:31;;;;;-1:-1:-1;;33557:39:0;33522:27;;;;;;33506:43;;-1:-1:-1;;33557:39:0;;;;;-1:-1:-1;;;33571:25:0;;;;33557:39;;;;;-1:-1:-1;;;;33604:39:0;-1:-1:-1;;;33618:25:0;;;;-1:-1:-1;;;33604:39:0;;;;;;;33046:605;33736:11;;;-1:-1:-1;;;33736:11:0;;;;;33722;;;;;;33736;33712:7;;;;;33680:29;;33696:13;;;;;;33680;:29;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:67;;;;:::i;:::-;33668:9;:79;;;;;;-1:-1:-1;;;33668:79:0;;;-1:-1:-1;;33668:79:0;;;;;;;;33757:87;;;33769:13;;;;;;;;;;25874:34:1;;33784:13:0;;;;;25939:2:1;25924:18;;25917:43;33668:79:0;33799:7;;;;25976:18:1;;;25969:43;33808:11:0;;;;;26043:2:1;26028:18;;26021:43;-1:-1:-1;;;33821:11:0;;;;26095:3:1;26080:19;;26073:44;33834:9:0;;;;;26148:3:1;26133:19;;26126:44;33757:87:0;;;;;;;25838:3:1;33757:87:0;;;30910:2939;;;30827:3022;;;:::o;36397:1577::-;36437:23;36463:24;36481:4;36463:9;:24::i;:::-;36570:9;;36437:50;;-1:-1:-1;36520:21:0;;36570:9;-1:-1:-1;;;36570:9:0;;;;;36616:13;;;;36666;;;;;;36570:9;36710:7;;;;;36753:11;;;;;36492:25;36666:13;36570:9;36797:31;36616:13;36437:50;36797:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;36771:73;-1:-1:-1;36849:26:0;36878:33;36771:73;36878:15;:33;:::i;:::-;36849:62;;36918:37;36936:18;36918:17;:37::i;:::-;36962:27;36992:41;37016:17;36992:21;:41;:::i;:::-;37073:13;;36962:71;;-1:-1:-1;37038:19:0;;37073:17;;37089:1;;37073:13;;:17;:::i;:::-;37060:9;;:31;;;-1:-1:-1;;;37060:9:0;;;;:31;:::i;:::-;37147:13;;37038:53;;;;;-1:-1:-1;37096:26:0;;37177:1;;37038:53;;37125:35;;37147:13;37125:19;:35;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;37228:7;;37096:82;;-1:-1:-1;37183:20:0;;37238:11;;37206:29;;37228:7;;;;;37206:19;:29;:::i;:::-;:43;;;;:::i;:::-;37303:11;;37183:66;;-1:-1:-1;37254:24:0;;37317:11;;37281:33;;37303:11;;;;;37281:19;:33;:::i;:::-;:47;;;;:::i;:::-;37254:74;-1:-1:-1;37333:26:0;37254:74;37385:33;37406:12;37385:18;:33;:::i;:::-;:52;;;;:::i;:::-;37362:76;;:19;:76;:::i;:::-;37453:15;;37445:53;;37333:105;;-1:-1:-1;;;;;;37453:15:0;;37445:53;;;;;37333:105;;37453:15;37445:53;37453:15;37445:53;37333:105;37453:15;37445:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37511:9:0;;37503:41;;-1:-1:-1;;;;;37511:9:0;;;;37503:41;;;;;37531:12;;37511:9;37503:41;37511:9;37503:41;37531:12;37511:9;37503:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37563:13:0;;37555:49;;-1:-1:-1;;;;;37563:13:0;;;;37555:49;;;;;37587:16;;37563:13;37555:49;37563:13;37555:49;37587:16;37563:13;37555:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37615:19:0;;37611:169;;37642:50;37656:15;37673:18;37642:13;:50::i;:::-;37703:71;;;26753:25:1;;;26809:2;26794:18;;26787:34;;;26837:18;;;26830:34;;;37703:71:0;;26741:2:1;26726:18;37703:71:0;;;;;;;37611:169;-1:-1:-1;;37784:9:0;:25;;;37940:29;;;;;-1:-1:-1;;37908:21:0;;;37784:25;37908:21;37940:29;;;;-1:-1:-1;;37864:33:0;;;;;-1:-1:-1;;37784:25:0;;;-1:-1:-1;;;37784:25:0;37864:33;;;;-1:-1:-1;;37864:33:0;;;;;;;37820;;;;37864;;;;;;;;37940:29;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;36397:1577:0:o;28211:762::-;28314:23;28338:12;28352:14;28370:29;28382:7;28391;28370:11;:29::i;:::-;28313:86;;;;;;28405:15;28422:23;28447:12;28461:14;28479:46;28491:7;28500:4;28506:6;28514:10;:8;:10::i;:::-;28479:11;:46::i;:::-;-1:-1:-1;;;;;28536:32:0;;;;;;:24;:32;;;;;;28404:121;;-1:-1:-1;28404:121:0;;-1:-1:-1;28404:121:0;-1:-1:-1;28404:121:0;-1:-1:-1;28536:32:0;;28532:93;;;-1:-1:-1;;;;;28594:15:0;;;;;;:7;:15;;;;;;:25;;28612:7;;28594:25;:::i;:::-;-1:-1:-1;;;;;28576:15:0;;;;;;:7;:15;;;;;:43;28532:93;-1:-1:-1;;;;;28633:35:0;;;;;;:24;:35;;;;;;;;28629:110;;;-1:-1:-1;;;;;28697:18:0;;;;;;:7;:18;;;;;;:36;;28718:15;;28697:36;:::i;:::-;-1:-1:-1;;;;;28676:18:0;;;;;;:7;:18;;;;;:57;28629:110;-1:-1:-1;;;;;28761:15:0;;;;;;:7;:15;;;;;;:25;;28779:7;;28761:25;:::i;:::-;-1:-1:-1;;;;;28743:15:0;;;;;;;:7;:15;;;;;;:43;;;;28812:18;;;;;;;:36;;28833:15;;28812:36;:::i;:::-;-1:-1:-1;;;;;28791:18:0;;;;;;:7;:18;;;;;:57;28853:33;28871:6;28879;28853:17;:33::i;:::-;28891:23;28903:4;28909;28891:11;:23::i;:::-;28941:9;-1:-1:-1;;;;;28924:44:0;28933:6;-1:-1:-1;;;;;28924:44:0;;28952:15;28924:44;;;;2550:25:1;;2538:2;2523:18;;2404:177;28924:44:0;;;;;;;;28308:665;;;;;;;28211:762;;;;:::o;30057:562::-;30149:7;;30108;;;;8359:24;30108:7;30191:331;30215:22;:29;30211:33;;30191:331;;;30304:7;30267;:34;30275:22;30298:1;30275:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30275:25:0;30267:34;;;;;;;;;;;;;:44;;:97;;;30357:7;30320;:34;30328:22;30351:1;30328:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30328:25:0;30320:34;;;;;;;;;;;;;:44;30267:97;30257:139;;;-1:-1:-1;;30379:7:0;;;8359:24;;-1:-1:-1;30057:562:0;-1:-1:-1;;30057:562:0:o;30257:139::-;30422:7;:34;30430:22;30453:1;30430:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30430:25:0;30422:34;;;;;;;;;;;;;30412:44;;:7;:44;:::i;:::-;30402:54;;30482:7;:34;30490:22;30513:1;30490:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30490:25:0;30482:34;;;;;;;;;;;;;30472:44;;:7;:44;:::i;:::-;30462:54;-1:-1:-1;30246:3:0;;;;:::i;:::-;;;;30191:331;;;;8359:24;30540:7;;:17;;;;:::i;:::-;30530:7;:27;30526:58;;;-1:-1:-1;;30567:7:0;;;8359:24;;-1:-1:-1;30057:562:0;-1:-1:-1;30057:562:0:o;30526:58::-;30597:7;;30606;;-1:-1:-1;30057:562:0;-1:-1:-1;30057:562:0:o;37977:411::-;38062:16;;;38076:1;38062:16;;;;;;;;38038:21;;38062:16;;;;;;;;;;-1:-1:-1;38062:16:0;38038:40;;38101:4;38083;38088:1;38083:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38083:23:0;;;:7;;;;;;;;;;:23;;;;38121:15;;:22;;;-1:-1:-1;;;38121:22:0;;;;:15;;;;;:20;;:22;;;;;38083:7;;38121:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38111:4;38116:1;38111:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38111:32:0;;;:7;;;;;;;;;:32;38180:15;;38148:62;;38165:4;;38180:15;38198:11;38148:8;:62::i;:::-;38215:15;;:168;;-1:-1:-1;;;38215:168:0;;-1:-1:-1;;;;;38215:15:0;;;;:66;;:168;;38286:11;;38215:15;;38336:4;;38353;;38363:15;;38215:168;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38391:345;38499:15;;38467:62;;38484:4;;-1:-1:-1;;;;;38499:15:0;38517:11;38467:8;:62::i;:::-;38534:15;;38688;;38534:194;;-1:-1:-1;;;38534:194:0;;38596:4;38534:194;;;28589:34:1;28639:18;;;28632:34;;;38534:15:0;28682:18:1;;;28675:34;;;28725:18;;;28718:34;-1:-1:-1;;;;;38688:15:0;;;28768:19:1;;;28761:44;38708:15:0;28821:19:1;;;28814:35;38534:15:0;;;:31;;38573:9;;28523:19:1;;38534:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38391:345;;:::o;29084:413::-;29158:7;29166;29174;29192;29187:306;;-1:-1:-1;29215:7:0;;-1:-1:-1;29224:1:0;;-1:-1:-1;29224:1:0;29207:22;;29187:306;29275:11;;29250:12;;29289:3;;29265:21;;-1:-1:-1;;;29275:11:0;;;;29265:7;:21;:::i;:::-;:27;;;;:::i;:::-;29368:11;;29250:42;;-1:-1:-1;29298:14:0;;29383:3;;29368:11;;;;;;;29352:13;;;;;;29326:23;;29368:11;29342:7;;;;;29326:13;:23;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;29315:65;;;;:7;:65;:::i;:::-;:71;;;;:::i;:::-;29298:88;-1:-1:-1;29392:23:0;29429:13;29298:88;29429:4;:13;:::i;:::-;29418:25;;:7;:25;:::i;:::-;29392:51;-1:-1:-1;29474:4:0;;-1:-1:-1;29480:6:0;-1:-1:-1;29449:38:0;;-1:-1:-1;29449:38:0;29187:306;29084:413;;;;;:::o;29500:402::-;29629:7;;;;;29688:21;29698:11;29688:7;:21;:::i;:::-;29670:39;-1:-1:-1;29714:12:0;29729:18;29736:11;29729:4;:18;:::i;:::-;29714:33;-1:-1:-1;29752:14:0;29769:20;29778:11;29769:6;:20;:::i;:::-;29752:37;-1:-1:-1;29794:23:0;29831:13;29752:37;29831:4;:13;:::i;:::-;29820:25;;:7;:25;:::i;:::-;29858:7;;;;-1:-1:-1;29884:4:0;;-1:-1:-1;29884:4:0;-1:-1:-1;29500:402:0;;-1:-1:-1;;;;;;29500:402:0:o;30622:202::-;30731:4;30698:39;;;;:24;:39;;;;;;;;30694:89;;;30761:4;30745:22;;;;:7;:22;;;;;:32;;30771:6;;30745:22;:32;;30771:6;;30745:32;:::i;:::-;;;;-1:-1:-1;;30694:89:0;30803:4;30787:22;;;;:7;:22;;;;;:32;;30813:6;;30787:22;:32;;30813:6;;30787:32;:::i;:::-;;;;-1:-1:-1;;;;30622:202:0:o;28976:105::-;29049:4;29038:7;;:15;;;;;;;:::i;:::-;;;;;;;;29072:4;29058: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:118::-;236:5;229:13;222:21;215:5;212:32;202:60;;258:1;255;248:12;273:382;338:6;346;399:2;387:9;378:7;374:23;370:32;367:52;;;415:1;412;405:12;367:52;454:9;441:23;473:31;498:5;473:31;:::i;:::-;523:5;-1:-1:-1;580:2:1;565:18;;552:32;593:30;552:32;593:30;:::i;:::-;642:7;632:17;;;273:382;;;;;:::o;852:597::-;964:4;993:2;1022;1011:9;1004:21;1054:6;1048:13;1097:6;1092:2;1081:9;1077:18;1070:34;1122:1;1132:140;1146:6;1143:1;1140:13;1132:140;;;1241:14;;;1237:23;;1231:30;1207:17;;;1226:2;1203:26;1196:66;1161:10;;1132:140;;;1290:6;1287:1;1284:13;1281:91;;;1360:1;1355:2;1346:6;1335:9;1331:22;1327:31;1320:42;1281:91;-1:-1:-1;1433:2:1;1412:15;-1:-1:-1;;1408:29:1;1393:45;;;;1440:2;1389:54;;852:597;-1:-1:-1;;;852:597:1:o;1454:156::-;1520:20;;1580:4;1569:16;;1559:27;;1549:55;;1600:1;1597;1590:12;1549:55;1454:156;;;:::o;1615:464::-;1700:6;1708;1716;1724;1732;1785:3;1773:9;1764:7;1760:23;1756:33;1753:53;;;1802:1;1799;1792:12;1753:53;1825:27;1842:9;1825:27;:::i;:::-;1815:37;;1871:36;1903:2;1892:9;1888:18;1871:36;:::i;:::-;1861:46;;1926:36;1958:2;1947:9;1943:18;1926:36;:::i;:::-;1916:46;;1981:36;2013:2;2002:9;1998:18;1981:36;:::i;:::-;1971:46;;2036:37;2068:3;2057:9;2053:19;2036:37;:::i;:::-;2026:47;;1615:464;;;;;;;;:::o;2084:315::-;2152:6;2160;2213:2;2201:9;2192:7;2188:23;2184:32;2181:52;;;2229:1;2226;2219:12;2181:52;2268:9;2255:23;2287:31;2312:5;2287:31;:::i;:::-;2337:5;2389:2;2374:18;;;;2361:32;;-1:-1:-1;;;2084:315:1:o;3017:180::-;3076:6;3129:2;3117:9;3108:7;3104:23;3100:32;3097:52;;;3145:1;3142;3135:12;3097:52;-1:-1:-1;3168:23:1;;3017:180;-1:-1:-1;3017:180:1:o;3202:456::-;3279:6;3287;3295;3348:2;3336:9;3327:7;3323:23;3319:32;3316:52;;;3364:1;3361;3354:12;3316:52;3403:9;3390:23;3422:31;3447:5;3422:31;:::i;:::-;3472:5;-1:-1:-1;3529:2:1;3514:18;;3501:32;3542:33;3501:32;3542:33;:::i;:::-;3202:456;;3594:7;;-1:-1:-1;;;3648:2:1;3633:18;;;;3620:32;;3202:456::o;3852:309::-;3917:6;3925;3978:2;3966:9;3957:7;3953:23;3949:32;3946:52;;;3994:1;3991;3984:12;3946:52;4030:9;4017:23;4007:33;;4090:2;4079:9;4075:18;4062:32;4103:28;4125:5;4103:28;:::i;4166:247::-;4225:6;4278:2;4266:9;4257:7;4253:23;4249:32;4246:52;;;4294:1;4291;4284:12;4246:52;4333:9;4320:23;4352:31;4377:5;4352:31;:::i;4418:671::-;4504:6;4512;4520;4528;4581:3;4569:9;4560:7;4556:23;4552:33;4549:53;;;4598:1;4595;4588:12;4549:53;4637:9;4624:23;4656:31;4681:5;4656:31;:::i;:::-;4706:5;-1:-1:-1;4763:2:1;4748:18;;4735:32;4776:33;4735:32;4776:33;:::i;:::-;4828:7;-1:-1:-1;4887:2:1;4872:18;;4859:32;4900:33;4859:32;4900:33;:::i;:::-;4952:7;-1:-1:-1;5011:2:1;4996:18;;4983:32;5024:33;4983:32;5024:33;:::i;:::-;4418:671;;;;-1:-1:-1;4418:671:1;;-1:-1:-1;;4418:671:1:o;5562:388::-;5630:6;5638;5691:2;5679:9;5670:7;5666:23;5662:32;5659:52;;;5707:1;5704;5697:12;5659:52;5746:9;5733:23;5765:31;5790:5;5765:31;:::i;:::-;5815:5;-1:-1:-1;5872:2:1;5857:18;;5844:32;5885:33;5844:32;5885:33;:::i;5955:356::-;6157:2;6139:21;;;6176:18;;;6169:30;6235:34;6230:2;6215:18;;6208:62;6302:2;6287:18;;5955:356::o;6316:422::-;6518:2;6500:21;;;6557:2;6537:18;;;6530:30;6596:34;6591:2;6576:18;;6569:62;6667:28;6662:2;6647:18;;6640:56;6728:3;6713:19;;6316:422::o;6743:127::-;6804:10;6799:3;6795:20;6792:1;6785:31;6835:4;6832:1;6825:15;6859:4;6856:1;6849:15;6875:127;6936:10;6931:3;6927:20;6924:1;6917:31;6967:4;6964:1;6957:15;6991:4;6988:1;6981:15;7007:125;7047:4;7075:1;7072;7069:8;7066:34;;;7080:18;;:::i;:::-;-1:-1:-1;7117:9:1;;7007:125::o;7137:127::-;7198:10;7193:3;7189:20;7186:1;7179:31;7229:4;7226:1;7219:15;7253:4;7250:1;7243:15;7269:135;7308:3;7329:17;;;7326:43;;7349:18;;:::i;:::-;-1:-1:-1;7396:1:1;7385:13;;7269:135::o;9462:127::-;9523:10;9518:3;9514:20;9511:1;9504:31;9554:4;9551:1;9544:15;9578:4;9575:1;9568:15;9594:120;9634:1;9660;9650:35;;9665:18;;:::i;:::-;-1:-1:-1;9699:9:1;;9594:120::o;9719:128::-;9759:3;9790:1;9786:6;9783:1;9780:13;9777:39;;;9796:18;;:::i;:::-;-1:-1:-1;9832:9:1;;9719:128::o;9852:245::-;9919:6;9972:2;9960:9;9951:7;9947:23;9943:32;9940:52;;;9988:1;9985;9978:12;9940:52;10020:9;10014:16;10039:28;10061:5;10039:28;:::i;10920:168::-;10960:7;11026:1;11022;11018:6;11014:14;11011:1;11008:21;11003:1;10996:9;10989:17;10985:45;10982:71;;;11033:18;;:::i;:::-;-1:-1:-1;11073:9:1;;10920:168::o;18202:209::-;-1:-1:-1;;18366:38:1;;;;18348:57;;18336:2;18321:18;;18202:209::o;22359:398::-;22561:2;22543:21;;;22600:2;22580:18;;;22573:30;22639:34;22634:2;22619:18;;22612:62;-1:-1:-1;;;22705:2:1;22690:18;;22683:32;22747:3;22732:19;;22359:398::o;25379:204::-;25417:3;25453:4;25450:1;25446:12;25485:4;25482:1;25478:12;25520:3;25514:4;25510:14;25505:3;25502:23;25499:49;;;25528:18;;:::i;:::-;25564:13;;25379:204;-1:-1:-1;;;25379:204:1:o;26181:165::-;26219:1;26253:4;26250:1;26246:12;26277:3;26267:37;;26284:18;;:::i;:::-;26336:3;26329:4;26326:1;26322:12;26318:22;26313:27;;;26181:165;;;;:::o;26351:195::-;26389:4;26426;26423:1;26419:12;26458:4;26455:1;26451:12;26483:3;26478;26475:12;26472:38;;;26490:18;;:::i;:::-;26527:13;;;26351:195;-1:-1:-1;;;26351:195:1:o;27007:251::-;27077:6;27130:2;27118:9;27109:7;27105:23;27101:32;27098:52;;;27146:1;27143;27136:12;27098:52;27178:9;27172:16;27197:31;27222:5;27197:31;:::i;27263:980::-;27525:4;27573:3;27562:9;27558:19;27604:6;27593:9;27586:25;27630:2;27668:6;27663:2;27652:9;27648:18;27641:34;27711:3;27706:2;27695:9;27691:18;27684:31;27735:6;27770;27764:13;27801:6;27793;27786:22;27839:3;27828:9;27824:19;27817:26;;27878:2;27870:6;27866:15;27852:29;;27899:1;27909:195;27923:6;27920:1;27917:13;27909:195;;;27988:13;;-1:-1:-1;;;;;27984:39:1;27972:52;;28079:15;;;;28044:12;;;;28020:1;27938:9;27909:195;;;-1:-1:-1;;;;;;;28160:32:1;;;;28155:2;28140:18;;28133:60;-1:-1:-1;;;28224:3:1;28209:19;28202:35;28121:3;27263:980;-1:-1:-1;;;27263:980:1:o;28860:306::-;28948:6;28956;28964;29017:2;29005:9;28996:7;28992:23;28988:32;28985:52;;;29033:1;29030;29023:12;28985:52;29062:9;29056:16;29046:26;;29112:2;29101:9;29097:18;29091:25;29081:35;;29156:2;29145:9;29141:18;29135:25;29125:35;;28860:306;;;;;:::o

Swarm Source

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