ETH Price: $3,461.32 (+2.17%)
Gas: 11 Gwei

Contract

0x55AE69B64bc955381482A2C5b8fAbF38531180D4
 

Overview

ETH Balance

1 wei

Eth Value

Less Than $0.01 (@ $3,461.32/ETH)

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve178623842023-08-07 10:12:59329 days ago1691403179IN
0x55AE69B6...8531180D4
0 ETH0.0004978320.07137941
Approve178623812023-08-07 10:12:23329 days ago1691403143IN
0x55AE69B6...8531180D4
0 ETH0.0004880119.72319999
Approve173451882023-05-26 18:56:59401 days ago1685127419IN
0x55AE69B6...8531180D4
0 ETH0.000863834.82678041
Approve169879482023-04-06 6:48:35452 days ago1680763715IN
0x55AE69B6...8531180D4
0 ETH0.0006158724.89068838
Approve168473242023-03-17 11:46:11472 days ago1679053571IN
0x55AE69B6...8531180D4
0 ETH0.0009434420.06169485
Approve167616142023-03-05 10:30:11484 days ago1678012211IN
0x55AE69B6...8531180D4
0 ETH0.0010831323.03216282
Approve167515322023-03-04 0:29:11485 days ago1677889751IN
0x55AE69B6...8531180D4
0 ETH0.0011618824.70671653
Approve167514882023-03-04 0:20:23485 days ago1677889223IN
0x55AE69B6...8531180D4
0 ETH0.001110523.74136727
Approve167204332023-02-27 15:30:35490 days ago1677511835IN
0x55AE69B6...8531180D4
0 ETH0.0008680535.08291728
Approve165943682023-02-09 23:07:11507 days ago1675984031IN
0x55AE69B6...8531180D4
0 ETH0.0022032346.85035626
Approve165873802023-02-08 23:40:47508 days ago1675899647IN
0x55AE69B6...8531180D4
0 ETH0.000711128.73946202
Approve165663142023-02-06 0:58:35511 days ago1675645115IN
0x55AE69B6...8531180D4
0 ETH0.0008326917.68415336
Approve165607282023-02-05 6:15:11512 days ago1675577711IN
0x55AE69B6...8531180D4
0 ETH0.0007910616.8
Transfer165582762023-02-04 22:02:59512 days ago1675548179IN
0x55AE69B6...8531180D4
0 ETH0.001719723.92798176
Approve165545282023-02-04 9:28:47513 days ago1675502927IN
0x55AE69B6...8531180D4
0 ETH0.0009281519.71145823
Approve165470292023-02-03 8:21:47514 days ago1675412507IN
0x55AE69B6...8531180D4
0 ETH0.0009349119.88040547
Approve165381302023-02-02 2:26:23515 days ago1675304783IN
0x55AE69B6...8531180D4
0 ETH0.0005111120.65675351
Approve165320972023-02-01 6:11:59516 days ago1675231919IN
0x55AE69B6...8531180D4
0 ETH0.0006920314.71576536
Approve165299222023-01-31 22:54:59516 days ago1675205699IN
0x55AE69B6...8531180D4
0 ETH0.0017022736.19779457
Approve165297112023-01-31 22:12:11516 days ago1675203131IN
0x55AE69B6...8531180D4
0 ETH0.0015745933.44004382
Approve165293072023-01-31 20:50:23516 days ago1675198223IN
0x55AE69B6...8531180D4
0 ETH0.001518732.29438965
Approve165228892023-01-30 23:20:59517 days ago1675120859IN
0x55AE69B6...8531180D4
0 ETH0.0007782116.52713182
Approve165225722023-01-30 22:17:35517 days ago1675117055IN
0x55AE69B6...8531180D4
0 ETH0.0011705224.89046552
Approve165225412023-01-30 22:11:23517 days ago1675116683IN
0x55AE69B6...8531180D4
0 ETH0.0012473726.52471782
Approve165225282023-01-30 22:08:47517 days ago1675116527IN
0x55AE69B6...8531180D4
0 ETH0.0007463430.16370846
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
168739272023-03-21 5:26:35468 days ago1679376395
0x55AE69B6...8531180D4
0.00061663 ETH
168739272023-03-21 5:26:35468 days ago1679376395
0x55AE69B6...8531180D4
0.0036998 ETH
168739272023-03-21 5:26:35468 days ago1679376395
0x55AE69B6...8531180D4
0.00431644 ETH
168729942023-03-21 2:17:23468 days ago1679365043
0x55AE69B6...8531180D4
0.00005783 ETH
168729942023-03-21 2:17:23468 days ago1679365043
0x55AE69B6...8531180D4
0.00034702 ETH
168729942023-03-21 2:17:23468 days ago1679365043
0x55AE69B6...8531180D4
0.00040486 ETH
167515362023-03-04 0:29:59485 days ago1677889799
0x55AE69B6...8531180D4
0.00012239 ETH
167515362023-03-04 0:29:59485 days ago1677889799
0x55AE69B6...8531180D4
0.00073436 ETH
167515362023-03-04 0:29:59485 days ago1677889799
0x55AE69B6...8531180D4
0.00085675 ETH
166524882023-02-18 2:13:35499 days ago1676686415
0x55AE69B6...8531180D4
0.00094603 ETH
166524882023-02-18 2:13:35499 days ago1676686415
0x55AE69B6...8531180D4
0.0056762 ETH
166524882023-02-18 2:13:35499 days ago1676686415
0x55AE69B6...8531180D4
0.00662224 ETH
166071122023-02-11 17:48:47505 days ago1676137727
0x55AE69B6...8531180D4
0.00050422 ETH
166071122023-02-11 17:48:47505 days ago1676137727
0x55AE69B6...8531180D4
0.00302533 ETH
166071122023-02-11 17:48:47505 days ago1676137727
0x55AE69B6...8531180D4
0.00352955 ETH
165943722023-02-09 23:07:59507 days ago1675984079
0x55AE69B6...8531180D4
0.00036564 ETH
165943722023-02-09 23:07:59507 days ago1675984079
0x55AE69B6...8531180D4
0.00219384 ETH
165943722023-02-09 23:07:59507 days ago1675984079
0x55AE69B6...8531180D4
0.00255948 ETH
165762672023-02-07 10:20:11510 days ago1675765211
0x55AE69B6...8531180D4
0.00013359 ETH
165762672023-02-07 10:20:11510 days ago1675765211
0x55AE69B6...8531180D4
0.00080155 ETH
165762672023-02-07 10:20:11510 days ago1675765211
0x55AE69B6...8531180D4
0.00093515 ETH
165663152023-02-06 0:58:47511 days ago1675645127
0x55AE69B6...8531180D4
0.00090915 ETH
165663152023-02-06 0:58:47511 days ago1675645127
0x55AE69B6...8531180D4
0.00545491 ETH
165663152023-02-06 0:58:47511 days ago1675645127
0x55AE69B6...8531180D4
0.00636406 ETH
165650112023-02-05 20:36:23511 days ago1675629383
0x55AE69B6...8531180D4
0.00023052 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OSA

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-24
*/

//SPDX-License-Identifier: MIT

/*

Be Disciplined. A New world order has been sanctioned.

Tg: http://t.me/osamuOfficial

Web: https://weareosamu.com

*/

pragma solidity 0.8.17;

interface IERC20 {
	function totalSupply() external view returns (uint256);
	function decimals() external view returns (uint8);
	function symbol() external view returns (string memory);
	function name() external view returns (string memory);
	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);
}

abstract contract Auth {
	address internal _owner;
	constructor(address creatorOwner) { _owner = creatorOwner; }
	modifier onlyOwner() { require(msg.sender == _owner, "Only contract _owner can call this function"); _; }
	function transferOwnership(address payable newOwner) external onlyOwner { _owner = newOwner; emit OwnershipTransferred(newOwner); }
	event OwnershipTransferred(address _owner);
}

interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); }
interface IUniswapV2Router02 {
	function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
	function WETH() external pure returns (address);
	function factory() external pure returns (address);
	function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract OSA is IERC20, Auth {
	uint8 private constant _decimals      = 9;
	uint256 private constant _totalSupply = 100_000_000 * (10**_decimals);
	string private constant _name         = "OSAMU";
	string private constant _symbol       = "OSA";

	uint8 private _buyTaxRate  = 99; //SNIPERS + BOTS GET REKT!
	uint8 private _sellTaxRate = 12;

	uint16 private _taxSharesMarketing   = 5;
	uint16 private _taxSharesDevelopment = 1;
	uint16 private _taxSharesBurn        = 0;
	uint16 private _taxSharesLP          = 0;
	uint16 private _totalTaxShares = _taxSharesMarketing + _taxSharesDevelopment + _taxSharesBurn + _taxSharesLP;

	address payable private _walletMarketing = payable(0x3C45B955D67214d97B80d3495B487fe90B39C21f); 
	address payable private _walletDevelopment = payable(0x10782D83EdE1D5B90ed0B3aC5d6d2Ee0a6a788E4); 

	uint256 private _maxTxAmount     = _totalSupply; 
	uint256 private _maxWalletAmount = _totalSupply;
	uint256 private _taxSwapMin = _totalSupply * 10 / 100000;
	uint256 private _taxSwapMax = _totalSupply * 85 / 100000;

	mapping (address => uint256) private _balances;
	mapping (address => mapping (address => uint256)) private _allowances;
	mapping (address => bool) private _noFees;
	mapping (address => bool) private _noLimits;

	address constant private _burnWallet = address(0);
	address private _lpOwner;

	address private constant _swapRouterAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //uniswap v2 router
	IUniswapV2Router02 private _primarySwapRouter = IUniswapV2Router02(_swapRouterAddress);
	address private _primaryLP;
	mapping (address => bool) private _isLP;

	bool private _tradingOpen;

	bool private _inTaxSwap = false;
	modifier lockTaxSwap { _inTaxSwap = true; _; _inTaxSwap = false; }

	event TokensAirdropped(uint256 totalWallets, uint256 totalTokens);
	event TokensBurned(address indexed burnedByWallet, uint256 tokenAmount);

	constructor() Auth(msg.sender) {
		_lpOwner = msg.sender;

		_balances[address(this)] =  80_000_000 * (10 ** _decimals);
		emit Transfer(address(0), address(this), _balances[address(this)]);

		_balances[_owner] = _totalSupply - _balances[address(this)];
		emit Transfer(address(0), _owner, _balances[_owner]);

		_noFees[_owner] = true;
		_noFees[address(this)] = true;
		_noFees[_swapRouterAddress] = true;
		_noFees[_walletMarketing] = true;
		_noFees[_walletDevelopment] = true;
		_noFees[_burnWallet] = true;
		_noLimits[_owner] = true;
		_noLimits[address(this)] = true;
		_noLimits[_swapRouterAddress] = true;
		_noLimits[_walletMarketing] = true;
		_noLimits[_walletDevelopment] = true;
		_noLimits[_burnWallet] = true;	
	}

	receive() external payable {}
	
	function totalSupply() external pure override returns (uint256) { return _totalSupply; }
	function decimals() external pure override returns (uint8) { return _decimals; }
	function symbol() external pure override returns (string memory) { return _symbol; }
	function name() external pure override returns (string memory) { return _name; }
	function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
	function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

	function approve(address spender, uint256 amount) public override returns (bool) {
		_allowances[msg.sender][spender] = amount;
		emit Approval(msg.sender, spender, amount);
		return true;
	}

	function transfer(address recipient, uint256 amount) external override returns (bool) {
		require(_checkTradingOpen(msg.sender), "Trading not open");
		return _transferFrom(msg.sender, recipient, amount);
	}

	function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
		require(_checkTradingOpen(sender), "Trading not open");
		if(_allowances[sender][msg.sender] != type(uint256).max){
			_allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
		}
		return _transferFrom(sender, recipient, amount);
	}

	function openTrading() external onlyOwner {
		require(!_tradingOpen, "trading already open");
		_openTrading();
	}

	function _approveRouter(uint256 _tokenAmount) internal {
		if ( _allowances[address(this)][_swapRouterAddress] < _tokenAmount ) {
			_allowances[address(this)][_swapRouterAddress] = type(uint256).max;
			emit Approval(address(this), _swapRouterAddress, type(uint256).max);
		}
	}

	function addInitialLiquidity() external onlyOwner lockTaxSwap {
		require(_primaryLP == address(0), "LP exists");
		require(address(this).balance>0, "No ETH in contract");
		require(_balances[address(this)]>0, "No tokens in contract");
		_primaryLP = IUniswapV2Factory(_primarySwapRouter.factory()).createPair(address(this), _primarySwapRouter.WETH());
		_addLiquidity(_balances[address(this)], address(this).balance, false);
		_isLP[_primaryLP] = true;
	}

	function _addLiquidity(uint256 _tokenAmount, uint256 _ethAmountWei, bool autoburn) internal {
		address lpTokenRecipient = _lpOwner;
		if ( autoburn ) { lpTokenRecipient = address(0); }
		_approveRouter(_tokenAmount);
		_primarySwapRouter.addLiquidityETH{value: _ethAmountWei} ( address(this), _tokenAmount, 0, 0, lpTokenRecipient, block.timestamp );
	}

	function _openTrading() internal {
		_maxTxAmount     = _totalSupply * 1 / 100; 
		_maxWalletAmount = _totalSupply * 1 / 100;
		_tradingOpen = true;
	}

	function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
		require(sender != address(0), "No transfers from Zero wallet");
		if (!_tradingOpen) { require(_noFees[sender] && _noLimits[sender], "Trading not open"); }
		if ( !_inTaxSwap && _isLP[recipient] ) { _swapTaxAndLiquify(); }
		
		if ( sender != address(this) && recipient != address(this) && sender != _owner ) { require(_checkLimits(sender, recipient, amount), "TX exceeds limits"); }
		uint256 _taxAmount = _calculateTax(sender, recipient, amount);
		uint256 _transferAmount = amount - _taxAmount;
		_balances[sender] = _balances[sender] - amount;
		if ( _taxAmount > 0 ) { _balances[address(this)] = _balances[address(this)] + _taxAmount; }
		_balances[recipient] = _balances[recipient] + _transferAmount;
		emit Transfer(sender, recipient, amount);
		return true;
	}

	function _checkLimits(address sender, address recipient, uint256 transferAmount) internal view returns (bool) {
		bool limitCheckPassed = true;
		if ( _tradingOpen && !_noLimits[sender] && !_noLimits[recipient] ) {
			if ( transferAmount > _maxTxAmount ) { limitCheckPassed = false; }
			else if ( !_isLP[recipient] && (_balances[recipient] + transferAmount > _maxWalletAmount) ) { limitCheckPassed = false; }
		}
		return limitCheckPassed;
	}

	function _checkTradingOpen(address sender) private view returns (bool){
		bool checkResult = false;
		if ( _tradingOpen ) { checkResult = true; } 
		else if (_noFees[sender] && _noLimits[sender]) { checkResult = true; } 

		return checkResult;
	}

	function _calculateTax(address sender, address recipient, uint256 amount) internal view returns (uint256) {
		uint256 taxAmount;
		if ( !_tradingOpen || _noFees[sender] || _noFees[recipient] ) { taxAmount = 0; }
		else if ( _isLP[sender] ) { taxAmount = amount * _buyTaxRate / 100; }
		else if ( _isLP[recipient] ) { taxAmount = amount * _sellTaxRate / 100; }
		return taxAmount;
	}


	function getExemptions(address wallet) external view returns (bool noFees, bool noLimits) {
		return ( _noFees[wallet], _noLimits[wallet] );
	}
	function setExemptions(address wallet, bool noFees, bool noLimits) external onlyOwner {
		if (noLimits || noFees) { require(!_isLP[wallet], "Cannot exempt LP"); }
		_noFees[ wallet ] = noFees;
		_noLimits[ wallet ] = noLimits;
	}
	function setExtraLP(address lpContractAddress, bool isLiquidityPool) external onlyOwner { 
		require(lpContractAddress != _primaryLP, "Cannot change the primary LP");
		_isLP[lpContractAddress] = isLiquidityPool; 
		if (isLiquidityPool) { 
			_noFees[lpContractAddress] = false; 
			_noLimits[lpContractAddress] = false; 
		}
	}
	function isLP(address wallet) external view returns (bool) {
		return _isLP[wallet];
	}

	function getTaxInfo() external view returns (uint8 buyTax, uint8 sellTax, uint16 sharesMarketing, uint16 sharesDevelopment, uint16 sharesLP, uint16 sharesTokenBurn ) {
		return ( _buyTaxRate, _sellTaxRate, _taxSharesMarketing, _taxSharesDevelopment, _taxSharesLP, _taxSharesBurn);
	}
	function setTaxRates(uint8 newBuyTax, uint8 newSellTax) external onlyOwner {
		require(newBuyTax + newSellTax <= 70, "Roundtrip too high");
		_buyTaxRate = newBuyTax;
		_sellTaxRate = newSellTax;
	}  
	function setTaxDistribution(uint16 sharesTokenBurn, uint16 sharesAutoLP, uint16 sharesMarketing, uint16 sharesDevelopment) external onlyOwner {
		_taxSharesLP = sharesAutoLP;
		_taxSharesMarketing = sharesMarketing;
		_taxSharesDevelopment = sharesDevelopment;
		_totalTaxShares = sharesTokenBurn + sharesAutoLP + sharesMarketing + sharesDevelopment;
	}

	function getAddresses() external view returns (address owner, address primaryLP, address marketing, address development, address LPowner ) {
		return ( _owner, _primaryLP, _walletMarketing, _walletDevelopment, _lpOwner);
	}
	function setTaxWallets(address newMarketing, address newDevelopment, address newLpOwner) external onlyOwner {
		require(!_isLP[newMarketing] && !_isLP[newDevelopment] && !_isLP[newLpOwner], "LP cannot be tax wallet");
		_walletMarketing = payable(newMarketing);
		_walletDevelopment = payable(newDevelopment);
		_lpOwner = newLpOwner;
		_noFees[newMarketing] = true;
		_noFees[newDevelopment] = true;
		_noLimits[newMarketing] = true;
		_noLimits[newDevelopment] = true;
	}

	function getLimitsInfo() external view returns (uint256 maxTX, uint256 maxWallet, uint256 taxSwapMin, uint256 taxSwapMax ) {
		return ( _maxTxAmount, _maxWalletAmount, _taxSwapMin, _taxSwapMax);
	}
	function increaseLimits(uint16 maxTxAmtPermile, uint16 maxWalletAmtPermile) external onlyOwner {
		uint256 newTxAmt = _totalSupply * maxTxAmtPermile / 1000 + 1;
		require(newTxAmt >= _maxTxAmount, "tx limit too low");
		_maxTxAmount = newTxAmt;
		uint256 newWalletAmt = _totalSupply * maxWalletAmtPermile / 1000 + 1;
		require(newWalletAmt >= _maxWalletAmount, "wallet limit too low");
		_maxWalletAmount = newWalletAmt;
	}
	function setTaxSwapLimits(uint32 minValue, uint32 minDivider, uint32 maxValue, uint32 maxDivider) external onlyOwner {
		_taxSwapMin = _totalSupply * minValue / minDivider;
		_taxSwapMax = _totalSupply * maxValue / maxDivider;
		require(_taxSwapMax>=_taxSwapMin, "MinMax error");
		require(_taxSwapMax>_totalSupply / 100000, "Upper threshold too low");
		require(_taxSwapMax<_totalSupply / 100, "Upper threshold too high");
	}

	function _burnTokens(address fromWallet, uint256 amount) private {
		if ( amount > 0 ) {
			_balances[fromWallet] -= amount;
			_balances[_burnWallet] += amount;
			emit Transfer(fromWallet, _burnWallet, amount);
		}
	}

	function _swapTaxAndLiquify() private lockTaxSwap {
		uint256 _taxTokensAvailable = balanceOf(address(this));

		if ( _taxTokensAvailable >= _taxSwapMin && _tradingOpen ) {
			if ( _taxTokensAvailable >= _taxSwapMax ) { _taxTokensAvailable = _taxSwapMax; }

			uint256 _tokensForLP = _taxTokensAvailable * _taxSharesLP / _totalTaxShares / 2;
			uint256 _tokensToBurn = _taxTokensAvailable * _taxSharesBurn / _totalTaxShares;
			_burnTokens(address(this), _tokensToBurn);
			
			uint256 _tokensToSwap = _taxTokensAvailable - _tokensForLP - _tokensToBurn;
			if( _tokensToSwap > 10**_decimals ) {
				uint256 _ethPreSwap = address(this).balance;
				_swapTaxTokensForEth(_tokensToSwap);
				uint256 _ethSwapped = address(this).balance - _ethPreSwap;
				if ( _taxSharesLP > 0 ) {
					uint256 _ethWeiAmount = _ethSwapped * _taxSharesLP / _totalTaxShares ;
					_approveRouter(_tokensForLP);
					_addLiquidity(_tokensForLP, _ethWeiAmount, false);
				}
			}
			uint256 _contractETHBalance = address(this).balance;
			if(_contractETHBalance > 0) { _distributeTaxEth(_contractETHBalance); }
		}
	}

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

	function _distributeTaxEth(uint256 amount) private {
		uint16 _taxShareTotal = _taxSharesMarketing + _taxSharesDevelopment;
		if (_taxShareTotal > 0) {
			uint256 marketingAmount = amount * _taxSharesMarketing / _taxShareTotal;
			uint256 developmentAmount = amount * _taxSharesDevelopment / _taxShareTotal;
			if ( marketingAmount > 0 ) { _walletMarketing.transfer(marketingAmount); }
			if ( developmentAmount > 0 ) { _walletDevelopment.transfer(developmentAmount); }
		}
	}

	function manualTaxSwapAndSend(bool swapTokens, bool sendEth) external onlyOwner {
		if (swapTokens) {
			uint256 taxTokenBalance = balanceOf(address(this));
			require(taxTokenBalance > 0, "No tokens");
			_swapTaxTokensForEth(taxTokenBalance);
		}
		if (sendEth) { 
			uint256 ethBalance = address(this).balance;
			require(ethBalance > 0, "No tokens");
			_distributeTaxEth(address(this).balance); 
		}
	}

	function burnTokens(uint256 amount) external {
		uint256 _tokensAvailable = balanceOf(msg.sender);
		require(amount <= _tokensAvailable, "Token balance too low");
		_burnTokens(msg.sender, amount);
		emit TokensBurned(msg.sender, amount);
	}

	function airdrop(address[] calldata addresses, uint256[] calldata tokenAmounts) external onlyOwner {
        require(addresses.length <= 250,"Wallet count over 250 (gas risk)");
        require(addresses.length == tokenAmounts.length,"Address and token amount list mismach");

        uint256 airdropTotal = 0;
        for(uint i=0; i < addresses.length; i++){
            airdropTotal += (tokenAmounts[i] * 10**_decimals);
        }
        require(_balances[msg.sender] >= airdropTotal, "Token balance lower than airdrop total");

        for(uint i=0; i < addresses.length; i++){
            _balances[msg.sender] -= (tokenAmounts[i] * 10**_decimals);
            _balances[addresses[i]] += (tokenAmounts[i] * 10**_decimals);
			emit Transfer(msg.sender, addresses[i], (tokenAmounts[i] * 10**_decimals) );       
        }

        emit TokensAirdropped(addresses.length, airdropTotal);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalWallets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokensAirdropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burnedByWallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"addInitialLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getAddresses","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"primaryLP","type":"address"},{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"development","type":"address"},{"internalType":"address","name":"LPowner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getExemptions","outputs":[{"internalType":"bool","name":"noFees","type":"bool"},{"internalType":"bool","name":"noLimits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimitsInfo","outputs":[{"internalType":"uint256","name":"maxTX","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"uint256","name":"taxSwapMin","type":"uint256"},{"internalType":"uint256","name":"taxSwapMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxInfo","outputs":[{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint16","name":"sharesMarketing","type":"uint16"},{"internalType":"uint16","name":"sharesDevelopment","type":"uint16"},{"internalType":"uint16","name":"sharesLP","type":"uint16"},{"internalType":"uint16","name":"sharesTokenBurn","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxTxAmtPermile","type":"uint16"},{"internalType":"uint16","name":"maxWalletAmtPermile","type":"uint16"}],"name":"increaseLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"swapTokens","type":"bool"},{"internalType":"bool","name":"sendEth","type":"bool"}],"name":"manualTaxSwapAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"noFees","type":"bool"},{"internalType":"bool","name":"noLimits","type":"bool"}],"name":"setExemptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lpContractAddress","type":"address"},{"internalType":"bool","name":"isLiquidityPool","type":"bool"}],"name":"setExtraLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"sharesTokenBurn","type":"uint16"},{"internalType":"uint16","name":"sharesAutoLP","type":"uint16"},{"internalType":"uint16","name":"sharesMarketing","type":"uint16"},{"internalType":"uint16","name":"sharesDevelopment","type":"uint16"}],"name":"setTaxDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newBuyTax","type":"uint8"},{"internalType":"uint8","name":"newSellTax","type":"uint8"}],"name":"setTaxRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"minValue","type":"uint32"},{"internalType":"uint32","name":"minDivider","type":"uint32"},{"internalType":"uint32","name":"maxValue","type":"uint32"},{"internalType":"uint32","name":"maxDivider","type":"uint32"}],"name":"setTaxSwapLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketing","type":"address"},{"internalType":"address","name":"newDevelopment","type":"address"},{"internalType":"address","name":"newLpOwner","type":"address"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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 payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526063600060146101000a81548160ff021916908360ff160217905550600c600060156101000a81548160ff021916908360ff1602179055506005600060166101000a81548161ffff021916908361ffff1602179055506001600060186101000a81548161ffff021916908361ffff160217905550600080601a6101000a81548161ffff021916908361ffff160217905550600080601c6101000a81548161ffff021916908361ffff1602179055506000601c9054906101000a900461ffff166000601a9054906101000a900461ffff16600060189054906101000a900461ffff16600060169054906101000a900461ffff1662000102919062000bc6565b6200010e919062000bc6565b6200011a919062000bc6565b6000601e6101000a81548161ffff021916908361ffff160217905550733c45b955d67214d97b80d3495b487fe90b39c21f600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507310782d83ede1d5b90ed0b3ac5d6d2ee0a6a788e4600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620001f0919062000d6e565b6305f5e10062000201919062000dbf565b6003556009600a62000214919062000d6e565b6305f5e10062000225919062000dbf565b600455620186a0600a6009600a6200023e919062000d6e565b6305f5e1006200024f919062000dbf565b6200025b919062000dbf565b62000267919062000e39565b600555620186a060556009600a62000280919062000d6e565b6305f5e10062000291919062000dbf565b6200029d919062000dbf565b620002a9919062000e39565b600655737a250d5630b4cf539739df2c5dacb4c659f2488d600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600f60016101000a81548160ff0219169083151502179055503480156200032957600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620003bd919062000d6e565b6304c4b400620003ce919062000dbf565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051620004b0919062000e82565b60405180910390a3600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546009600a62000508919062000d6e565b6305f5e10062000519919062000dbf565b62000525919062000e9f565b600760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405162000669919062000e82565b60405180910390a36001600960008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000eda565b600061ffff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000bd38262000b89565b915062000be08362000b89565b9250828201905061ffff81111562000bfd5762000bfc62000b97565b5b92915050565b60008160011c9050919050565b6000808291508390505b600185111562000c625780860481111562000c3a5762000c3962000b97565b5b600185161562000c4a5780820291505b808102905062000c5a8562000c03565b945062000c1a565b94509492505050565b60008262000c7d576001905062000d50565b8162000c8d576000905062000d50565b816001811462000ca6576002811462000cb15762000ce7565b600191505062000d50565b60ff84111562000cc65762000cc562000b97565b5b8360020a91508482111562000ce05762000cdf62000b97565b5b5062000d50565b5060208310610133831016604e8410600b841016171562000d215782820a90508381111562000d1b5762000d1a62000b97565b5b62000d50565b62000d30848484600162000c10565b9250905081840481111562000d4a5762000d4962000b97565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000d7b8262000d57565b915062000d888362000d61565b925062000db77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c6b565b905092915050565b600062000dcc8262000d57565b915062000dd98362000d57565b925082820262000de98162000d57565b9150828204841483151762000e035762000e0262000b97565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e468262000d57565b915062000e538362000d57565b92508262000e665762000e6562000e0a565b5b828204905092915050565b62000e7c8162000d57565b82525050565b600060208201905062000e99600083018462000e71565b92915050565b600062000eac8262000d57565b915062000eb98362000d57565b925082820390508181111562000ed45762000ed362000b97565b5b92915050565b6156b98062000eea6000396000f3fe6080604052600436106101a05760003560e01c80637df0f767116100ec578063c9567bf91161008a578063e4dbc45b11610064578063e4dbc45b146105de578063f2fde38b14610607578063f9fdeae314610630578063fd96502414610659576101a7565b8063c9567bf914610561578063d6f155ad14610578578063dd62ed3e146105a1576101a7565b80639fda0581116100c65780639fda0581146104a3578063a39fac12146104cc578063a9059cbb146104fb578063b142180314610538576101a7565b80637df0f767146103fd578063931b68ea1461043a57806395d89b4114610478576101a7565b806322a62e1e11610159578063672434821161013357806367243482146103405780636d1b229d146103695780636f013db91461039257806370a08231146103c0576101a7565b806322a62e1e146102a857806323b872dd146102d8578063313ce56714610315576101a7565b80630210a83d146101ac57806306fdde03146101c3578063095ea7b3146101ee57806318160ddd1461022b57806318839bc31461025657806321c42e111461027f576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610682565b005b3480156101cf57600080fd5b506101d8610b41565b6040516101e59190613d2a565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190613dea565b610b7e565b6040516102229190613e45565b60405180910390f35b34801561023757600080fd5b50610240610c70565b60405161024d9190613e6f565b60405180910390f35b34801561026257600080fd5b5061027d60048036038101906102789190613eb6565b610c94565b005b34801561028b57600080fd5b506102a660048036038101906102a19190613f09565b610e71565b005b3480156102b457600080fd5b506102bd6110a1565b6040516102cf96959493929190613f82565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa9190613fe3565b611122565b60405161030c9190613e45565b60405180910390f35b34801561032157600080fd5b5061032a61132c565b6040516103379190614036565b60405180910390f35b34801561034c57600080fd5b506103676004803603810190610362919061410c565b611335565b005b34801561037557600080fd5b50610390600480360381019061038b919061418d565b61178d565b005b34801561039e57600080fd5b506103a7611839565b6040516103b794939291906141ba565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906141ff565b611859565b6040516103f49190613e6f565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f91906141ff565b6118a2565b6040516104319190613e45565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c91906141ff565b6118f8565b60405161046f92919061422c565b60405180910390f35b34801561048457600080fd5b5061048d61199e565b60405161049a9190613d2a565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190614255565b6119db565b005b3480156104d857600080fd5b506104e1611dca565b6040516104f29594939291906142b7565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190613dea565b611e91565b60405161052f9190613e45565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190614336565b611eee565b005b34801561056d57600080fd5b506105766120ac565b005b34801561058457600080fd5b5061059f600480360381019061059a9190614376565b612194565b005b3480156105ad57600080fd5b506105c860048036038101906105c391906143b6565b6122e0565b6040516105d59190613e6f565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190614432565b612367565b005b34801561061357600080fd5b5061062e600480360381019061062991906144d7565b6125a6565b005b34801561063c57600080fd5b5061065760048036038101906106529190614504565b6126ae565b005b34801561066557600080fd5b50610680600480360381019061067b9190614597565b6127d7565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070790614649565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b3906146b5565b60405180910390fd5b600047116107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690614721565b60405180910390fd5b6000600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108789061478d565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091291906147c2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf91906147c2565b6040518363ffffffff1660e01b81526004016109dc9291906147ef565b6020604051808303816000875af11580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f91906147c2565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610aaa600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544760006128f1565b6001600e6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff021916908315150217905550565b60606040518060400160405280600581526020017f4f53414d55000000000000000000000000000000000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c5e9190613e6f565b60405180910390a36001905092915050565b60006009600a610c80919061497a565b6305f5e100610c8f91906149c5565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990614649565b60405180910390fd5b8080610d2b5750815b15610dbe57600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490614a53565b60405180910390fd5b5b81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690614649565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690614abf565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561109d576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600080600080600080600060149054906101000a900460ff16600060159054906101000a900460ff16600060169054906101000a900461ffff16600060189054906101000a900461ffff166000601c9054906101000a900461ffff166000601a9054906101000a900461ffff16955095509550955095509550909192939495565b600061112d846129df565b61116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390614b2b565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113185781600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112979190614b4b565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611323848484612aba565b90509392505050565b60006009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90614649565b60405180910390fd5b60fa84849050111561140a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140190614bcb565b60405180910390fd5b818190508484905014611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614c5d565b60405180910390fd5b6000805b858590508110156114b3576009600a61146f919061497a565b84848381811061148257611481614c7d565b5b9050602002013561149391906149c5565b8261149e9190614cac565b915080806114ab90614ce0565b915050611456565b5080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d90614d9a565b60405180910390fd5b60005b85859050811015611749576009600a611552919061497a565b84848381811061156557611564614c7d565b5b9050602002013561157691906149c5565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115c49190614b4b565b925050819055506009600a6115d9919061497a565b8484838181106115ec576115eb614c7d565b5b905060200201356115fd91906149c5565b6007600088888581811061161457611613614c7d565b5b905060200201602081019061162991906141ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116729190614cac565b9250508190555085858281811061168c5761168b614c7d565b5b90506020020160208101906116a191906141ff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a6116fd919061497a565b8787868181106117105761170f614c7d565b5b9050602002013561172191906149c5565b60405161172e9190613e6f565b60405180910390a3808061174190614ce0565b915050611539565b507f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba95464858590508260405161177e929190614dba565b60405180910390a15050505050565b600061179833611859565b9050808211156117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490614e2f565b60405180910390fd5b6117e73383612fe9565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb68360405161182d9190613e6f565b60405180910390a25050565b600080600080600354600454600554600654935093509350935090919293565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691509150915091565b60606040518060400160405280600381526020017f4f53410000000000000000000000000000000000000000000000000000000000815250905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090614649565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b0d5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b635750600e60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990614e9b565b60405180910390fd5b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60008060008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16945094509450945094509091929394565b6000611e9c336129df565b611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed290614b2b565b60405180910390fd5b611ee6338484612aba565b905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614649565b60405180910390fd5b600060016103e88461ffff166009600a611f96919061497a565b6305f5e100611fa591906149c5565b611faf91906149c5565b611fb99190614eea565b611fc39190614cac565b905060035481101561200a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200190614f67565b60405180910390fd5b80600381905550600060016103e88461ffff166009600a61202b919061497a565b6305f5e10061203a91906149c5565b61204491906149c5565b61204e9190614eea565b6120589190614cac565b905060045481101561209f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209690614fd3565b60405180910390fd5b8060048190555050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461213a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213190614649565b60405180910390fd5b600f60009054906101000a900460ff161561218a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121819061503f565b60405180910390fd5b612192613109565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990614649565b60405180910390fd5b811561228357600061223330611859565b905060008111612278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226f906150ab565b60405180910390fd5b6122818161319c565b505b80156122dc576000479050600081116122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c8906150ab565b60405180910390fd5b6122da476133bb565b505b5050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90614649565b60405180910390fd5b8263ffffffff168463ffffffff166009600a612411919061497a565b6305f5e10061242091906149c5565b61242a91906149c5565b6124349190614eea565b6005819055508063ffffffff168263ffffffff166009600a612456919061497a565b6305f5e10061246591906149c5565b61246f91906149c5565b6124799190614eea565b60068190555060055460065410156124c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bd90615117565b60405180910390fd5b620186a06009600a6124d8919061497a565b6305f5e1006124e791906149c5565b6124f19190614eea565b60065411612534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252b90615183565b60405180910390fd5b60646009600a612544919061497a565b6305f5e10061255391906149c5565b61255d9190614eea565b600654106125a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612597906151ef565b60405180910390fd5b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90614649565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516126a3919061526e565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390614649565b60405180910390fd5b826000601c6101000a81548161ffff021916908361ffff16021790555081600060166101000a81548161ffff021916908361ffff16021790555080600060186101000a81548161ffff021916908361ffff160217905550808284866127a19190615289565b6127ab9190615289565b6127b59190615289565b6000601e6101000a81548161ffff021916908361ffff16021790555050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c90614649565b60405180910390fd5b6046818361287391906152bf565b60ff1611156128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90615340565b60405180910390fd5b81600060146101000a81548160ff021916908360ff16021790555080600060156101000a81548160ff021916908360ff1602179055505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050811561292357600090505b61292c8461354a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b81526004016129939695949392919061539b565b60606040518083038185885af11580156129b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129d69190615411565b50505050505050565b60008060009050600f60009054906101000a900460ff1615612a045760019050612ab1565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aa65750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ab057600190505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b21906154b0565b60405180910390fd5b600f60009054906101000a900460ff16612c2057600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612be05750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1690614b2b565b60405180910390fd5b5b600f60019054906101000a900460ff16158015612c865750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9457612c93613734565b5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612cfc57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d54575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612da457612d6484848461392a565b612da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9a9061551c565b60405180910390fd5b5b6000612db1858585613ac1565b905060008184612dc19190614b4b565b905083600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e0e9190614b4b565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115612ee95781600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea59190614cac565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f349190614cac565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612fd49190613e6f565b60405180910390a36001925050509392505050565b60008111156131055780600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130419190614b4b565b9250508190555080600760008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130979190614cac565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130fc9190613e6f565b60405180910390a35b5050565b606460016009600a61311b919061497a565b6305f5e10061312a91906149c5565b61313491906149c5565b61313e9190614eea565b600381905550606460016009600a613156919061497a565b6305f5e10061316591906149c5565b61316f91906149c5565b6131799190614eea565b6004819055506001600f60006101000a81548160ff021916908315150217905550565b6131a58161354a565b6000600267ffffffffffffffff8111156131c2576131c161553c565b5b6040519080825280602002602001820160405280156131f05781602001602082028036833780820191505090505b509050308160008151811061320857613207614c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d391906147c2565b816001815181106132e7576132e6614c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613385959493929190615629565b600060405180830381600087803b15801561339f57600080fd5b505af11580156133b3573d6000803e3d6000fd5b505050505050565b60008060189054906101000a900461ffff16600060169054906101000a900461ffff166133e89190615289565b905060008161ffff1611156135465760008161ffff16600060169054906101000a900461ffff1661ffff168461341e91906149c5565b6134289190614eea565b905060008261ffff16600060189054906101000a900461ffff1661ffff168561345191906149c5565b61345b9190614eea565b905060008211156134d057600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156134ce573d6000803e3d6000fd5b505b600081111561354357600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613541573d6000803e3d6000fd5b505b50505b5050565b80600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613731577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516137289190613e6f565b60405180910390a35b50565b6001600f60016101000a81548160ff021916908315150217905550600061375a30611859565b9050600554811015801561377a5750600f60009054906101000a900460ff165b1561390c57600654811061378e5760065490505b600060026000601e9054906101000a900461ffff1661ffff166000601c9054906101000a900461ffff1661ffff16846137c791906149c5565b6137d19190614eea565b6137db9190614eea565b9050600080601e9054906101000a900461ffff1661ffff166000601a9054906101000a900461ffff1661ffff168461381391906149c5565b61381d9190614eea565b90506138293082612fe9565b60008183856138389190614b4b565b6138429190614b4b565b90506009600a613852919061497a565b8111156138ef5760004790506138678261319c565b600081476138759190614b4b565b9050600080601c9054906101000a900461ffff1661ffff1611156138ec57600080601e9054906101000a900461ffff1661ffff166000601c9054906101000a900461ffff1661ffff16836138c991906149c5565b6138d39190614eea565b90506138de8661354a565b6138ea868260006128f1565b505b50505b6000479050600081111561390757613906816133bb565b5b505050505b506000600f60016101000a81548160ff021916908315150217905550565b60008060019050600f60009054906101000a900460ff1680156139975750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139ed5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613ab657600354831115613a055760009050613ab5565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613aaa575060045483600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613aa89190614cac565b115b15613ab457600090505b5b5b809150509392505050565b600080600f60009054906101000a900460ff161580613b295750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80613b7d5750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613b8b5760009050613c8f565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c0e576064600060149054906101000a900460ff1660ff1684613bfd91906149c5565b613c079190614eea565b9050613c8e565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c8d576064600060159054906101000a900460ff1660ff1684613c8091906149c5565b613c8a9190614eea565b90505b5b5b809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cd4578082015181840152602081019050613cb9565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cfc82613c9a565b613d068185613ca5565b9350613d16818560208601613cb6565b613d1f81613ce0565b840191505092915050565b60006020820190508181036000830152613d448184613cf1565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d8182613d56565b9050919050565b613d9181613d76565b8114613d9c57600080fd5b50565b600081359050613dae81613d88565b92915050565b6000819050919050565b613dc781613db4565b8114613dd257600080fd5b50565b600081359050613de481613dbe565b92915050565b60008060408385031215613e0157613e00613d4c565b5b6000613e0f85828601613d9f565b9250506020613e2085828601613dd5565b9150509250929050565b60008115159050919050565b613e3f81613e2a565b82525050565b6000602082019050613e5a6000830184613e36565b92915050565b613e6981613db4565b82525050565b6000602082019050613e846000830184613e60565b92915050565b613e9381613e2a565b8114613e9e57600080fd5b50565b600081359050613eb081613e8a565b92915050565b600080600060608486031215613ecf57613ece613d4c565b5b6000613edd86828701613d9f565b9350506020613eee86828701613ea1565b9250506040613eff86828701613ea1565b9150509250925092565b60008060408385031215613f2057613f1f613d4c565b5b6000613f2e85828601613d9f565b9250506020613f3f85828601613ea1565b9150509250929050565b600060ff82169050919050565b613f5f81613f49565b82525050565b600061ffff82169050919050565b613f7c81613f65565b82525050565b600060c082019050613f976000830189613f56565b613fa46020830188613f56565b613fb16040830187613f73565b613fbe6060830186613f73565b613fcb6080830185613f73565b613fd860a0830184613f73565b979650505050505050565b600080600060608486031215613ffc57613ffb613d4c565b5b600061400a86828701613d9f565b935050602061401b86828701613d9f565b925050604061402c86828701613dd5565b9150509250925092565b600060208201905061404b6000830184613f56565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261407657614075614051565b5b8235905067ffffffffffffffff81111561409357614092614056565b5b6020830191508360208202830111156140af576140ae61405b565b5b9250929050565b60008083601f8401126140cc576140cb614051565b5b8235905067ffffffffffffffff8111156140e9576140e8614056565b5b6020830191508360208202830111156141055761410461405b565b5b9250929050565b6000806000806040858703121561412657614125613d4c565b5b600085013567ffffffffffffffff81111561414457614143613d51565b5b61415087828801614060565b9450945050602085013567ffffffffffffffff81111561417357614172613d51565b5b61417f878288016140b6565b925092505092959194509250565b6000602082840312156141a3576141a2613d4c565b5b60006141b184828501613dd5565b91505092915050565b60006080820190506141cf6000830187613e60565b6141dc6020830186613e60565b6141e96040830185613e60565b6141f66060830184613e60565b95945050505050565b60006020828403121561421557614214613d4c565b5b600061422384828501613d9f565b91505092915050565b60006040820190506142416000830185613e36565b61424e6020830184613e36565b9392505050565b60008060006060848603121561426e5761426d613d4c565b5b600061427c86828701613d9f565b935050602061428d86828701613d9f565b925050604061429e86828701613d9f565b9150509250925092565b6142b181613d76565b82525050565b600060a0820190506142cc60008301886142a8565b6142d960208301876142a8565b6142e660408301866142a8565b6142f360608301856142a8565b61430060808301846142a8565b9695505050505050565b61431381613f65565b811461431e57600080fd5b50565b6000813590506143308161430a565b92915050565b6000806040838503121561434d5761434c613d4c565b5b600061435b85828601614321565b925050602061436c85828601614321565b9150509250929050565b6000806040838503121561438d5761438c613d4c565b5b600061439b85828601613ea1565b92505060206143ac85828601613ea1565b9150509250929050565b600080604083850312156143cd576143cc613d4c565b5b60006143db85828601613d9f565b92505060206143ec85828601613d9f565b9150509250929050565b600063ffffffff82169050919050565b61440f816143f6565b811461441a57600080fd5b50565b60008135905061442c81614406565b92915050565b6000806000806080858703121561444c5761444b613d4c565b5b600061445a8782880161441d565b945050602061446b8782880161441d565b935050604061447c8782880161441d565b925050606061448d8782880161441d565b91505092959194509250565b60006144a482613d56565b9050919050565b6144b481614499565b81146144bf57600080fd5b50565b6000813590506144d1816144ab565b92915050565b6000602082840312156144ed576144ec613d4c565b5b60006144fb848285016144c2565b91505092915050565b6000806000806080858703121561451e5761451d613d4c565b5b600061452c87828801614321565b945050602061453d87828801614321565b935050604061454e87828801614321565b925050606061455f87828801614321565b91505092959194509250565b61457481613f49565b811461457f57600080fd5b50565b6000813590506145918161456b565b92915050565b600080604083850312156145ae576145ad613d4c565b5b60006145bc85828601614582565b92505060206145cd85828601614582565b9150509250929050565b7f4f6e6c7920636f6e7472616374205f6f776e65722063616e2063616c6c20746860008201527f69732066756e6374696f6e000000000000000000000000000000000000000000602082015250565b6000614633602b83613ca5565b915061463e826145d7565b604082019050919050565b6000602082019050818103600083015261466281614626565b9050919050565b7f4c50206578697374730000000000000000000000000000000000000000000000600082015250565b600061469f600983613ca5565b91506146aa82614669565b602082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b7f4e6f2045544820696e20636f6e74726163740000000000000000000000000000600082015250565b600061470b601283613ca5565b9150614716826146d5565b602082019050919050565b6000602082019050818103600083015261473a816146fe565b9050919050565b7f4e6f20746f6b656e7320696e20636f6e74726163740000000000000000000000600082015250565b6000614777601583613ca5565b915061478282614741565b602082019050919050565b600060208201905081810360008301526147a68161476a565b9050919050565b6000815190506147bc81613d88565b92915050565b6000602082840312156147d8576147d7613d4c565b5b60006147e6848285016147ad565b91505092915050565b600060408201905061480460008301856142a8565b61481160208301846142a8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561489e5780860481111561487a57614879614818565b5b60018516156148895780820291505b808102905061489785614847565b945061485e565b94509492505050565b6000826148b75760019050614973565b816148c55760009050614973565b81600181146148db57600281146148e557614914565b6001915050614973565b60ff8411156148f7576148f6614818565b5b8360020a91508482111561490e5761490d614818565b5b50614973565b5060208310610133831016604e8410600b84101617156149495782820a90508381111561494457614943614818565b5b614973565b6149568484846001614854565b9250905081840481111561496d5761496c614818565b5b81810290505b9392505050565b600061498582613db4565b915061499083613f49565b92506149bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846148a7565b905092915050565b60006149d082613db4565b91506149db83613db4565b92508282026149e981613db4565b91508282048414831517614a00576149ff614818565b5b5092915050565b7f43616e6e6f74206578656d7074204c5000000000000000000000000000000000600082015250565b6000614a3d601083613ca5565b9150614a4882614a07565b602082019050919050565b60006020820190508181036000830152614a6c81614a30565b9050919050565b7f43616e6e6f74206368616e676520746865207072696d617279204c5000000000600082015250565b6000614aa9601c83613ca5565b9150614ab482614a73565b602082019050919050565b60006020820190508181036000830152614ad881614a9c565b9050919050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b6000614b15601083613ca5565b9150614b2082614adf565b602082019050919050565b60006020820190508181036000830152614b4481614b08565b9050919050565b6000614b5682613db4565b9150614b6183613db4565b9250828203905081811115614b7957614b78614818565b5b92915050565b7f57616c6c657420636f756e74206f766572203235302028676173207269736b29600082015250565b6000614bb5602083613ca5565b9150614bc082614b7f565b602082019050919050565b60006020820190508181036000830152614be481614ba8565b9050919050565b7f4164647265737320616e6420746f6b656e20616d6f756e74206c697374206d6960008201527f736d616368000000000000000000000000000000000000000000000000000000602082015250565b6000614c47602583613ca5565b9150614c5282614beb565b604082019050919050565b60006020820190508181036000830152614c7681614c3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614cb782613db4565b9150614cc283613db4565b9250828201905080821115614cda57614cd9614818565b5b92915050565b6000614ceb82613db4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d1d57614d1c614818565b5b600182019050919050565b7f546f6b656e2062616c616e6365206c6f776572207468616e2061697264726f7060008201527f20746f74616c0000000000000000000000000000000000000000000000000000602082015250565b6000614d84602683613ca5565b9150614d8f82614d28565b604082019050919050565b60006020820190508181036000830152614db381614d77565b9050919050565b6000604082019050614dcf6000830185613e60565b614ddc6020830184613e60565b9392505050565b7f546f6b656e2062616c616e636520746f6f206c6f770000000000000000000000600082015250565b6000614e19601583613ca5565b9150614e2482614de3565b602082019050919050565b60006020820190508181036000830152614e4881614e0c565b9050919050565b7f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000600082015250565b6000614e85601783613ca5565b9150614e9082614e4f565b602082019050919050565b60006020820190508181036000830152614eb481614e78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ef582613db4565b9150614f0083613db4565b925082614f1057614f0f614ebb565b5b828204905092915050565b7f7478206c696d697420746f6f206c6f7700000000000000000000000000000000600082015250565b6000614f51601083613ca5565b9150614f5c82614f1b565b602082019050919050565b60006020820190508181036000830152614f8081614f44565b9050919050565b7f77616c6c6574206c696d697420746f6f206c6f77000000000000000000000000600082015250565b6000614fbd601483613ca5565b9150614fc882614f87565b602082019050919050565b60006020820190508181036000830152614fec81614fb0565b9050919050565b7f74726164696e6720616c7265616479206f70656e000000000000000000000000600082015250565b6000615029601483613ca5565b915061503482614ff3565b602082019050919050565b600060208201905081810360008301526150588161501c565b9050919050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000615095600983613ca5565b91506150a08261505f565b602082019050919050565b600060208201905081810360008301526150c481615088565b9050919050565b7f4d696e4d6178206572726f720000000000000000000000000000000000000000600082015250565b6000615101600c83613ca5565b915061510c826150cb565b602082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b7f5570706572207468726573686f6c6420746f6f206c6f77000000000000000000600082015250565b600061516d601783613ca5565b915061517882615137565b602082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f5570706572207468726573686f6c6420746f6f20686967680000000000000000600082015250565b60006151d9601883613ca5565b91506151e4826151a3565b602082019050919050565b60006020820190508181036000830152615208816151cc565b9050919050565b6000819050919050565b600061523461522f61522a84613d56565b61520f565b613d56565b9050919050565b600061524682615219565b9050919050565b60006152588261523b565b9050919050565b6152688161524d565b82525050565b6000602082019050615283600083018461525f565b92915050565b600061529482613f65565b915061529f83613f65565b9250828201905061ffff8111156152b9576152b8614818565b5b92915050565b60006152ca82613f49565b91506152d583613f49565b9250828201905060ff8111156152ee576152ed614818565b5b92915050565b7f526f756e647472697020746f6f20686967680000000000000000000000000000600082015250565b600061532a601283613ca5565b9150615335826152f4565b602082019050919050565b600060208201905081810360008301526153598161531d565b9050919050565b6000819050919050565b600061538561538061537b84615360565b61520f565b613db4565b9050919050565b6153958161536a565b82525050565b600060c0820190506153b060008301896142a8565b6153bd6020830188613e60565b6153ca604083018761538c565b6153d7606083018661538c565b6153e460808301856142a8565b6153f160a0830184613e60565b979650505050505050565b60008151905061540b81613dbe565b92915050565b60008060006060848603121561542a57615429613d4c565b5b6000615438868287016153fc565b9350506020615449868287016153fc565b925050604061545a868287016153fc565b9150509250925092565b7f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000600082015250565b600061549a601d83613ca5565b91506154a582615464565b602082019050919050565b600060208201905081810360008301526154c98161548d565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b6000615506601183613ca5565b9150615511826154d0565b602082019050919050565b60006020820190508181036000830152615535816154f9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155a081613d76565b82525050565b60006155b28383615597565b60208301905092915050565b6000602082019050919050565b60006155d68261556b565b6155e08185615576565b93506155eb83615587565b8060005b8381101561561c57815161560388826155a6565b975061560e836155be565b9250506001810190506155ef565b5085935050505092915050565b600060a08201905061563e6000830188613e60565b61564b602083018761538c565b818103604083015261565d81866155cb565b905061566c60608301856142a8565b6156796080830184613e60565b969550505050505056fea26469706673582212202a6ff3cb6cdb8e7dc28d8f71be8b7dbdbe82c99ad9d3c2b230784253551093a064736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101a05760003560e01c80637df0f767116100ec578063c9567bf91161008a578063e4dbc45b11610064578063e4dbc45b146105de578063f2fde38b14610607578063f9fdeae314610630578063fd96502414610659576101a7565b8063c9567bf914610561578063d6f155ad14610578578063dd62ed3e146105a1576101a7565b80639fda0581116100c65780639fda0581146104a3578063a39fac12146104cc578063a9059cbb146104fb578063b142180314610538576101a7565b80637df0f767146103fd578063931b68ea1461043a57806395d89b4114610478576101a7565b806322a62e1e11610159578063672434821161013357806367243482146103405780636d1b229d146103695780636f013db91461039257806370a08231146103c0576101a7565b806322a62e1e146102a857806323b872dd146102d8578063313ce56714610315576101a7565b80630210a83d146101ac57806306fdde03146101c3578063095ea7b3146101ee57806318160ddd1461022b57806318839bc31461025657806321c42e111461027f576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610682565b005b3480156101cf57600080fd5b506101d8610b41565b6040516101e59190613d2a565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190613dea565b610b7e565b6040516102229190613e45565b60405180910390f35b34801561023757600080fd5b50610240610c70565b60405161024d9190613e6f565b60405180910390f35b34801561026257600080fd5b5061027d60048036038101906102789190613eb6565b610c94565b005b34801561028b57600080fd5b506102a660048036038101906102a19190613f09565b610e71565b005b3480156102b457600080fd5b506102bd6110a1565b6040516102cf96959493929190613f82565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa9190613fe3565b611122565b60405161030c9190613e45565b60405180910390f35b34801561032157600080fd5b5061032a61132c565b6040516103379190614036565b60405180910390f35b34801561034c57600080fd5b506103676004803603810190610362919061410c565b611335565b005b34801561037557600080fd5b50610390600480360381019061038b919061418d565b61178d565b005b34801561039e57600080fd5b506103a7611839565b6040516103b794939291906141ba565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906141ff565b611859565b6040516103f49190613e6f565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f91906141ff565b6118a2565b6040516104319190613e45565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c91906141ff565b6118f8565b60405161046f92919061422c565b60405180910390f35b34801561048457600080fd5b5061048d61199e565b60405161049a9190613d2a565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190614255565b6119db565b005b3480156104d857600080fd5b506104e1611dca565b6040516104f29594939291906142b7565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190613dea565b611e91565b60405161052f9190613e45565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190614336565b611eee565b005b34801561056d57600080fd5b506105766120ac565b005b34801561058457600080fd5b5061059f600480360381019061059a9190614376565b612194565b005b3480156105ad57600080fd5b506105c860048036038101906105c391906143b6565b6122e0565b6040516105d59190613e6f565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190614432565b612367565b005b34801561061357600080fd5b5061062e600480360381019061062991906144d7565b6125a6565b005b34801561063c57600080fd5b5061065760048036038101906106529190614504565b6126ae565b005b34801561066557600080fd5b50610680600480360381019061067b9190614597565b6127d7565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070790614649565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b3906146b5565b60405180910390fd5b600047116107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690614721565b60405180910390fd5b6000600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108789061478d565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091291906147c2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf91906147c2565b6040518363ffffffff1660e01b81526004016109dc9291906147ef565b6020604051808303816000875af11580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f91906147c2565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610aaa600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544760006128f1565b6001600e6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff021916908315150217905550565b60606040518060400160405280600581526020017f4f53414d55000000000000000000000000000000000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c5e9190613e6f565b60405180910390a36001905092915050565b60006009600a610c80919061497a565b6305f5e100610c8f91906149c5565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990614649565b60405180910390fd5b8080610d2b5750815b15610dbe57600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490614a53565b60405180910390fd5b5b81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690614649565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690614abf565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561109d576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600080600080600080600060149054906101000a900460ff16600060159054906101000a900460ff16600060169054906101000a900461ffff16600060189054906101000a900461ffff166000601c9054906101000a900461ffff166000601a9054906101000a900461ffff16955095509550955095509550909192939495565b600061112d846129df565b61116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390614b2b565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113185781600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112979190614b4b565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611323848484612aba565b90509392505050565b60006009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90614649565b60405180910390fd5b60fa84849050111561140a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140190614bcb565b60405180910390fd5b818190508484905014611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614c5d565b60405180910390fd5b6000805b858590508110156114b3576009600a61146f919061497a565b84848381811061148257611481614c7d565b5b9050602002013561149391906149c5565b8261149e9190614cac565b915080806114ab90614ce0565b915050611456565b5080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d90614d9a565b60405180910390fd5b60005b85859050811015611749576009600a611552919061497a565b84848381811061156557611564614c7d565b5b9050602002013561157691906149c5565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115c49190614b4b565b925050819055506009600a6115d9919061497a565b8484838181106115ec576115eb614c7d565b5b905060200201356115fd91906149c5565b6007600088888581811061161457611613614c7d565b5b905060200201602081019061162991906141ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116729190614cac565b9250508190555085858281811061168c5761168b614c7d565b5b90506020020160208101906116a191906141ff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a6116fd919061497a565b8787868181106117105761170f614c7d565b5b9050602002013561172191906149c5565b60405161172e9190613e6f565b60405180910390a3808061174190614ce0565b915050611539565b507f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba95464858590508260405161177e929190614dba565b60405180910390a15050505050565b600061179833611859565b9050808211156117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490614e2f565b60405180910390fd5b6117e73383612fe9565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb68360405161182d9190613e6f565b60405180910390a25050565b600080600080600354600454600554600654935093509350935090919293565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691509150915091565b60606040518060400160405280600381526020017f4f53410000000000000000000000000000000000000000000000000000000000815250905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090614649565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b0d5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b635750600e60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990614e9b565b60405180910390fd5b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60008060008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16945094509450945094509091929394565b6000611e9c336129df565b611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed290614b2b565b60405180910390fd5b611ee6338484612aba565b905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614649565b60405180910390fd5b600060016103e88461ffff166009600a611f96919061497a565b6305f5e100611fa591906149c5565b611faf91906149c5565b611fb99190614eea565b611fc39190614cac565b905060035481101561200a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200190614f67565b60405180910390fd5b80600381905550600060016103e88461ffff166009600a61202b919061497a565b6305f5e10061203a91906149c5565b61204491906149c5565b61204e9190614eea565b6120589190614cac565b905060045481101561209f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209690614fd3565b60405180910390fd5b8060048190555050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461213a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213190614649565b60405180910390fd5b600f60009054906101000a900460ff161561218a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121819061503f565b60405180910390fd5b612192613109565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990614649565b60405180910390fd5b811561228357600061223330611859565b905060008111612278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226f906150ab565b60405180910390fd5b6122818161319c565b505b80156122dc576000479050600081116122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c8906150ab565b60405180910390fd5b6122da476133bb565b505b5050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90614649565b60405180910390fd5b8263ffffffff168463ffffffff166009600a612411919061497a565b6305f5e10061242091906149c5565b61242a91906149c5565b6124349190614eea565b6005819055508063ffffffff168263ffffffff166009600a612456919061497a565b6305f5e10061246591906149c5565b61246f91906149c5565b6124799190614eea565b60068190555060055460065410156124c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bd90615117565b60405180910390fd5b620186a06009600a6124d8919061497a565b6305f5e1006124e791906149c5565b6124f19190614eea565b60065411612534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252b90615183565b60405180910390fd5b60646009600a612544919061497a565b6305f5e10061255391906149c5565b61255d9190614eea565b600654106125a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612597906151ef565b60405180910390fd5b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90614649565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516126a3919061526e565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390614649565b60405180910390fd5b826000601c6101000a81548161ffff021916908361ffff16021790555081600060166101000a81548161ffff021916908361ffff16021790555080600060186101000a81548161ffff021916908361ffff160217905550808284866127a19190615289565b6127ab9190615289565b6127b59190615289565b6000601e6101000a81548161ffff021916908361ffff16021790555050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c90614649565b60405180910390fd5b6046818361287391906152bf565b60ff1611156128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90615340565b60405180910390fd5b81600060146101000a81548160ff021916908360ff16021790555080600060156101000a81548160ff021916908360ff1602179055505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050811561292357600090505b61292c8461354a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b81526004016129939695949392919061539b565b60606040518083038185885af11580156129b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129d69190615411565b50505050505050565b60008060009050600f60009054906101000a900460ff1615612a045760019050612ab1565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aa65750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ab057600190505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b21906154b0565b60405180910390fd5b600f60009054906101000a900460ff16612c2057600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612be05750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1690614b2b565b60405180910390fd5b5b600f60019054906101000a900460ff16158015612c865750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9457612c93613734565b5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612cfc57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d54575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612da457612d6484848461392a565b612da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9a9061551c565b60405180910390fd5b5b6000612db1858585613ac1565b905060008184612dc19190614b4b565b905083600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e0e9190614b4b565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115612ee95781600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea59190614cac565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f349190614cac565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612fd49190613e6f565b60405180910390a36001925050509392505050565b60008111156131055780600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130419190614b4b565b9250508190555080600760008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130979190614cac565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130fc9190613e6f565b60405180910390a35b5050565b606460016009600a61311b919061497a565b6305f5e10061312a91906149c5565b61313491906149c5565b61313e9190614eea565b600381905550606460016009600a613156919061497a565b6305f5e10061316591906149c5565b61316f91906149c5565b6131799190614eea565b6004819055506001600f60006101000a81548160ff021916908315150217905550565b6131a58161354a565b6000600267ffffffffffffffff8111156131c2576131c161553c565b5b6040519080825280602002602001820160405280156131f05781602001602082028036833780820191505090505b509050308160008151811061320857613207614c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d391906147c2565b816001815181106132e7576132e6614c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613385959493929190615629565b600060405180830381600087803b15801561339f57600080fd5b505af11580156133b3573d6000803e3d6000fd5b505050505050565b60008060189054906101000a900461ffff16600060169054906101000a900461ffff166133e89190615289565b905060008161ffff1611156135465760008161ffff16600060169054906101000a900461ffff1661ffff168461341e91906149c5565b6134289190614eea565b905060008261ffff16600060189054906101000a900461ffff1661ffff168561345191906149c5565b61345b9190614eea565b905060008211156134d057600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156134ce573d6000803e3d6000fd5b505b600081111561354357600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613541573d6000803e3d6000fd5b505b50505b5050565b80600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613731577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516137289190613e6f565b60405180910390a35b50565b6001600f60016101000a81548160ff021916908315150217905550600061375a30611859565b9050600554811015801561377a5750600f60009054906101000a900460ff165b1561390c57600654811061378e5760065490505b600060026000601e9054906101000a900461ffff1661ffff166000601c9054906101000a900461ffff1661ffff16846137c791906149c5565b6137d19190614eea565b6137db9190614eea565b9050600080601e9054906101000a900461ffff1661ffff166000601a9054906101000a900461ffff1661ffff168461381391906149c5565b61381d9190614eea565b90506138293082612fe9565b60008183856138389190614b4b565b6138429190614b4b565b90506009600a613852919061497a565b8111156138ef5760004790506138678261319c565b600081476138759190614b4b565b9050600080601c9054906101000a900461ffff1661ffff1611156138ec57600080601e9054906101000a900461ffff1661ffff166000601c9054906101000a900461ffff1661ffff16836138c991906149c5565b6138d39190614eea565b90506138de8661354a565b6138ea868260006128f1565b505b50505b6000479050600081111561390757613906816133bb565b5b505050505b506000600f60016101000a81548160ff021916908315150217905550565b60008060019050600f60009054906101000a900460ff1680156139975750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139ed5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613ab657600354831115613a055760009050613ab5565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613aaa575060045483600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613aa89190614cac565b115b15613ab457600090505b5b5b809150509392505050565b600080600f60009054906101000a900460ff161580613b295750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80613b7d5750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613b8b5760009050613c8f565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c0e576064600060149054906101000a900460ff1660ff1684613bfd91906149c5565b613c079190614eea565b9050613c8e565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c8d576064600060159054906101000a900460ff1660ff1684613c8091906149c5565b613c8a9190614eea565b90505b5b5b809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cd4578082015181840152602081019050613cb9565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cfc82613c9a565b613d068185613ca5565b9350613d16818560208601613cb6565b613d1f81613ce0565b840191505092915050565b60006020820190508181036000830152613d448184613cf1565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d8182613d56565b9050919050565b613d9181613d76565b8114613d9c57600080fd5b50565b600081359050613dae81613d88565b92915050565b6000819050919050565b613dc781613db4565b8114613dd257600080fd5b50565b600081359050613de481613dbe565b92915050565b60008060408385031215613e0157613e00613d4c565b5b6000613e0f85828601613d9f565b9250506020613e2085828601613dd5565b9150509250929050565b60008115159050919050565b613e3f81613e2a565b82525050565b6000602082019050613e5a6000830184613e36565b92915050565b613e6981613db4565b82525050565b6000602082019050613e846000830184613e60565b92915050565b613e9381613e2a565b8114613e9e57600080fd5b50565b600081359050613eb081613e8a565b92915050565b600080600060608486031215613ecf57613ece613d4c565b5b6000613edd86828701613d9f565b9350506020613eee86828701613ea1565b9250506040613eff86828701613ea1565b9150509250925092565b60008060408385031215613f2057613f1f613d4c565b5b6000613f2e85828601613d9f565b9250506020613f3f85828601613ea1565b9150509250929050565b600060ff82169050919050565b613f5f81613f49565b82525050565b600061ffff82169050919050565b613f7c81613f65565b82525050565b600060c082019050613f976000830189613f56565b613fa46020830188613f56565b613fb16040830187613f73565b613fbe6060830186613f73565b613fcb6080830185613f73565b613fd860a0830184613f73565b979650505050505050565b600080600060608486031215613ffc57613ffb613d4c565b5b600061400a86828701613d9f565b935050602061401b86828701613d9f565b925050604061402c86828701613dd5565b9150509250925092565b600060208201905061404b6000830184613f56565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261407657614075614051565b5b8235905067ffffffffffffffff81111561409357614092614056565b5b6020830191508360208202830111156140af576140ae61405b565b5b9250929050565b60008083601f8401126140cc576140cb614051565b5b8235905067ffffffffffffffff8111156140e9576140e8614056565b5b6020830191508360208202830111156141055761410461405b565b5b9250929050565b6000806000806040858703121561412657614125613d4c565b5b600085013567ffffffffffffffff81111561414457614143613d51565b5b61415087828801614060565b9450945050602085013567ffffffffffffffff81111561417357614172613d51565b5b61417f878288016140b6565b925092505092959194509250565b6000602082840312156141a3576141a2613d4c565b5b60006141b184828501613dd5565b91505092915050565b60006080820190506141cf6000830187613e60565b6141dc6020830186613e60565b6141e96040830185613e60565b6141f66060830184613e60565b95945050505050565b60006020828403121561421557614214613d4c565b5b600061422384828501613d9f565b91505092915050565b60006040820190506142416000830185613e36565b61424e6020830184613e36565b9392505050565b60008060006060848603121561426e5761426d613d4c565b5b600061427c86828701613d9f565b935050602061428d86828701613d9f565b925050604061429e86828701613d9f565b9150509250925092565b6142b181613d76565b82525050565b600060a0820190506142cc60008301886142a8565b6142d960208301876142a8565b6142e660408301866142a8565b6142f360608301856142a8565b61430060808301846142a8565b9695505050505050565b61431381613f65565b811461431e57600080fd5b50565b6000813590506143308161430a565b92915050565b6000806040838503121561434d5761434c613d4c565b5b600061435b85828601614321565b925050602061436c85828601614321565b9150509250929050565b6000806040838503121561438d5761438c613d4c565b5b600061439b85828601613ea1565b92505060206143ac85828601613ea1565b9150509250929050565b600080604083850312156143cd576143cc613d4c565b5b60006143db85828601613d9f565b92505060206143ec85828601613d9f565b9150509250929050565b600063ffffffff82169050919050565b61440f816143f6565b811461441a57600080fd5b50565b60008135905061442c81614406565b92915050565b6000806000806080858703121561444c5761444b613d4c565b5b600061445a8782880161441d565b945050602061446b8782880161441d565b935050604061447c8782880161441d565b925050606061448d8782880161441d565b91505092959194509250565b60006144a482613d56565b9050919050565b6144b481614499565b81146144bf57600080fd5b50565b6000813590506144d1816144ab565b92915050565b6000602082840312156144ed576144ec613d4c565b5b60006144fb848285016144c2565b91505092915050565b6000806000806080858703121561451e5761451d613d4c565b5b600061452c87828801614321565b945050602061453d87828801614321565b935050604061454e87828801614321565b925050606061455f87828801614321565b91505092959194509250565b61457481613f49565b811461457f57600080fd5b50565b6000813590506145918161456b565b92915050565b600080604083850312156145ae576145ad613d4c565b5b60006145bc85828601614582565b92505060206145cd85828601614582565b9150509250929050565b7f4f6e6c7920636f6e7472616374205f6f776e65722063616e2063616c6c20746860008201527f69732066756e6374696f6e000000000000000000000000000000000000000000602082015250565b6000614633602b83613ca5565b915061463e826145d7565b604082019050919050565b6000602082019050818103600083015261466281614626565b9050919050565b7f4c50206578697374730000000000000000000000000000000000000000000000600082015250565b600061469f600983613ca5565b91506146aa82614669565b602082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b7f4e6f2045544820696e20636f6e74726163740000000000000000000000000000600082015250565b600061470b601283613ca5565b9150614716826146d5565b602082019050919050565b6000602082019050818103600083015261473a816146fe565b9050919050565b7f4e6f20746f6b656e7320696e20636f6e74726163740000000000000000000000600082015250565b6000614777601583613ca5565b915061478282614741565b602082019050919050565b600060208201905081810360008301526147a68161476a565b9050919050565b6000815190506147bc81613d88565b92915050565b6000602082840312156147d8576147d7613d4c565b5b60006147e6848285016147ad565b91505092915050565b600060408201905061480460008301856142a8565b61481160208301846142a8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561489e5780860481111561487a57614879614818565b5b60018516156148895780820291505b808102905061489785614847565b945061485e565b94509492505050565b6000826148b75760019050614973565b816148c55760009050614973565b81600181146148db57600281146148e557614914565b6001915050614973565b60ff8411156148f7576148f6614818565b5b8360020a91508482111561490e5761490d614818565b5b50614973565b5060208310610133831016604e8410600b84101617156149495782820a90508381111561494457614943614818565b5b614973565b6149568484846001614854565b9250905081840481111561496d5761496c614818565b5b81810290505b9392505050565b600061498582613db4565b915061499083613f49565b92506149bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846148a7565b905092915050565b60006149d082613db4565b91506149db83613db4565b92508282026149e981613db4565b91508282048414831517614a00576149ff614818565b5b5092915050565b7f43616e6e6f74206578656d7074204c5000000000000000000000000000000000600082015250565b6000614a3d601083613ca5565b9150614a4882614a07565b602082019050919050565b60006020820190508181036000830152614a6c81614a30565b9050919050565b7f43616e6e6f74206368616e676520746865207072696d617279204c5000000000600082015250565b6000614aa9601c83613ca5565b9150614ab482614a73565b602082019050919050565b60006020820190508181036000830152614ad881614a9c565b9050919050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b6000614b15601083613ca5565b9150614b2082614adf565b602082019050919050565b60006020820190508181036000830152614b4481614b08565b9050919050565b6000614b5682613db4565b9150614b6183613db4565b9250828203905081811115614b7957614b78614818565b5b92915050565b7f57616c6c657420636f756e74206f766572203235302028676173207269736b29600082015250565b6000614bb5602083613ca5565b9150614bc082614b7f565b602082019050919050565b60006020820190508181036000830152614be481614ba8565b9050919050565b7f4164647265737320616e6420746f6b656e20616d6f756e74206c697374206d6960008201527f736d616368000000000000000000000000000000000000000000000000000000602082015250565b6000614c47602583613ca5565b9150614c5282614beb565b604082019050919050565b60006020820190508181036000830152614c7681614c3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614cb782613db4565b9150614cc283613db4565b9250828201905080821115614cda57614cd9614818565b5b92915050565b6000614ceb82613db4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d1d57614d1c614818565b5b600182019050919050565b7f546f6b656e2062616c616e6365206c6f776572207468616e2061697264726f7060008201527f20746f74616c0000000000000000000000000000000000000000000000000000602082015250565b6000614d84602683613ca5565b9150614d8f82614d28565b604082019050919050565b60006020820190508181036000830152614db381614d77565b9050919050565b6000604082019050614dcf6000830185613e60565b614ddc6020830184613e60565b9392505050565b7f546f6b656e2062616c616e636520746f6f206c6f770000000000000000000000600082015250565b6000614e19601583613ca5565b9150614e2482614de3565b602082019050919050565b60006020820190508181036000830152614e4881614e0c565b9050919050565b7f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000600082015250565b6000614e85601783613ca5565b9150614e9082614e4f565b602082019050919050565b60006020820190508181036000830152614eb481614e78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ef582613db4565b9150614f0083613db4565b925082614f1057614f0f614ebb565b5b828204905092915050565b7f7478206c696d697420746f6f206c6f7700000000000000000000000000000000600082015250565b6000614f51601083613ca5565b9150614f5c82614f1b565b602082019050919050565b60006020820190508181036000830152614f8081614f44565b9050919050565b7f77616c6c6574206c696d697420746f6f206c6f77000000000000000000000000600082015250565b6000614fbd601483613ca5565b9150614fc882614f87565b602082019050919050565b60006020820190508181036000830152614fec81614fb0565b9050919050565b7f74726164696e6720616c7265616479206f70656e000000000000000000000000600082015250565b6000615029601483613ca5565b915061503482614ff3565b602082019050919050565b600060208201905081810360008301526150588161501c565b9050919050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000615095600983613ca5565b91506150a08261505f565b602082019050919050565b600060208201905081810360008301526150c481615088565b9050919050565b7f4d696e4d6178206572726f720000000000000000000000000000000000000000600082015250565b6000615101600c83613ca5565b915061510c826150cb565b602082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b7f5570706572207468726573686f6c6420746f6f206c6f77000000000000000000600082015250565b600061516d601783613ca5565b915061517882615137565b602082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f5570706572207468726573686f6c6420746f6f20686967680000000000000000600082015250565b60006151d9601883613ca5565b91506151e4826151a3565b602082019050919050565b60006020820190508181036000830152615208816151cc565b9050919050565b6000819050919050565b600061523461522f61522a84613d56565b61520f565b613d56565b9050919050565b600061524682615219565b9050919050565b60006152588261523b565b9050919050565b6152688161524d565b82525050565b6000602082019050615283600083018461525f565b92915050565b600061529482613f65565b915061529f83613f65565b9250828201905061ffff8111156152b9576152b8614818565b5b92915050565b60006152ca82613f49565b91506152d583613f49565b9250828201905060ff8111156152ee576152ed614818565b5b92915050565b7f526f756e647472697020746f6f20686967680000000000000000000000000000600082015250565b600061532a601283613ca5565b9150615335826152f4565b602082019050919050565b600060208201905081810360008301526153598161531d565b9050919050565b6000819050919050565b600061538561538061537b84615360565b61520f565b613db4565b9050919050565b6153958161536a565b82525050565b600060c0820190506153b060008301896142a8565b6153bd6020830188613e60565b6153ca604083018761538c565b6153d7606083018661538c565b6153e460808301856142a8565b6153f160a0830184613e60565b979650505050505050565b60008151905061540b81613dbe565b92915050565b60008060006060848603121561542a57615429613d4c565b5b6000615438868287016153fc565b9350506020615449868287016153fc565b925050604061545a868287016153fc565b9150509250925092565b7f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000600082015250565b600061549a601d83613ca5565b91506154a582615464565b602082019050919050565b600060208201905081810360008301526154c98161548d565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b6000615506601183613ca5565b9150615511826154d0565b602082019050919050565b60006020820190508181036000830152615535816154f9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155a081613d76565b82525050565b60006155b28383615597565b60208301905092915050565b6000602082019050919050565b60006155d68261556b565b6155e08185615576565b93506155eb83615587565b8060005b8381101561561c57815161560388826155a6565b975061560e836155be565b9250506001810190506155ef565b5085935050505092915050565b600060a08201905061563e6000830188613e60565b61564b602083018761538c565b818103604083015261565d81866155cb565b905061566c60608301856142a8565b6156796080830184613e60565b969550505050505056fea26469706673582212202a6ff3cb6cdb8e7dc28d8f71be8b7dbdbe82c99ad9d3c2b230784253551093a064736f6c63430008110033

Deployed Bytecode Sourcemap

2058:14734:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6577:463;;;;;;;;;;;;;:::i;:::-;;5049:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5378:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4788:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9711:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9947:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10379:285;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;5793:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4879:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15877:912;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15626:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11952:199;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;5132:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10285:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9563:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;4962:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11465:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11237:225;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;5578:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12154:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6166:117;;;;;;;;;;;;;:::i;:::-;;15203:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5240:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12587:432;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1245:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10874:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10667:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6577:463;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;3815:4:::1;3802:10;;:17;;;;;;;;;;;;;;;;;;6674:1:::2;6652:24;;:10;;;;;;;;;;;:24;;;6644:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6725:1;6703:21;:23;6695:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;6787:1;6762:9;:24;6780:4;6762:24;;;;;;;;;;;;;;;;:26;6754:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;6850:18;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6832:58;;;6899:4;6906:18;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6832:100;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6819:10;;:113;;;;;;;;;;;;;;;;;;6937:69;6951:9;:24;6969:4;6951:24;;;;;;;;;;;;;;;;6977:21;7000:5;6937:13;:69::i;:::-;7031:4;7011:5;:17;7017:10;;;;;;;;;;;7011:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;3837:5:::1;3824:10;;:18;;;;;;;;;;;;;;;;;;6577:463::o:0;5049:80::-;5097:13;5121:5;;;;;;;;;;;;;;;;;5114:12;;5049:80;:::o;5378:195::-;5453:4;5499:6;5464:11;:23;5476:10;5464:23;;;;;;;;;;;;;;;:32;5488:7;5464:32;;;;;;;;;;;;;;;:41;;;;5536:7;5515:37;;5524:10;5515:37;;;5545:6;5515:37;;;;;;:::i;:::-;;;;;;;;5564:4;5557:11;;5378:195;;;;:::o;4788:88::-;4843:7;2131:1;2191:2;:13;;;;:::i;:::-;2176:11;:29;;;;:::i;:::-;4854:19;;4788:88;:::o;9711:233::-;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;9806:8:::1;:18;;;;9818:6;9806:18;9802:72;;;9837:5;:13;9843:6;9837:13;;;;;;;;;;;;;;;;;;;;;;;;;9836:14;9828:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;9802:72;9898:6;9878:7;:17;9887:6;9878:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;9931:8;9909:9;:19;9920:6;9909:19;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;9711:233:::0;;;:::o;9947:335::-;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;10070:10:::1;;;;;;;;;;;10049:31;;:17;:31;;::::0;10041:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10145:15;10118:5;:24;10124:17;10118:24;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;10170:15;10166:112;;;10223:5;10194:7;:26;10202:17;10194:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;10266:5;10235:9;:28;10245:17;10235:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;10166:112;9947:335:::0;;:::o;10379:285::-;10424:12;10438:13;10453:22;10477:24;10503:15;10520:22;10559:11;;;;;;;;;;;10572:12;;;;;;;;;;;10586:19;;;;;;;;;;;10607:21;;;;;;;;;;;10630:12;;;;;;;;;;;10644:14;;;;;;;;;;;10550:109;;;;;;;;;;;;10379:285;;;;;;:::o;5793:368::-;5893:4;5912:25;5930:6;5912:17;:25::i;:::-;5904:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;6001:17;5966:11;:19;5978:6;5966:19;;;;;;;;;;;;;;;:31;5986:10;5966:31;;;;;;;;;;;;;;;;:52;5963:142;;6093:6;6059:11;:19;6071:6;6059:19;;;;;;;;;;;;;;;:31;6079:10;6059:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;6025:11;:19;6037:6;6025:19;;;;;;;;;;;;;;;:31;6045:10;6025:31;;;;;;;;;;;;;;;:74;;;;5963:142;6116:40;6130:6;6138:9;6149:6;6116:13;:40::i;:::-;6109:47;;5793:368;;;;;:::o;4879:80::-;4931:5;2131:1;4940:16;;4879:80;:::o;15877:912::-;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;16015:3:::1;15995:9;;:16;;:23;;15987:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16093:12;;:19;;16073:9;;:16;;:39;16065:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;16166:20;16205:6:::0;16201:116:::1;16219:9;;:16;;16215:1;:20;16201:116;;;2131:1;16291:2;:13;;;;:::i;:::-;16273:12;;16286:1;16273:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;16256:49;;;;;:::i;:::-;;;16237:3;;;;;:::i;:::-;;;;16201:116;;;;16360:12;16335:9;:21;16345:10;16335:21;;;;;;;;;;;;;;;;:37;;16327:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;16432:6;16428:288;16446:9;;:16;;16442:1;:20;16428:288;;;2131:1;16527:2;:13;;;;:::i;:::-;16509:12;;16522:1;16509:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;16483:9;:21;16493:10;16483:21;;;;;;;;;;;;;;;;:58;;;;;;;:::i;:::-;;;;;;;;2131:1;16602:2;:13;;;;:::i;:::-;16584:12;;16597:1;16584:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;16556:9;:23;16566:9;;16576:1;16566:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;16556:23;;;;;;;;;;;;;;;;:60;;;;;;;:::i;:::-;;;;;;;;16648:9;;16658:1;16648:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;16627:70;;16636:10;16627:70;;;2131:1;16681:2;:13;;;;:::i;:::-;16663:12;;16676:1;16663:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;16627:70;;;;;;:::i;:::-;;;;;;;;16464:3;;;;;:::i;:::-;;;;16428:288;;;;16733:48;16750:9;;:16;;16768:12;16733:48;;;;;;;:::i;:::-;;;;;;;;15976:813;15877:912:::0;;;;:::o;15626:246::-;15676:24;15703:21;15713:10;15703:9;:21::i;:::-;15676:48;;15747:16;15737:6;:26;;15729:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;15794:31;15806:10;15818:6;15794:11;:31::i;:::-;15848:10;15835:32;;;15860:6;15835:32;;;;;;:::i;:::-;;;;;;;;15671:201;15626:246;:::o;11952:199::-;12000:13;12015:17;12034:18;12054;12089:12;;12103:16;;12121:11;;12134;;12080:66;;;;;;;;11952:199;;;;:::o;5132:105::-;5198:7;5216:9;:18;5226:7;5216:18;;;;;;;;;;;;;;;;5209:25;;5132:105;;;:::o;10285:89::-;10338:4;10356:5;:13;10362:6;10356:13;;;;;;;;;;;;;;;;;;;;;;;;;10349:20;;10285:89;;;:::o;9563:145::-;9625:11;9638:13;9667:7;:15;9675:6;9667:15;;;;;;;;;;;;;;;;;;;;;;;;;9684:9;:17;9694:6;9684:17;;;;;;;;;;;;;;;;;;;;;;;;;9658:45;;;;9563:145;;;:::o;4962:84::-;5012:13;5036:7;;;;;;;;;;;;;;;;;5029:14;;4962:84;:::o;11465:482::-;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;11587:5:::1;:19;11593:12;11587:19;;;;;;;;;;;;;;;;;;;;;;;;;11586:20;:46;;;;;11611:5;:21;11617:14;11611:21;;;;;;;;;;;;;;;;;;;;;;;;;11610:22;11586:46;:68;;;;;11637:5;:17;11643:10;11637:17;;;;;;;;;;;;;;;;;;;;;;;;;11636:18;11586:68;11578:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;11714:12;11687:16;;:40;;;;;;;;;;;;;;;;;;11761:14;11732:18;;:44;;;;;;;;;;;;;;;;;;11792:10;11781:8;;:21;;;;;;;;;;;;;;;;;;11831:4;11807:7;:21;11815:12;11807:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;11866:4;11840:7;:23;11848:14;11840:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;11901:4;11875:9;:23;11885:12;11875:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;11938:4;11910:9;:25;11920:14;11910:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;11465:482:::0;;;:::o;11237:225::-;11284:13;11299:17;11318;11337:19;11358:15;11390:6;;;;;;;;;;;11398:10;;;;;;;;;;;11410:16;;;;;;;;;;;11428:18;;;;;;;;;;;11448:8;;;;;;;;;;;11381:76;;;;;;;;;;11237:225;;;;;:::o;5578:210::-;5658:4;5677:29;5695:10;5677:17;:29::i;:::-;5669:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;5739:44;5753:10;5765:9;5776:6;5739:13;:44::i;:::-;5732:51;;5578:210;;;;:::o;12154:430::-;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;12254:16:::1;12313:1;12306:4;12288:15;12273:30;;2131:1;2191:2;:13;;;;:::i;:::-;2176:11;:29;;;;:::i;:::-;12273:30;;;;:::i;:::-;:37;;;;:::i;:::-;:41;;;;:::i;:::-;12254:60;;12339:12;;12327:8;:24;;12319:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;12392:8;12377:12;:23;;;;12405:20;12472:1;12465:4;12443:19;12428:34;;2131:1;2191:2;:13;;;;:::i;:::-;2176:11;:29;;;;:::i;:::-;12428:34;;;;:::i;:::-;:41;;;;:::i;:::-;:45;;;;:::i;:::-;12405:68;;12502:16;;12486:12;:32;;12478:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12567:12;12548:16;:31;;;;12249:335;;12154:430:::0;;:::o;6166:117::-;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;6222:12:::1;;;;;;;;;;;6221:13;6213:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6264:14;:12;:14::i;:::-;6166:117::o:0;15203:418::-;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;15292:10:::1;15288:168;;;15310:23;15336:24;15354:4;15336:9;:24::i;:::-;15310:50;;15392:1;15374:15;:19;15366:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;15413:37;15434:15;15413:20;:37::i;:::-;15304:152;15288:168;15464:7;15460:157;;;15480:18;15501:21;15480:42;;15549:1;15536:10;:14;15528:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;15570:40;15588:21;15570:17;:40::i;:::-;15473:144;15460:157;15203:418:::0;;:::o;5240:133::-;5324:7;5342:11;:19;5354:6;5342:19;;;;;;;;;;;;;;;:28;5362:7;5342:28;;;;;;;;;;;;;;;;5335:35;;5240:133;;;;:::o;12587:432::-;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;12749:10:::1;12723:36;;12738:8;12723:23;;2131:1;2191:2;:13;;;;:::i;:::-;2176:11;:29;;;;:::i;:::-;12723:23;;;;:::i;:::-;:36;;;;:::i;:::-;12709:11;:50;;;;12804:10;12778:36;;12793:8;12778:23;;2131:1;2191:2;:13;;;;:::i;:::-;2176:11;:29;;;;:::i;:::-;12778:23;;;;:::i;:::-;:36;;;;:::i;:::-;12764:11;:50;;;;12840:11;;12827;;:24;;12819:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;12908:6;2131:1;2191:2;:13;;;;:::i;:::-;2176:11;:29;;;;:::i;:::-;12893:21;;;;:::i;:::-;12881:11;;:33;12873:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;12982:3;2131:1;2191:2;:13;;;;:::i;:::-;2176:11;:29;;;;:::i;:::-;12967:18;;;;:::i;:::-;12955:11;;:30;12947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12587:432:::0;;;;:::o;1245:131::-;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;1328:8:::1;1319:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1343:30;1364:8;1343:30;;;;;;:::i;:::-;;;;;;;;1245:131:::0;:::o;10874:358::-;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;11036:12:::1;11021;;:27;;;;;;;;;;;;;;;;;;11075:15;11053:19;;:37;;;;;;;;;;;;;;;;;;11119:17;11095:21;;:41;;;;;;;;;;;;;;;;;;11210:17;11192:15;11177:12;11159:15;:30;;;;:::i;:::-;:48;;;;:::i;:::-;:68;;;;:::i;:::-;11141:15;;:86;;;;;;;;;;;;;;;;;;10874:358:::0;;;;:::o;10667:202::-;1182:6;;;;;;;;;;1168:20;;:10;:20;;;1160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;10781:2:::1;10767:10;10755:9;:22;;;;:::i;:::-;:28;;;;10747:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;10825:9;10811:11;;:23;;;;;;;;;;;;;;;;;;10854:10;10839:12;;:25;;;;;;;;;;;;;;;;;;10667:202:::0;;:::o;7045:358::-;7142:24;7169:8;;;;;;;;;;;7142:35;;7187:8;7182:50;;;7227:1;7200:29;;7182:50;7236:28;7251:12;7236:14;:28::i;:::-;7269:18;;;;;;;;;;;:34;;;7311:13;7336:4;7343:12;7357:1;7360;7363:16;7381:15;7269:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;7137:266;7045:358;;;:::o;8911:252::-;8976:4;8986:16;9005:5;8986:24;;9020:12;;;;;;;;;;;9015:118;;;9051:4;9037:18;;9015:118;;;9072:7;:15;9080:6;9072:15;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;9091:9;:17;9101:6;9091:17;;;;;;;;;;;;;;;;;;;;;;;;;9072:36;9068:65;;;9126:4;9112:18;;9068:65;9015:118;9147:11;9140:18;;;8911:252;;;:::o;7568:883::-;7660:4;7697:1;7679:20;;:6;:20;;;7671:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;7743:12;;;;;;;;;;;7738:89;;7767:7;:15;7775:6;7767:15;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;7786:9;:17;7796:6;7786:17;;;;;;;;;;;;;;;;;;;;;;;;;7767:36;7759:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7738:89;7837:10;;;;;;;;;;;7836:11;:31;;;;;7851:5;:16;7857:9;7851:16;;;;;;;;;;;;;;;;;;;;;;;;;7836:31;7831:64;;;7872:20;:18;:20::i;:::-;7831:64;7926:4;7908:23;;:6;:23;;;;:53;;;;;7956:4;7935:26;;:9;:26;;;;7908:53;:73;;;;;7975:6;;;;;;;;;;7965:16;;:6;:16;;;;7908:73;7903:155;;;7994:39;8007:6;8015:9;8026:6;7994:12;:39::i;:::-;7986:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;7903:155;8062:18;8083:40;8097:6;8105:9;8116:6;8083:13;:40::i;:::-;8062:61;;8128:23;8163:10;8154:6;:19;;;;:::i;:::-;8128:45;;8218:6;8198:9;:17;8208:6;8198:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;8178:9;:17;8188:6;8178:17;;;;;;;;;;;;;;;:46;;;;8247:1;8234:10;:14;8229:91;;;8307:10;8280:9;:24;8298:4;8280:24;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;8253:9;:24;8271:4;8253:24;;;;;;;;;;;;;;;:64;;;;8229:91;8370:15;8347:9;:20;8357:9;8347:20;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;8324:9;:20;8334:9;8324:20;;;;;;;;;;;;;;;:61;;;;8412:9;8395:35;;8404:6;8395:35;;;8423:6;8395:35;;;;;;:::i;:::-;;;;;;;;8442:4;8435:11;;;;7568:883;;;;;:::o;13024:225::-;13108:1;13099:6;:10;13094:151;;;13143:6;13118:9;:21;13128:10;13118:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;13181:6;13155:9;:22;3391:1;13155:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;3391:1;13198:41;;13207:10;13198:41;;;13232:6;13198:41;;;;;;:::i;:::-;;;;;;;;13094:151;13024:225;;:::o;7408:155::-;7484:3;7480:1;2131;2191:2;:13;;;;:::i;:::-;2176:11;:29;;;;:::i;:::-;7465:16;;;;:::i;:::-;:22;;;;:::i;:::-;7446:12;:41;;;;7531:3;7527:1;2131;2191:2;:13;;;;:::i;:::-;2176:11;:29;;;;:::i;:::-;7512:16;;;;:::i;:::-;:22;;;;:::i;:::-;7493:16;:41;;;;7554:4;7539:12;;:19;;;;;;;;;;;;;;;;;;7408:155::o;14376:333::-;14440:27;14455:11;14440:14;:27::i;:::-;14472:21;14510:1;14496:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14472:40;;14535:4;14517;14522:1;14517:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;14555:18;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14545:4;14550:1;14545:7;;;;;;;;:::i;:::-;;;;;;;:35;;;;;;;;;;;14585:18;;;;;;;;;;;:69;;;14655:11;14667:1;14669:4;14682;14688:15;14585:119;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14435:274;14376:333;:::o;14714:484::-;14770:21;14816;;;;;;;;;;;14794:19;;;;;;;;;;;:43;;;;:::i;:::-;14770:67;;14863:1;14846:14;:18;;;14842:352;;;14872:23;14929:14;14898:45;;14907:19;;;;;;;;;;;14898:28;;:6;:28;;;;:::i;:::-;:45;;;;:::i;:::-;14872:71;;14949:25;15010:14;14977:47;;14986:21;;;;;;;;;;;14977:30;;:6;:30;;;;:::i;:::-;:47;;;;:::i;:::-;14949:75;;15053:1;15035:15;:19;15030:74;;;15059:16;;;;;;;;;;;:25;;:42;15085:15;15059:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15030:74;15134:1;15114:17;:21;15109:80;;;15140:18;;;;;;;;;;;:27;;:46;15168:17;15140:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15109:80;14866:328;;14842:352;14765:433;14714:484;:::o;6288:284::-;6402:12;6353:11;:26;6373:4;6353:26;;;;;;;;;;;;;;;:46;3481:42;6353:46;;;;;;;;;;;;;;;;:61;6348:220;;;6472:17;6423:11;:26;6443:4;6423:26;;;;;;;;;;;;;;;:46;3481:42;6423:46;;;;;;;;;;;;;;;:66;;;;3481:42;6500:62;;6517:4;6500:62;;;6544:17;6500:62;;;;;;:::i;:::-;;;;;;;;6348:220;6288:284;:::o;13254:1117::-;3815:4;3802:10;;:17;;;;;;;;;;;;;;;;;;13309:27:::1;13339:24;13357:4;13339:9;:24::i;:::-;13309:54;;13398:11;;13375:19;:34;;:50;;;;;13413:12;;;;;;;;;;;13375:50;13370:997;;;13462:11;;13439:19;:34;13434:80;;13500:11;;13478:33;;13434:80;13521:20;13599:1;13581:15;;;;;;;;;;;13544:52;;13566:12;;;;;;;;;;;13544:34;;:19;:34;;;;:::i;:::-;:52;;;;:::i;:::-;:56;;;;:::i;:::-;13521:79;;13606:21;13669:15:::0;::::1;;;;;;;;;;13630:54;;13652:14;;;;;;;;;;;13630:36;;:19;:36;;;;:::i;:::-;:54;;;;:::i;:::-;13606:78;;13690:41;13710:4;13717:13;13690:11;:41::i;:::-;13742:21;13803:13;13788:12;13766:19;:34;;;;:::i;:::-;:50;;;;:::i;:::-;13742:74;;2131:1;13842:2;:13;;;;:::i;:::-;13826;:29;13822:407;;;13865:19;13887:21;13865:43;;13915:35;13936:13;13915:20;:35::i;:::-;13957:19;14003:11;13979:21;:35;;;;:::i;:::-;13957:57;;14041:1;14026:12:::0;::::1;;;;;;;;;;:16;;;14021:202;;;14053:21;14106:15:::0;::::1;;;;;;;;;;14077:44;;14091:12;;;;;;;;;;;14077:26;;:11;:26;;;;:::i;:::-;:44;;;;:::i;:::-;14053:68;;14130:28;14145:12;14130:14;:28::i;:::-;14166:49;14180:12;14194:13;14209:5;14166:13;:49::i;:::-;14045:178;14021:202;13858:371;;13822:407;14234:27;14264:21;14234:51;;14316:1;14294:19;:23;14291:71;;;14321:38;14339:19;14321:17;:38::i;:::-;14291:71;13428:939;;;;13370:997;13304:1067;3837:5:::0;3824:10;;:18;;;;;;;;;;;;;;;;;;13254:1117::o;8456:450::-;8560:4;8571:21;8595:4;8571:28;;8609:12;;;;;;;;;;;:34;;;;;8626:9;:17;8636:6;8626:17;;;;;;;;;;;;;;;;;;;;;;;;;8625:18;8609:34;:59;;;;;8648:9;:20;8658:9;8648:20;;;;;;;;;;;;;;;;;;;;;;;;;8647:21;8609:59;8604:270;;;8699:12;;8682:14;:29;8677:192;;;8735:5;8716:24;;8677:192;;;8759:5;:16;8765:9;8759:16;;;;;;;;;;;;;;;;;;;;;;;;;8758:17;:79;;;;;8820:16;;8803:14;8780:9;:20;8790:9;8780:20;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:56;8758:79;8753:116;;;8861:5;8842:24;;8753:116;8677:192;8604:270;8885:16;8878:23;;;8456:450;;;;;:::o;9168:388::-;9265:7;9279:17;9307:12;;;;;;;;;;;9306:13;:32;;;;9323:7;:15;9331:6;9323:15;;;;;;;;;;;;;;;;;;;;;;;;;9306:32;:54;;;;9342:7;:18;9350:9;9342:18;;;;;;;;;;;;;;;;;;;;;;;;;9306:54;9301:230;;;9377:1;9365:13;;9301:230;;;9395:5;:13;9401:6;9395:13;;;;;;;;;;;;;;;;;;;;;;;;;9390:141;;;9448:3;9434:11;;;;;;;;;;;9425:20;;:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;9413:38;;9390:141;;;9468:5;:16;9474:9;9468:16;;;;;;;;;;;;;;;;;;;;;;;;;9463:68;;;9525:3;9510:12;;;;;;;;;;;9501:21;;:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;9489:39;;9463:68;9390:141;9301:230;9542:9;9535:16;;;9168:388;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:116::-;3868:21;3883:5;3868:21;:::i;:::-;3861:5;3858:32;3848:60;;3904:1;3901;3894:12;3848:60;3798:116;:::o;3920:133::-;3963:5;4001:6;3988:20;3979:29;;4017:30;4041:5;4017:30;:::i;:::-;3920:133;;;;:::o;4059:607::-;4130:6;4138;4146;4195:2;4183:9;4174:7;4170:23;4166:32;4163:119;;;4201:79;;:::i;:::-;4163:119;4321:1;4346:53;4391:7;4382:6;4371:9;4367:22;4346:53;:::i;:::-;4336:63;;4292:117;4448:2;4474:50;4516:7;4507:6;4496:9;4492:22;4474:50;:::i;:::-;4464:60;;4419:115;4573:2;4599:50;4641:7;4632:6;4621:9;4617:22;4599:50;:::i;:::-;4589:60;;4544:115;4059:607;;;;;:::o;4672:468::-;4737:6;4745;4794:2;4782:9;4773:7;4769:23;4765:32;4762:119;;;4800:79;;:::i;:::-;4762:119;4920:1;4945:53;4990:7;4981:6;4970:9;4966:22;4945:53;:::i;:::-;4935:63;;4891:117;5047:2;5073:50;5115:7;5106:6;5095:9;5091:22;5073:50;:::i;:::-;5063:60;;5018:115;4672:468;;;;;:::o;5146:86::-;5181:7;5221:4;5214:5;5210:16;5199:27;;5146:86;;;:::o;5238:112::-;5321:22;5337:5;5321:22;:::i;:::-;5316:3;5309:35;5238:112;;:::o;5356:89::-;5392:7;5432:6;5425:5;5421:18;5410:29;;5356:89;;;:::o;5451:115::-;5536:23;5553:5;5536:23;:::i;:::-;5531:3;5524:36;5451:115;;:::o;5572:743::-;5789:4;5827:3;5816:9;5812:19;5804:27;;5841:67;5905:1;5894:9;5890:17;5881:6;5841:67;:::i;:::-;5918:68;5982:2;5971:9;5967:18;5958:6;5918:68;:::i;:::-;5996:70;6062:2;6051:9;6047:18;6038:6;5996:70;:::i;:::-;6076;6142:2;6131:9;6127:18;6118:6;6076:70;:::i;:::-;6156:71;6222:3;6211:9;6207:19;6198:6;6156:71;:::i;:::-;6237;6303:3;6292:9;6288:19;6279:6;6237:71;:::i;:::-;5572:743;;;;;;;;;:::o;6321:619::-;6398:6;6406;6414;6463:2;6451:9;6442:7;6438:23;6434:32;6431:119;;;6469:79;;:::i;:::-;6431:119;6589:1;6614:53;6659:7;6650:6;6639:9;6635:22;6614:53;:::i;:::-;6604:63;;6560:117;6716:2;6742:53;6787:7;6778:6;6767:9;6763:22;6742:53;:::i;:::-;6732:63;;6687:118;6844:2;6870:53;6915:7;6906:6;6895:9;6891:22;6870:53;:::i;:::-;6860:63;;6815:118;6321:619;;;;;:::o;6946:214::-;7035:4;7073:2;7062:9;7058:18;7050:26;;7086:67;7150:1;7139:9;7135:17;7126:6;7086:67;:::i;:::-;6946:214;;;;:::o;7166:117::-;7275:1;7272;7265:12;7289:117;7398:1;7395;7388:12;7412:117;7521:1;7518;7511:12;7552:568;7625:8;7635:6;7685:3;7678:4;7670:6;7666:17;7662:27;7652:122;;7693:79;;:::i;:::-;7652:122;7806:6;7793:20;7783:30;;7836:18;7828:6;7825:30;7822:117;;;7858:79;;:::i;:::-;7822:117;7972:4;7964:6;7960:17;7948:29;;8026:3;8018:4;8010:6;8006:17;7996:8;7992:32;7989:41;7986:128;;;8033:79;;:::i;:::-;7986:128;7552:568;;;;;:::o;8143:::-;8216:8;8226:6;8276:3;8269:4;8261:6;8257:17;8253:27;8243:122;;8284:79;;:::i;:::-;8243:122;8397:6;8384:20;8374:30;;8427:18;8419:6;8416:30;8413:117;;;8449:79;;:::i;:::-;8413:117;8563:4;8555:6;8551:17;8539:29;;8617:3;8609:4;8601:6;8597:17;8587:8;8583:32;8580:41;8577:128;;;8624:79;;:::i;:::-;8577:128;8143:568;;;;;:::o;8717:934::-;8839:6;8847;8855;8863;8912:2;8900:9;8891:7;8887:23;8883:32;8880:119;;;8918:79;;:::i;:::-;8880:119;9066:1;9055:9;9051:17;9038:31;9096:18;9088:6;9085:30;9082:117;;;9118:79;;:::i;:::-;9082:117;9231:80;9303:7;9294:6;9283:9;9279:22;9231:80;:::i;:::-;9213:98;;;;9009:312;9388:2;9377:9;9373:18;9360:32;9419:18;9411:6;9408:30;9405:117;;;9441:79;;:::i;:::-;9405:117;9554:80;9626:7;9617:6;9606:9;9602:22;9554:80;:::i;:::-;9536:98;;;;9331:313;8717:934;;;;;;;:::o;9657:329::-;9716:6;9765:2;9753:9;9744:7;9740:23;9736:32;9733:119;;;9771:79;;:::i;:::-;9733:119;9891:1;9916:53;9961:7;9952:6;9941:9;9937:22;9916:53;:::i;:::-;9906:63;;9862:117;9657:329;;;;:::o;9992:553::-;10169:4;10207:3;10196:9;10192:19;10184:27;;10221:71;10289:1;10278:9;10274:17;10265:6;10221:71;:::i;:::-;10302:72;10370:2;10359:9;10355:18;10346:6;10302:72;:::i;:::-;10384;10452:2;10441:9;10437:18;10428:6;10384:72;:::i;:::-;10466;10534:2;10523:9;10519:18;10510:6;10466:72;:::i;:::-;9992:553;;;;;;;:::o;10551:329::-;10610:6;10659:2;10647:9;10638:7;10634:23;10630:32;10627:119;;;10665:79;;:::i;:::-;10627:119;10785:1;10810:53;10855:7;10846:6;10835:9;10831:22;10810:53;:::i;:::-;10800:63;;10756:117;10551:329;;;;:::o;10886:308::-;10995:4;11033:2;11022:9;11018:18;11010:26;;11046:65;11108:1;11097:9;11093:17;11084:6;11046:65;:::i;:::-;11121:66;11183:2;11172:9;11168:18;11159:6;11121:66;:::i;:::-;10886:308;;;;;:::o;11200:619::-;11277:6;11285;11293;11342:2;11330:9;11321:7;11317:23;11313:32;11310:119;;;11348:79;;:::i;:::-;11310:119;11468:1;11493:53;11538:7;11529:6;11518:9;11514:22;11493:53;:::i;:::-;11483:63;;11439:117;11595:2;11621:53;11666:7;11657:6;11646:9;11642:22;11621:53;:::i;:::-;11611:63;;11566:118;11723:2;11749:53;11794:7;11785:6;11774:9;11770:22;11749:53;:::i;:::-;11739:63;;11694:118;11200:619;;;;;:::o;11825:118::-;11912:24;11930:5;11912:24;:::i;:::-;11907:3;11900:37;11825:118;;:::o;11949:664::-;12154:4;12192:3;12181:9;12177:19;12169:27;;12206:71;12274:1;12263:9;12259:17;12250:6;12206:71;:::i;:::-;12287:72;12355:2;12344:9;12340:18;12331:6;12287:72;:::i;:::-;12369;12437:2;12426:9;12422:18;12413:6;12369:72;:::i;:::-;12451;12519:2;12508:9;12504:18;12495:6;12451:72;:::i;:::-;12533:73;12601:3;12590:9;12586:19;12577:6;12533:73;:::i;:::-;11949:664;;;;;;;;:::o;12619:120::-;12691:23;12708:5;12691:23;:::i;:::-;12684:5;12681:34;12671:62;;12729:1;12726;12719:12;12671:62;12619:120;:::o;12745:137::-;12790:5;12828:6;12815:20;12806:29;;12844:32;12870:5;12844:32;:::i;:::-;12745:137;;;;:::o;12888:470::-;12954:6;12962;13011:2;12999:9;12990:7;12986:23;12982:32;12979:119;;;13017:79;;:::i;:::-;12979:119;13137:1;13162:52;13206:7;13197:6;13186:9;13182:22;13162:52;:::i;:::-;13152:62;;13108:116;13263:2;13289:52;13333:7;13324:6;13313:9;13309:22;13289:52;:::i;:::-;13279:62;;13234:117;12888:470;;;;;:::o;13364:462::-;13426:6;13434;13483:2;13471:9;13462:7;13458:23;13454:32;13451:119;;;13489:79;;:::i;:::-;13451:119;13609:1;13634:50;13676:7;13667:6;13656:9;13652:22;13634:50;:::i;:::-;13624:60;;13580:114;13733:2;13759:50;13801:7;13792:6;13781:9;13777:22;13759:50;:::i;:::-;13749:60;;13704:115;13364:462;;;;;:::o;13832:474::-;13900:6;13908;13957:2;13945:9;13936:7;13932:23;13928:32;13925:119;;;13963:79;;:::i;:::-;13925:119;14083:1;14108:53;14153:7;14144:6;14133:9;14129:22;14108:53;:::i;:::-;14098:63;;14054:117;14210:2;14236:53;14281:7;14272:6;14261:9;14257:22;14236:53;:::i;:::-;14226:63;;14181:118;13832:474;;;;;:::o;14312:93::-;14348:7;14388:10;14381:5;14377:22;14366:33;;14312:93;;;:::o;14411:120::-;14483:23;14500:5;14483:23;:::i;:::-;14476:5;14473:34;14463:62;;14521:1;14518;14511:12;14463:62;14411:120;:::o;14537:137::-;14582:5;14620:6;14607:20;14598:29;;14636:32;14662:5;14636:32;:::i;:::-;14537:137;;;;:::o;14680:757::-;14762:6;14770;14778;14786;14835:3;14823:9;14814:7;14810:23;14806:33;14803:120;;;14842:79;;:::i;:::-;14803:120;14962:1;14987:52;15031:7;15022:6;15011:9;15007:22;14987:52;:::i;:::-;14977:62;;14933:116;15088:2;15114:52;15158:7;15149:6;15138:9;15134:22;15114:52;:::i;:::-;15104:62;;15059:117;15215:2;15241:52;15285:7;15276:6;15265:9;15261:22;15241:52;:::i;:::-;15231:62;;15186:117;15342:2;15368:52;15412:7;15403:6;15392:9;15388:22;15368:52;:::i;:::-;15358:62;;15313:117;14680:757;;;;;;;:::o;15443:104::-;15488:7;15517:24;15535:5;15517:24;:::i;:::-;15506:35;;15443:104;;;:::o;15553:138::-;15634:32;15660:5;15634:32;:::i;:::-;15627:5;15624:43;15614:71;;15681:1;15678;15671:12;15614:71;15553:138;:::o;15697:155::-;15751:5;15789:6;15776:20;15767:29;;15805:41;15840:5;15805:41;:::i;:::-;15697:155;;;;:::o;15858:345::-;15925:6;15974:2;15962:9;15953:7;15949:23;15945:32;15942:119;;;15980:79;;:::i;:::-;15942:119;16100:1;16125:61;16178:7;16169:6;16158:9;16154:22;16125:61;:::i;:::-;16115:71;;16071:125;15858:345;;;;:::o;16209:757::-;16291:6;16299;16307;16315;16364:3;16352:9;16343:7;16339:23;16335:33;16332:120;;;16371:79;;:::i;:::-;16332:120;16491:1;16516:52;16560:7;16551:6;16540:9;16536:22;16516:52;:::i;:::-;16506:62;;16462:116;16617:2;16643:52;16687:7;16678:6;16667:9;16663:22;16643:52;:::i;:::-;16633:62;;16588:117;16744:2;16770:52;16814:7;16805:6;16794:9;16790:22;16770:52;:::i;:::-;16760:62;;16715:117;16871:2;16897:52;16941:7;16932:6;16921:9;16917:22;16897:52;:::i;:::-;16887:62;;16842:117;16209:757;;;;;;;:::o;16972:118::-;17043:22;17059:5;17043:22;:::i;:::-;17036:5;17033:33;17023:61;;17080:1;17077;17070:12;17023:61;16972:118;:::o;17096:135::-;17140:5;17178:6;17165:20;17156:29;;17194:31;17219:5;17194:31;:::i;:::-;17096:135;;;;:::o;17237:466::-;17301:6;17309;17358:2;17346:9;17337:7;17333:23;17329:32;17326:119;;;17364:79;;:::i;:::-;17326:119;17484:1;17509:51;17552:7;17543:6;17532:9;17528:22;17509:51;:::i;:::-;17499:61;;17455:115;17609:2;17635:51;17678:7;17669:6;17658:9;17654:22;17635:51;:::i;:::-;17625:61;;17580:116;17237:466;;;;;:::o;17709:230::-;17849:34;17845:1;17837:6;17833:14;17826:58;17918:13;17913:2;17905:6;17901:15;17894:38;17709:230;:::o;17945:366::-;18087:3;18108:67;18172:2;18167:3;18108:67;:::i;:::-;18101:74;;18184:93;18273:3;18184:93;:::i;:::-;18302:2;18297:3;18293:12;18286:19;;17945:366;;;:::o;18317:419::-;18483:4;18521:2;18510:9;18506:18;18498:26;;18570:9;18564:4;18560:20;18556:1;18545:9;18541:17;18534:47;18598:131;18724:4;18598:131;:::i;:::-;18590:139;;18317:419;;;:::o;18742:159::-;18882:11;18878:1;18870:6;18866:14;18859:35;18742:159;:::o;18907:365::-;19049:3;19070:66;19134:1;19129:3;19070:66;:::i;:::-;19063:73;;19145:93;19234:3;19145:93;:::i;:::-;19263:2;19258:3;19254:12;19247:19;;18907:365;;;:::o;19278:419::-;19444:4;19482:2;19471:9;19467:18;19459:26;;19531:9;19525:4;19521:20;19517:1;19506:9;19502:17;19495:47;19559:131;19685:4;19559:131;:::i;:::-;19551:139;;19278:419;;;:::o;19703:168::-;19843:20;19839:1;19831:6;19827:14;19820:44;19703:168;:::o;19877:366::-;20019:3;20040:67;20104:2;20099:3;20040:67;:::i;:::-;20033:74;;20116:93;20205:3;20116:93;:::i;:::-;20234:2;20229:3;20225:12;20218:19;;19877:366;;;:::o;20249:419::-;20415:4;20453:2;20442:9;20438:18;20430:26;;20502:9;20496:4;20492:20;20488:1;20477:9;20473:17;20466:47;20530:131;20656:4;20530:131;:::i;:::-;20522:139;;20249:419;;;:::o;20674:171::-;20814:23;20810:1;20802:6;20798:14;20791:47;20674:171;:::o;20851:366::-;20993:3;21014:67;21078:2;21073:3;21014:67;:::i;:::-;21007:74;;21090:93;21179:3;21090:93;:::i;:::-;21208:2;21203:3;21199:12;21192:19;;20851:366;;;:::o;21223:419::-;21389:4;21427:2;21416:9;21412:18;21404:26;;21476:9;21470:4;21466:20;21462:1;21451:9;21447:17;21440:47;21504:131;21630:4;21504:131;:::i;:::-;21496:139;;21223:419;;;:::o;21648:143::-;21705:5;21736:6;21730:13;21721:22;;21752:33;21779:5;21752:33;:::i;:::-;21648:143;;;;:::o;21797:351::-;21867:6;21916:2;21904:9;21895:7;21891:23;21887:32;21884:119;;;21922:79;;:::i;:::-;21884:119;22042:1;22067:64;22123:7;22114:6;22103:9;22099:22;22067:64;:::i;:::-;22057:74;;22013:128;21797:351;;;;:::o;22154:332::-;22275:4;22313:2;22302:9;22298:18;22290:26;;22326:71;22394:1;22383:9;22379:17;22370:6;22326:71;:::i;:::-;22407:72;22475:2;22464:9;22460:18;22451:6;22407:72;:::i;:::-;22154:332;;;;;:::o;22492:180::-;22540:77;22537:1;22530:88;22637:4;22634:1;22627:15;22661:4;22658:1;22651:15;22678:102;22720:8;22767:5;22764:1;22760:13;22739:34;;22678:102;;;:::o;22786:848::-;22847:5;22854:4;22878:6;22869:15;;22902:5;22893:14;;22916:712;22937:1;22927:8;22924:15;22916:712;;;23032:4;23027:3;23023:14;23017:4;23014:24;23011:50;;;23041:18;;:::i;:::-;23011:50;23091:1;23081:8;23077:16;23074:451;;;23506:4;23499:5;23495:16;23486:25;;23074:451;23556:4;23550;23546:15;23538:23;;23586:32;23609:8;23586:32;:::i;:::-;23574:44;;22916:712;;;22786:848;;;;;;;:::o;23640:1073::-;23694:5;23885:8;23875:40;;23906:1;23897:10;;23908:5;;23875:40;23934:4;23924:36;;23951:1;23942:10;;23953:5;;23924:36;24020:4;24068:1;24063:27;;;;24104:1;24099:191;;;;24013:277;;24063:27;24081:1;24072:10;;24083:5;;;24099:191;24144:3;24134:8;24131:17;24128:43;;;24151:18;;:::i;:::-;24128:43;24200:8;24197:1;24193:16;24184:25;;24235:3;24228:5;24225:14;24222:40;;;24242:18;;:::i;:::-;24222:40;24275:5;;;24013:277;;24399:2;24389:8;24386:16;24380:3;24374:4;24371:13;24367:36;24349:2;24339:8;24336:16;24331:2;24325:4;24322:12;24318:35;24302:111;24299:246;;;24455:8;24449:4;24445:19;24436:28;;24490:3;24483:5;24480:14;24477:40;;;24497:18;;:::i;:::-;24477:40;24530:5;;24299:246;24570:42;24608:3;24598:8;24592:4;24589:1;24570:42;:::i;:::-;24555:57;;;;24644:4;24639:3;24635:14;24628:5;24625:25;24622:51;;;24653:18;;:::i;:::-;24622:51;24702:4;24695:5;24691:16;24682:25;;23640:1073;;;;;;:::o;24719:281::-;24777:5;24801:23;24819:4;24801:23;:::i;:::-;24793:31;;24845:25;24861:8;24845:25;:::i;:::-;24833:37;;24889:104;24926:66;24916:8;24910:4;24889:104;:::i;:::-;24880:113;;24719:281;;;;:::o;25006:410::-;25046:7;25069:20;25087:1;25069:20;:::i;:::-;25064:25;;25103:20;25121:1;25103:20;:::i;:::-;25098:25;;25158:1;25155;25151:9;25180:30;25198:11;25180:30;:::i;:::-;25169:41;;25359:1;25350:7;25346:15;25343:1;25340:22;25320:1;25313:9;25293:83;25270:139;;25389:18;;:::i;:::-;25270:139;25054:362;25006:410;;;;:::o;25422:166::-;25562:18;25558:1;25550:6;25546:14;25539:42;25422:166;:::o;25594:366::-;25736:3;25757:67;25821:2;25816:3;25757:67;:::i;:::-;25750:74;;25833:93;25922:3;25833:93;:::i;:::-;25951:2;25946:3;25942:12;25935:19;;25594:366;;;:::o;25966:419::-;26132:4;26170:2;26159:9;26155:18;26147:26;;26219:9;26213:4;26209:20;26205:1;26194:9;26190:17;26183:47;26247:131;26373:4;26247:131;:::i;:::-;26239:139;;25966:419;;;:::o;26391:178::-;26531:30;26527:1;26519:6;26515:14;26508:54;26391:178;:::o;26575:366::-;26717:3;26738:67;26802:2;26797:3;26738:67;:::i;:::-;26731:74;;26814:93;26903:3;26814:93;:::i;:::-;26932:2;26927:3;26923:12;26916:19;;26575:366;;;:::o;26947:419::-;27113:4;27151:2;27140:9;27136:18;27128:26;;27200:9;27194:4;27190:20;27186:1;27175:9;27171:17;27164:47;27228:131;27354:4;27228:131;:::i;:::-;27220:139;;26947:419;;;:::o;27372:166::-;27512:18;27508:1;27500:6;27496:14;27489:42;27372:166;:::o;27544:366::-;27686:3;27707:67;27771:2;27766:3;27707:67;:::i;:::-;27700:74;;27783:93;27872:3;27783:93;:::i;:::-;27901:2;27896:3;27892:12;27885:19;;27544:366;;;:::o;27916:419::-;28082:4;28120:2;28109:9;28105:18;28097:26;;28169:9;28163:4;28159:20;28155:1;28144:9;28140:17;28133:47;28197:131;28323:4;28197:131;:::i;:::-;28189:139;;27916:419;;;:::o;28341:194::-;28381:4;28401:20;28419:1;28401:20;:::i;:::-;28396:25;;28435:20;28453:1;28435:20;:::i;:::-;28430:25;;28479:1;28476;28472:9;28464:17;;28503:1;28497:4;28494:11;28491:37;;;28508:18;;:::i;:::-;28491:37;28341:194;;;;:::o;28541:182::-;28681:34;28677:1;28669:6;28665:14;28658:58;28541:182;:::o;28729:366::-;28871:3;28892:67;28956:2;28951:3;28892:67;:::i;:::-;28885:74;;28968:93;29057:3;28968:93;:::i;:::-;29086:2;29081:3;29077:12;29070:19;;28729:366;;;:::o;29101:419::-;29267:4;29305:2;29294:9;29290:18;29282:26;;29354:9;29348:4;29344:20;29340:1;29329:9;29325:17;29318:47;29382:131;29508:4;29382:131;:::i;:::-;29374:139;;29101:419;;;:::o;29526:224::-;29666:34;29662:1;29654:6;29650:14;29643:58;29735:7;29730:2;29722:6;29718:15;29711:32;29526:224;:::o;29756:366::-;29898:3;29919:67;29983:2;29978:3;29919:67;:::i;:::-;29912:74;;29995:93;30084:3;29995:93;:::i;:::-;30113:2;30108:3;30104:12;30097:19;;29756:366;;;:::o;30128:419::-;30294:4;30332:2;30321:9;30317:18;30309:26;;30381:9;30375:4;30371:20;30367:1;30356:9;30352:17;30345:47;30409:131;30535:4;30409:131;:::i;:::-;30401:139;;30128:419;;;:::o;30553:180::-;30601:77;30598:1;30591:88;30698:4;30695:1;30688:15;30722:4;30719:1;30712:15;30739:191;30779:3;30798:20;30816:1;30798:20;:::i;:::-;30793:25;;30832:20;30850:1;30832:20;:::i;:::-;30827:25;;30875:1;30872;30868:9;30861:16;;30896:3;30893:1;30890:10;30887:36;;;30903:18;;:::i;:::-;30887:36;30739:191;;;;:::o;30936:233::-;30975:3;30998:24;31016:5;30998:24;:::i;:::-;30989:33;;31044:66;31037:5;31034:77;31031:103;;31114:18;;:::i;:::-;31031:103;31161:1;31154:5;31150:13;31143:20;;30936:233;;;:::o;31175:225::-;31315:34;31311:1;31303:6;31299:14;31292:58;31384:8;31379:2;31371:6;31367:15;31360:33;31175:225;:::o;31406:366::-;31548:3;31569:67;31633:2;31628:3;31569:67;:::i;:::-;31562:74;;31645:93;31734:3;31645:93;:::i;:::-;31763:2;31758:3;31754:12;31747:19;;31406:366;;;:::o;31778:419::-;31944:4;31982:2;31971:9;31967:18;31959:26;;32031:9;32025:4;32021:20;32017:1;32006:9;32002:17;31995:47;32059:131;32185:4;32059:131;:::i;:::-;32051:139;;31778:419;;;:::o;32203:332::-;32324:4;32362:2;32351:9;32347:18;32339:26;;32375:71;32443:1;32432:9;32428:17;32419:6;32375:71;:::i;:::-;32456:72;32524:2;32513:9;32509:18;32500:6;32456:72;:::i;:::-;32203:332;;;;;:::o;32541:171::-;32681:23;32677:1;32669:6;32665:14;32658:47;32541:171;:::o;32718:366::-;32860:3;32881:67;32945:2;32940:3;32881:67;:::i;:::-;32874:74;;32957:93;33046:3;32957:93;:::i;:::-;33075:2;33070:3;33066:12;33059:19;;32718:366;;;:::o;33090:419::-;33256:4;33294:2;33283:9;33279:18;33271:26;;33343:9;33337:4;33333:20;33329:1;33318:9;33314:17;33307:47;33371:131;33497:4;33371:131;:::i;:::-;33363:139;;33090:419;;;:::o;33515:173::-;33655:25;33651:1;33643:6;33639:14;33632:49;33515:173;:::o;33694:366::-;33836:3;33857:67;33921:2;33916:3;33857:67;:::i;:::-;33850:74;;33933:93;34022:3;33933:93;:::i;:::-;34051:2;34046:3;34042:12;34035:19;;33694:366;;;:::o;34066:419::-;34232:4;34270:2;34259:9;34255:18;34247:26;;34319:9;34313:4;34309:20;34305:1;34294:9;34290:17;34283:47;34347:131;34473:4;34347:131;:::i;:::-;34339:139;;34066:419;;;:::o;34491:180::-;34539:77;34536:1;34529:88;34636:4;34633:1;34626:15;34660:4;34657:1;34650:15;34677:185;34717:1;34734:20;34752:1;34734:20;:::i;:::-;34729:25;;34768:20;34786:1;34768:20;:::i;:::-;34763:25;;34807:1;34797:35;;34812:18;;:::i;:::-;34797:35;34854:1;34851;34847:9;34842:14;;34677:185;;;;:::o;34868:166::-;35008:18;35004:1;34996:6;34992:14;34985:42;34868:166;:::o;35040:366::-;35182:3;35203:67;35267:2;35262:3;35203:67;:::i;:::-;35196:74;;35279:93;35368:3;35279:93;:::i;:::-;35397:2;35392:3;35388:12;35381:19;;35040:366;;;:::o;35412:419::-;35578:4;35616:2;35605:9;35601:18;35593:26;;35665:9;35659:4;35655:20;35651:1;35640:9;35636:17;35629:47;35693:131;35819:4;35693:131;:::i;:::-;35685:139;;35412:419;;;:::o;35837:170::-;35977:22;35973:1;35965:6;35961:14;35954:46;35837:170;:::o;36013:366::-;36155:3;36176:67;36240:2;36235:3;36176:67;:::i;:::-;36169:74;;36252:93;36341:3;36252:93;:::i;:::-;36370:2;36365:3;36361:12;36354:19;;36013:366;;;:::o;36385:419::-;36551:4;36589:2;36578:9;36574:18;36566:26;;36638:9;36632:4;36628:20;36624:1;36613:9;36609:17;36602:47;36666:131;36792:4;36666:131;:::i;:::-;36658:139;;36385:419;;;:::o;36810:170::-;36950:22;36946:1;36938:6;36934:14;36927:46;36810:170;:::o;36986:366::-;37128:3;37149:67;37213:2;37208:3;37149:67;:::i;:::-;37142:74;;37225:93;37314:3;37225:93;:::i;:::-;37343:2;37338:3;37334:12;37327:19;;36986:366;;;:::o;37358:419::-;37524:4;37562:2;37551:9;37547:18;37539:26;;37611:9;37605:4;37601:20;37597:1;37586:9;37582:17;37575:47;37639:131;37765:4;37639:131;:::i;:::-;37631:139;;37358:419;;;:::o;37783:159::-;37923:11;37919:1;37911:6;37907:14;37900:35;37783:159;:::o;37948:365::-;38090:3;38111:66;38175:1;38170:3;38111:66;:::i;:::-;38104:73;;38186:93;38275:3;38186:93;:::i;:::-;38304:2;38299:3;38295:12;38288:19;;37948:365;;;:::o;38319:419::-;38485:4;38523:2;38512:9;38508:18;38500:26;;38572:9;38566:4;38562:20;38558:1;38547:9;38543:17;38536:47;38600:131;38726:4;38600:131;:::i;:::-;38592:139;;38319:419;;;:::o;38744:162::-;38884:14;38880:1;38872:6;38868:14;38861:38;38744:162;:::o;38912:366::-;39054:3;39075:67;39139:2;39134:3;39075:67;:::i;:::-;39068:74;;39151:93;39240:3;39151:93;:::i;:::-;39269:2;39264:3;39260:12;39253:19;;38912:366;;;:::o;39284:419::-;39450:4;39488:2;39477:9;39473:18;39465:26;;39537:9;39531:4;39527:20;39523:1;39512:9;39508:17;39501:47;39565:131;39691:4;39565:131;:::i;:::-;39557:139;;39284:419;;;:::o;39709:173::-;39849:25;39845:1;39837:6;39833:14;39826:49;39709:173;:::o;39888:366::-;40030:3;40051:67;40115:2;40110:3;40051:67;:::i;:::-;40044:74;;40127:93;40216:3;40127:93;:::i;:::-;40245:2;40240:3;40236:12;40229:19;;39888:366;;;:::o;40260:419::-;40426:4;40464:2;40453:9;40449:18;40441:26;;40513:9;40507:4;40503:20;40499:1;40488:9;40484:17;40477:47;40541:131;40667:4;40541:131;:::i;:::-;40533:139;;40260:419;;;:::o;40685:174::-;40825:26;40821:1;40813:6;40809:14;40802:50;40685:174;:::o;40865:366::-;41007:3;41028:67;41092:2;41087:3;41028:67;:::i;:::-;41021:74;;41104:93;41193:3;41104:93;:::i;:::-;41222:2;41217:3;41213:12;41206:19;;40865:366;;;:::o;41237:419::-;41403:4;41441:2;41430:9;41426:18;41418:26;;41490:9;41484:4;41480:20;41476:1;41465:9;41461:17;41454:47;41518:131;41644:4;41518:131;:::i;:::-;41510:139;;41237:419;;;:::o;41662:60::-;41690:3;41711:5;41704:12;;41662:60;;;:::o;41728:142::-;41778:9;41811:53;41829:34;41838:24;41856:5;41838:24;:::i;:::-;41829:34;:::i;:::-;41811:53;:::i;:::-;41798:66;;41728:142;;;:::o;41876:126::-;41926:9;41959:37;41990:5;41959:37;:::i;:::-;41946:50;;41876:126;;;:::o;42008:134::-;42066:9;42099:37;42130:5;42099:37;:::i;:::-;42086:50;;42008:134;;;:::o;42148:147::-;42243:45;42282:5;42243:45;:::i;:::-;42238:3;42231:58;42148:147;;:::o;42301:238::-;42402:4;42440:2;42429:9;42425:18;42417:26;;42453:79;42529:1;42518:9;42514:17;42505:6;42453:79;:::i;:::-;42301:238;;;;:::o;42545:193::-;42584:3;42603:19;42620:1;42603:19;:::i;:::-;42598:24;;42636:19;42653:1;42636:19;:::i;:::-;42631:24;;42678:1;42675;42671:9;42664:16;;42701:6;42696:3;42693:15;42690:41;;;42711:18;;:::i;:::-;42690:41;42545:193;;;;:::o;42744:188::-;42782:3;42801:18;42817:1;42801:18;:::i;:::-;42796:23;;42833:18;42849:1;42833:18;:::i;:::-;42828:23;;42874:1;42871;42867:9;42860:16;;42897:4;42892:3;42889:13;42886:39;;;42905:18;;:::i;:::-;42886:39;42744:188;;;;:::o;42938:168::-;43078:20;43074:1;43066:6;43062:14;43055:44;42938:168;:::o;43112:366::-;43254:3;43275:67;43339:2;43334:3;43275:67;:::i;:::-;43268:74;;43351:93;43440:3;43351:93;:::i;:::-;43469:2;43464:3;43460:12;43453:19;;43112:366;;;:::o;43484:419::-;43650:4;43688:2;43677:9;43673:18;43665:26;;43737:9;43731:4;43727:20;43723:1;43712:9;43708:17;43701:47;43765:131;43891:4;43765:131;:::i;:::-;43757:139;;43484:419;;;:::o;43909:85::-;43954:7;43983:5;43972:16;;43909:85;;;:::o;44000:158::-;44058:9;44091:61;44109:42;44118:32;44144:5;44118:32;:::i;:::-;44109:42;:::i;:::-;44091:61;:::i;:::-;44078:74;;44000:158;;;:::o;44164:147::-;44259:45;44298:5;44259:45;:::i;:::-;44254:3;44247:58;44164:147;;:::o;44317:807::-;44566:4;44604:3;44593:9;44589:19;44581:27;;44618:71;44686:1;44675:9;44671:17;44662:6;44618:71;:::i;:::-;44699:72;44767:2;44756:9;44752:18;44743:6;44699:72;:::i;:::-;44781:80;44857:2;44846:9;44842:18;44833:6;44781:80;:::i;:::-;44871;44947:2;44936:9;44932:18;44923:6;44871:80;:::i;:::-;44961:73;45029:3;45018:9;45014:19;45005:6;44961:73;:::i;:::-;45044;45112:3;45101:9;45097:19;45088:6;45044:73;:::i;:::-;44317:807;;;;;;;;;:::o;45130:143::-;45187:5;45218:6;45212:13;45203:22;;45234:33;45261:5;45234:33;:::i;:::-;45130:143;;;;:::o;45279:663::-;45367:6;45375;45383;45432:2;45420:9;45411:7;45407:23;45403:32;45400:119;;;45438:79;;:::i;:::-;45400:119;45558:1;45583:64;45639:7;45630:6;45619:9;45615:22;45583:64;:::i;:::-;45573:74;;45529:128;45696:2;45722:64;45778:7;45769:6;45758:9;45754:22;45722:64;:::i;:::-;45712:74;;45667:129;45835:2;45861:64;45917:7;45908:6;45897:9;45893:22;45861:64;:::i;:::-;45851:74;;45806:129;45279:663;;;;;:::o;45948:179::-;46088:31;46084:1;46076:6;46072:14;46065:55;45948:179;:::o;46133:366::-;46275:3;46296:67;46360:2;46355:3;46296:67;:::i;:::-;46289:74;;46372:93;46461:3;46372:93;:::i;:::-;46490:2;46485:3;46481:12;46474:19;;46133:366;;;:::o;46505:419::-;46671:4;46709:2;46698:9;46694:18;46686:26;;46758:9;46752:4;46748:20;46744:1;46733:9;46729:17;46722:47;46786:131;46912:4;46786:131;:::i;:::-;46778:139;;46505:419;;;:::o;46930:167::-;47070:19;47066:1;47058:6;47054:14;47047:43;46930:167;:::o;47103:366::-;47245:3;47266:67;47330:2;47325:3;47266:67;:::i;:::-;47259:74;;47342:93;47431:3;47342:93;:::i;:::-;47460:2;47455:3;47451:12;47444:19;;47103:366;;;:::o;47475:419::-;47641:4;47679:2;47668:9;47664:18;47656:26;;47728:9;47722:4;47718:20;47714:1;47703:9;47699:17;47692:47;47756:131;47882:4;47756:131;:::i;:::-;47748:139;;47475:419;;;:::o;47900:180::-;47948:77;47945:1;47938:88;48045:4;48042:1;48035:15;48069:4;48066:1;48059:15;48086:114;48153:6;48187:5;48181:12;48171:22;;48086:114;;;:::o;48206:184::-;48305:11;48339:6;48334:3;48327:19;48379:4;48374:3;48370:14;48355:29;;48206:184;;;;:::o;48396:132::-;48463:4;48486:3;48478:11;;48516:4;48511:3;48507:14;48499:22;;48396:132;;;:::o;48534:108::-;48611:24;48629:5;48611:24;:::i;:::-;48606:3;48599:37;48534:108;;:::o;48648:179::-;48717:10;48738:46;48780:3;48772:6;48738:46;:::i;:::-;48816:4;48811:3;48807:14;48793:28;;48648:179;;;;:::o;48833:113::-;48903:4;48935;48930:3;48926:14;48918:22;;48833:113;;;:::o;48982:732::-;49101:3;49130:54;49178:5;49130:54;:::i;:::-;49200:86;49279:6;49274:3;49200:86;:::i;:::-;49193:93;;49310:56;49360:5;49310:56;:::i;:::-;49389:7;49420:1;49405:284;49430:6;49427:1;49424:13;49405:284;;;49506:6;49500:13;49533:63;49592:3;49577:13;49533:63;:::i;:::-;49526:70;;49619:60;49672:6;49619:60;:::i;:::-;49609:70;;49465:224;49452:1;49449;49445:9;49440:14;;49405:284;;;49409:14;49705:3;49698:10;;49106:608;;;48982:732;;;;:::o;49720:831::-;49983:4;50021:3;50010:9;50006:19;49998:27;;50035:71;50103:1;50092:9;50088:17;50079:6;50035:71;:::i;:::-;50116:80;50192:2;50181:9;50177:18;50168:6;50116:80;:::i;:::-;50243:9;50237:4;50233:20;50228:2;50217:9;50213:18;50206:48;50271:108;50374:4;50365:6;50271:108;:::i;:::-;50263:116;;50389:72;50457:2;50446:9;50442:18;50433:6;50389:72;:::i;:::-;50471:73;50539:3;50528:9;50524:19;50515:6;50471:73;:::i;:::-;49720:831;;;;;;;;:::o

Swarm Source

ipfs://2a6ff3cb6cdb8e7dc28d8f71be8b7dbdbe82c99ad9d3c2b230784253551093a0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.