Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
DeFi
Overview
Max Total Supply
99,639,519.376150983 AEA
Holders
102 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
274,566.371336106 AEAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ACEEAGLE
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-19 */ // SPDX-License-Identifier: MIT /** *Website: https://www.aceeagle.io *Telegram: https://t.me/JoinTheEAGLES *Twitter: https://twitter.com/JoinTheEAGLES */ pragma solidity 0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal returns(bool){ require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); return success; } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract ACEEAGLE is Context, IERC20, Ownable { using Address for address; using Address for address payable; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) private _isExcluded; address[] private _excluded; string private _name = "ACEEAGLE"; string private _symbol = "AEA"; uint8 private _decimals = 9; uint256 private constant MAX = type(uint256).max; uint256 private _tTotal =100000000 * (10 ** _decimals); uint256 private _tTotalSupply = 100000000 * (10 ** _decimals); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 public taxFeeonBuy; uint256 public taxFeeonSell; uint256 public liquidityFeeonBuy; uint256 public liquidityFeeonSell; uint256 public marketingFeeonBuy; uint256 public marketingFeeonSell; uint256 public burnFeeOnBuy; uint256 public burnFeeOnSell; uint256 private _taxFee; uint256 private _liquidityFee; uint256 private _marketingFee; uint256 private totalBuyFees; uint256 private totalSellFees; address public marketingWallet; address public uniswapWallet=0x17A4989Ec6C6eE7984992AAc6F929fa8B9588105; address public exchangeWallet=0x0904d5314922f4Fd8f10c107410b7Ee98B5e4A23; address public developmentWallet=0xD25D0bC76DC005962b3D106Ce8B32888e9d09e5e; address public teamWallet=0xFc38B3A96c6B3a4D8FA2b364F3A8f849E25D69ad; bool public walletToWalletTransferWithoutFee; address private DEAD = 0x000000000000000000000000000000000000dEaD; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private inSwapAndLiquify; bool public swapEnabled; bool public tradingEnabled; uint256 public swapTokensAtAmount; event ExcludeFromFees(address indexed account, bool isExcluded); event MarketingWalletChanged(address marketingWallet); event SwapEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity); event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend); event SwapTokensAtAmountUpdated(uint256 amount); event BuyFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee); event SellFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee); event WalletToWalletTransferWithoutFeeEnabled(bool enabled); constructor() { address router=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _approve(address(this), address(uniswapV2Router), MAX); taxFeeonBuy = 1; taxFeeonSell = 1; liquidityFeeonBuy = 3; liquidityFeeonSell = 3; marketingFeeonBuy = 3; marketingFeeonSell = 3; burnFeeOnBuy = 1; burnFeeOnSell = 1; totalBuyFees = taxFeeonBuy + liquidityFeeonBuy + marketingFeeonBuy + burnFeeOnBuy; totalSellFees = taxFeeonSell + liquidityFeeonSell + marketingFeeonSell + burnFeeOnSell; marketingWallet = 0xf4EE8138699b7174156CB9a30E042E11EAC1b44F; swapEnabled = true; swapTokensAtAmount = _tTotal / 5000; maxTransactionLimitEnabled = true; maxTransactionAmountBuy = _tTotal * 1 / 100; maxTransactionAmountSell = _tTotal * 5 / 1000; _isExcludedFromMaxTxLimit[owner()] = true; _isExcludedFromMaxTxLimit[address(0)] = true; _isExcludedFromMaxTxLimit[address(this)] = true; _isExcludedFromMaxTxLimit[marketingWallet] = true; _isExcludedFromMaxTxLimit[DEAD] = true; maxWalletLimitEnabled = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxTxLimit[address(0x17A4989Ec6C6eE7984992AAc6F929fa8B9588105)] = true; _isExcludedFromMaxTxLimit[address(0x0904d5314922f4Fd8f10c107410b7Ee98B5e4A23)] = true; _isExcludedFromMaxTxLimit[address(0xD25D0bC76DC005962b3D106Ce8B32888e9d09e5e)] = true; _isExcludedFromMaxTxLimit[address(0xFc38B3A96c6B3a4D8FA2b364F3A8f849E25D69ad)] = true; _isExcludedFromMaxTxLimit[address(0xf4EE8138699b7174156CB9a30E042E11EAC1b44F)] = true; _isExcludedFromMaxWalletLimit[address(0xdead)] = true; _isExcludedFromMaxWalletLimit[marketingWallet] = true; walletToWalletTransferWithoutFee = true; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(0xdead)] = true; _isExcludedFromFees[address(0x17A4989Ec6C6eE7984992AAc6F929fa8B9588105)] = true; _isExcludedFromFees[address(0x0904d5314922f4Fd8f10c107410b7Ee98B5e4A23)] = true; _isExcludedFromFees[address(0xD25D0bC76DC005962b3D106Ce8B32888e9d09e5e)] = true; _isExcludedFromFees[address(0xFc38B3A96c6B3a4D8FA2b364F3A8f849E25D69ad)] = true; _isExcludedFromFees[address(0xf4EE8138699b7174156CB9a30E042E11EAC1b44F)] = true; _isExcludedFromFees[address(this)] = true; _isExcluded[address(this)] = true; _isExcluded[address(0xdead)] = true; _isExcluded[address(uniswapV2Pair)] = true; _rOwned[owner()] = _rTotal; _tOwned[owner()] = _tTotal; maxWalletAmount = _tTotal * 2 / 100; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotalSupply; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalReflectionDistributed() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _rTotal = _rTotal - rAmount; _tFeeTotal = _tFeeTotal + tAmount; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount / currentRate; } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } receive() external payable {} function claimStuckTokens(address token) external onlyOwner { require(token != address(this), "Owner cannot claim native tokens"); if (token == address(0x0)) { payable(msg.sender).sendValue(address(this).balance); return; } IERC20 ERC20token = IERC20(token); uint256 balance = ERC20token.balanceOf(address(this)); ERC20token.transfer(msg.sender, balance); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal - rFee; _tFeeTotal = _tFeeTotal + tFee; } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tMarketing); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount - tFee - tLiquidity - tMarketing; return (tTransferAmount, tFee, tLiquidity, tMarketing); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount * currentRate; uint256 rFee = tFee * currentRate; uint256 rLiquidity = tLiquidity * currentRate; uint256 rMarketing = tMarketing * currentRate; uint256 rTransferAmount = rAmount - rFee - rLiquidity - rMarketing; return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply / tSupply; } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply - _rOwned[_excluded[i]]; tSupply = tSupply - _tOwned[_excluded[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 liquidityAmount; uint256 burnAmount; if (liquidityFeeonBuy + liquidityFeeonSell + burnFeeOnBuy + burnFeeOnSell > 0){ liquidityAmount = tLiquidity * (liquidityFeeonBuy + liquidityFeeonSell) / (liquidityFeeonBuy + liquidityFeeonSell + burnFeeOnBuy + burnFeeOnSell); burnAmount = tLiquidity - liquidityAmount; } if(liquidityAmount > 0){ uint256 currentRate = _getRate(); uint256 rLiquidity = liquidityAmount * currentRate; _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity; if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)] + liquidityAmount; } if(burnAmount > 0){ uint256 currentRate = _getRate(); uint256 rBurn = burnAmount * currentRate; _rOwned[address(0xdead)] = _rOwned[address(0xdead)] + rBurn; if(_isExcluded[address(0xdead)]) _tOwned[address(0xdead)] = _tOwned[address(0xdead)] + burnAmount; _tTotalSupply -= burnAmount; } } function _takeMarketing(uint256 tMarketing) private { if (tMarketing > 0) { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing * currentRate; _rOwned[address(this)] = _rOwned[address(this)] + rMarketing; if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)] + tMarketing; } } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount * _taxFee / 100; } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount * _liquidityFee / 100; } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount * _marketingFee / 100; } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0) return; _taxFee = 0; _marketingFee = 0; _liquidityFee = 0; } function setBuyFee() private{ if(_taxFee == taxFeeonBuy && _liquidityFee == (liquidityFeeonBuy + burnFeeOnBuy) && _marketingFee == marketingFeeonBuy ) return; _taxFee = taxFeeonBuy; _marketingFee = marketingFeeonBuy; _liquidityFee = liquidityFeeonBuy + burnFeeOnBuy; } function setSellFee() private{ if(_taxFee == taxFeeonSell && _liquidityFee == (liquidityFeeonSell + burnFeeOnSell) && _marketingFee == marketingFeeonSell ) return; _taxFee = taxFeeonSell; _marketingFee = marketingFeeonSell; _liquidityFee = liquidityFeeonSell + burnFeeOnSell; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function enableTrading() external onlyOwner{ require(tradingEnabled == false, "Trading is already enabled"); tradingEnabled = true; } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { require(tradingEnabled, "Trading is not enabled yet"); } if (maxTransactionLimitEnabled) { if ((from == uniswapV2Pair || to == uniswapV2Pair) && _isExcludedFromMaxTxLimit[from] == false && _isExcludedFromMaxTxLimit[to] == false) { if (from == uniswapV2Pair) { require( amount <= maxTransactionAmountBuy, "AntiWhale: Transfer amount exceeds the maxTransactionAmount" ); } else { require( amount <= maxTransactionAmountSell, "AntiWhale: Transfer amount exceeds the maxTransactionAmount" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if ( overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapEnabled ) { inSwapAndLiquify = true; uint256 marketingShare = marketingFeeonBuy + marketingFeeonSell; uint256 liquidityShare = liquidityFeeonBuy + liquidityFeeonSell; uint256 totalShare = marketingShare + liquidityShare; if(totalShare > 0) { if(liquidityShare > 0) { uint256 liquidityTokens = (contractTokenBalance * liquidityShare) / totalShare; swapAndLiquify(liquidityTokens); } if(marketingShare > 0) { uint256 marketingTokens = (contractTokenBalance * marketingShare) / totalShare; swapAndSendMarketing(marketingTokens); } } inSwapAndLiquify = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount); if (maxWalletLimitEnabled) { if (!_isExcludedFromMaxWalletLimit[from] && !_isExcludedFromMaxWalletLimit[to] && to != uniswapV2Pair ) { uint256 balance = balanceOf(to); require( balance + amount <= maxWalletAmount, "MaxWallet: Recipient exceeds the maxWalletAmount" ); } } } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens / 2; uint256 otherHalf = tokens - half; uint256 initialBalance = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( half, 0, // accept any amount of ETH path, address(this), block.timestamp); uint256 newBalance = address(this).balance - initialBalance; uniswapV2Router.addLiquidityETH{value: newBalance}( address(this), otherHalf, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapAndSendMarketing(uint256 tokenAmount) private { uint256 initialBalance = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp); uint256 newBalance = address(this).balance - initialBalance; payable(marketingWallet).sendValue(newBalance); emit SwapAndSendMarketing(tokenAmount, newBalance); } function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner() { require(newAmount > totalSupply() / 1e5, "SwapTokensAtAmount must be greater than 0.001% of total supply"); swapTokensAtAmount = newAmount; emit SwapTokensAtAmountUpdated(newAmount); } function setSwapEnabled(bool _enabled) external onlyOwner { swapEnabled = _enabled; emit SwapEnabledUpdated(_enabled); } function _tokenTransfer(address sender, address recipient, uint256 amount) private { if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient] ) { removeAllFee(); }else if(recipient == uniswapV2Pair){ setSellFee(); }else if(sender == uniswapV2Pair){ setBuyFee(); }else if(walletToWalletTransferWithoutFee){ removeAllFee(); }else{ setSellFee(); } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender] - tAmount; _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender] - tAmount; _rOwned[sender] = _rOwned[sender] - rAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function changeMarketingWallet(address _marketingWallet) external onlyOwner { require(_marketingWallet != marketingWallet, "Marketing wallet is already that address"); require(_marketingWallet!=address(0), "Marketing wallet is the zero address"); marketingWallet = _marketingWallet; emit MarketingWalletChanged(marketingWallet); } function setBuyFeePercentages(uint256 _taxFeeonBuy, uint256 _liquidityFeeonBuy, uint256 _marketingFeeonBuy, uint256 _burnFeeOnBuy) external onlyOwner { taxFeeonBuy = _taxFeeonBuy; liquidityFeeonBuy = _liquidityFeeonBuy; marketingFeeonBuy = _marketingFeeonBuy; burnFeeOnBuy = _burnFeeOnBuy; totalBuyFees = taxFeeonBuy + liquidityFeeonBuy + marketingFeeonBuy + burnFeeOnBuy; require(totalBuyFees <= 100, "Buy fees cannot be greater than 10%"); emit BuyFeesChanged(taxFeeonBuy, liquidityFeeonBuy, marketingFeeonBuy); } function setSellFeePercentages(uint256 _taxFeeonSell, uint256 _liquidityFeeonSell, uint256 _marketingFeeonSell, uint256 _burnFeeOnSell) external onlyOwner { taxFeeonSell = _taxFeeonSell; liquidityFeeonSell = _liquidityFeeonSell; marketingFeeonSell = _marketingFeeonSell; burnFeeOnSell = _burnFeeOnSell; totalSellFees = taxFeeonSell + liquidityFeeonSell + marketingFeeonSell + burnFeeOnSell; require(totalSellFees <= 100, "Sell fees cannot be greater than 10%"); emit SellFeesChanged(taxFeeonSell, liquidityFeeonSell, marketingFeeonSell); } function enableWalletToWalletTransferWithoutFee(bool enable) external onlyOwner { require(walletToWalletTransferWithoutFee != enable, "Wallet to wallet transfer without fee is already set to that value"); walletToWalletTransferWithoutFee = enable; emit WalletToWalletTransferWithoutFeeEnabled(enable); } mapping(address => bool) private _isExcludedFromMaxTxLimit; bool public maxTransactionLimitEnabled; uint256 public maxTransactionAmountBuy; uint256 public maxTransactionAmountSell; event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded); event MaxTransactionLimitStateChanged(bool maxTransactionLimit); event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell); function setEnableMaxTransactionLimit(bool enable) external onlyOwner { require( enable != maxTransactionLimitEnabled, "Max transaction limit is already set to that state" ); maxTransactionLimitEnabled = enable; emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled); } function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner { require( _maxTransactionAmountBuy >= totalSupply() / (10 ** decimals()) / 100 && _maxTransactionAmountSell >= totalSupply() / (10 ** decimals()) / 100, "Max Transaction limis cannot be lower than 0.1% of total supply" ); maxTransactionAmountBuy = _maxTransactionAmountBuy * (10 ** decimals()); maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals()); emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell); } function setExcludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner { require( _isExcludedFromMaxTxLimit[account] != exclude, "Account is already set to that state" ); _isExcludedFromMaxTxLimit[account] = exclude; emit ExcludedFromMaxTransactionLimit(account, exclude); } function isExcludedFromMaxTransaction(address account) public view returns(bool) { return _isExcludedFromMaxTxLimit[account]; } mapping(address => bool) private _isExcludedFromMaxWalletLimit; bool public maxWalletLimitEnabled; uint256 public maxWalletAmount; event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded); event MaxWalletLimitStateChanged(bool maxWalletLimit); event MaxWalletLimitAmountChanged(uint256 maxWalletAmount); function setEnableMaxWalletLimit(bool enable) external onlyOwner { require(enable != maxWalletLimitEnabled,"Max wallet limit is already set to that state"); maxWalletLimitEnabled = enable; emit MaxWalletLimitStateChanged(maxWalletLimitEnabled); } function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner { require(_maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%"); maxWalletAmount = _maxWalletAmount * (10 ** decimals()); emit MaxWalletLimitAmountChanged(maxWalletAmount); } function excludeFromMaxWallet(address account, bool exclude) external onlyOwner { require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state"); require(account != address(this), "Can't set this address."); _isExcludedFromMaxWalletLimit[account] = exclude; emit ExcludedFromMaxWalletLimit(account, exclude); } function isExcludedFromMaxWalletLimit(address account) public view returns(bool) { return _isExcludedFromMaxWalletLimit[account]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"BuyFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"SellFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"WalletToWalletTransferWithoutFeeEnabled","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableWalletToWalletTransferWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_burnFeeOnBuy","type":"uint256"}],"name":"setBuyFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_burnFeeOnSell","type":"uint256"}],"name":"setSellFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletToWalletTransferWithoutFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405260086080908152674143454541474c4560c01b60a05260079062000029908262000b1e565b5060408051808201909152600381526241454160e81b602082015260089062000053908262000b1e565b506009805460ff1916811781556200006d90600a62000cff565b6200007d906305f5e10062000d17565b600a908155600954620000969160ff9091169062000cff565b620000a6906305f5e10062000d17565b600b55600a54620000ba9060001962000d47565b620000c89060001962000d5e565b600c55601c80546001600160a01b03199081167317a4989ec6c6ee7984992aac6f929fa8b958810517909155601d80548216730904d5314922f4fd8f10c107410b7ee98b5e4a23179055601e8054821673d25d0bc76dc005962b3d106ce8b32888e9d09e5e179055601f8054821673fc38b3a96c6b3a4d8fa2b364f3a8f849e25d69ad1790556020805490911661dead1790553480156200016857600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000207573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022d919062000d74565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a1919062000d74565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000315919062000d74565b602280546001600160a01b039283166001600160a01b031991821617909155602180549284169290911682179055620003539030906000196200093e565b6001600e819055600f81905560036010819055601181905560128190556013819055601482905560158290556200038b818362000d9f565b62000397919062000d9f565b620003a3919062000d9f565b601955601554601354601154600f54620003be919062000d9f565b620003ca919062000d9f565b620003d6919062000d9f565b601a55601b80546001600160a01b03191673f4ee8138699b7174156cb9a30e042e11eac1b44f1790556022805460ff60a81b1916600160a81b179055600a5462000424906113889062000db5565b6023556025805460ff19166001908117909155600a5460649162000449919062000d17565b62000455919062000db5565b602655600a546103e8906200046c90600562000d17565b62000478919062000db5565b602755600160246000620004946000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055602484527fb7634ec2165a7280a285aac3ec10cf370eca86d8aa9d3243c90b2151434091ad8054861660019081179091553082528382208054871682179055601b5483168252838220805487168217905593549091168152908120805484168317905560298054909316821790925590602890620005486000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260288085528382208054871660019081179091557fedeb75e27e1e4f76fd4495bc7c6458bf6246df3ad89ad85806f84b54ac6ca7fa80548816821790557f496ed6f22892e73309479acff8fa1fdd3cdd86cdecd005eed11a9bcf2fe9939580548816821790557f5e61b1670c8dbef0727f22045592021b71939393c42444bd3b7bfd960a1fe47c80548816821790557f69b37495d5a4702cb04033479d1fd0c1f15644e6c1f6f6bc1e69ed1363a9b49380548816821790557f7cd48ef02ed3045f77c5532fd2e4f08ffb2cb74c0ed6bea0427b8d4af462f8e7805488168217905594527fbbe88529b5ffa7b624cff06f0ef07c7e870a9b23b5b38a8a3fc35e04dc498bd18054861685179055601b54909116815290812080549093168217909255601f805460ff60a01b1916600160a01b17905590600490620006c46000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600484527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054861660019081179091557fbd8b8a4e691c58d58701df53b187ac8a29bb510b56337d67e52b55530ac2ec5d80548716821790557fea5cf4e9619a21e36443be278f0a5977333742cb57214042953682b3336a614280548716821790557ff78f8138638ca6d2789c6e261644fbceface3b7612324d6a3ee263b21bf56ce280548716821790557fd8b0fabb371140c65810337e10334c2513257f6d28667b83ca6ad5fd9f9e0bdc80548716821790557fecc36160256665a9dd6d6825aa6df8899427e1805b46f51be2738d00b1f3714380548716821790553082528382208054871682179055600590945282812080548616851790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba8054861685179055602254909116815290812080549093168217909255600c5491620008636000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600a54600260006200089e62000a6a60201b60201c565b6001600160a01b03168152602081019190915260400160002055600a54606490620008cb90600262000d17565b620008d7919062000db5565b602a556000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200092e91815260200190565b60405180910390a3505062000dcc565b6001600160a01b038316620009a65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b03821662000a095760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200099d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031690565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000aa457607f821691505b60208210810362000ac557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b1957600081815260208120601f850160051c8101602086101562000af45750805b601f850160051c820191505b8181101562000b155782815560010162000b00565b5050505b505050565b81516001600160401b0381111562000b3a5762000b3a62000a79565b62000b528162000b4b845462000a8f565b8462000acb565b602080601f83116001811462000b8a576000841562000b715750858301515b600019600386901b1c1916600185901b17855562000b15565b600085815260208120601f198616915b8281101562000bbb5788860151825594840194600190910190840162000b9a565b508582101562000bda5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000c4157816000190482111562000c255762000c2562000bea565b8085161562000c3357918102915b93841c939080029062000c05565b509250929050565b60008262000c5a5750600162000cf9565b8162000c695750600062000cf9565b816001811462000c82576002811462000c8d5762000cad565b600191505062000cf9565b60ff84111562000ca15762000ca162000bea565b50506001821b62000cf9565b5060208310610133831016604e8410600b841016171562000cd2575081810a62000cf9565b62000cde838362000c00565b806000190482111562000cf55762000cf562000bea565b0290505b92915050565b600062000d1060ff84168362000c49565b9392505050565b808202811582820484141762000cf95762000cf962000bea565b634e487b7160e01b600052601260045260246000fd5b60008262000d595762000d5962000d31565b500690565b8181038181111562000cf95762000cf962000bea565b60006020828403121562000d8757600080fd5b81516001600160a01b038116811462000d1057600080fd5b8082018082111562000cf95762000cf962000bea565b60008262000dc75762000dc762000d31565b500490565b613f498062000ddc6000396000f3fe6080604052600436106103bc5760003560e01c80635f35bc5c116101f2578063a938d1c91161010d578063d2fcc001116100a0578063e3b467911161006f578063e3b4679114610b39578063e982f35114610b59578063f2fde38b14610b79578063f9d0831a14610b9957600080fd5b8063d2fcc00114610a9d578063dd62ed3e14610abd578063e01af92c14610b03578063e2f4560514610b2357600080fd5b8063b6f7f681116100dc578063b6f7f68114610a1d578063bb85c6d114610a3d578063c024666814610a5d578063c04a541414610a7d57600080fd5b8063a938d1c9146109bc578063aa4bde28146109d2578063afa4f3b2146109e8578063b577554a14610a0857600080fd5b80638da5cb5b11610185578063989a124f11610154578063989a124f1461092d578063a457c2d714610943578063a8a69b9d14610963578063a9059cbb1461099c57600080fd5b80638da5cb5b146108c457806393a7781f146108e257806394929164146108f857806395d89b411461091857600080fd5b8063715018a6116101c1578063715018a61461084157806375f0a8741461085657806388f82020146108765780638a8c523c146108af57600080fd5b80635f35bc5c146107d457806365a8ee4f146107ea5780636ddd17131461080057806370a082311461082157600080fd5b8063313ce567116102e257806352390c021161027557806356a6cabf1161024457806356a6cabf1461076857806359136fa514610788578063599270441461079e5780635a04e035146107be57600080fd5b806352390c02146106cf5780635342acb4146106ef57806355ef1df2146107285780635654d0b31461074857600080fd5b80634549b039116102b15780634549b0391461065857806349bd5a5e146106785780634ada218b146106985780634b93d059146106b957600080fd5b8063313ce567146105d65780633685d419146105f857806339509351146106185780633bd5d1731461063857600080fd5b806318160ddd1161035a57806327a14fc21161032957806327a14fc21461055c5780632a6c7dba1461057c5780632ba86bf21461059c5780632d838119146105b657600080fd5b806318160ddd146104d457806318d9ceae146104e957806321a9d82a1461052257806323b872dd1461053c57600080fd5b8063142725fc11610396578063142725fc14610443578063150c880c146104595780631529fbbf1461047b5780631694505e1461049c57600080fd5b80630105d0fd146103c857806306fdde03146103f1578063095ea7b31461041357600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de60265481565b6040519081526020015b60405180910390f35b3480156103fd57600080fd5b50610406610bb9565b6040516103e89190613953565b34801561041f57600080fd5b5061043361042e3660046139b6565b610c4b565b60405190151581526020016103e8565b34801561044f57600080fd5b506103de60115481565b34801561046557600080fd5b506104796104743660046139f0565b610c62565b005b34801561048757600080fd5b50601f5461043390600160a01b900460ff1681565b3480156104a857600080fd5b506021546104bc906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b3480156104e057600080fd5b50600b546103de565b3480156104f557600080fd5b50610433610504366004613a29565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561052e57600080fd5b506029546104339060ff1681565b34801561054857600080fd5b50610433610557366004613a46565b610d35565b34801561056857600080fd5b50610479610577366004613a87565b610d87565b34801561058857600080fd5b50610479610597366004613aa0565b610e9d565b3480156105a857600080fd5b506025546104339060ff1681565b3480156105c257600080fd5b506103de6105d1366004613a87565b610f7c565b3480156105e257600080fd5b5060095460405160ff90911681526020016103e8565b34801561060457600080fd5b50610479610613366004613a29565b611000565b34801561062457600080fd5b506104336106333660046139b6565b6111b6565b34801561064457600080fd5b50610479610653366004613a87565b6111ed565b34801561066457600080fd5b506103de610673366004613abd565b6112db565b34801561068457600080fd5b506022546104bc906001600160a01b031681565b3480156106a457600080fd5b5060225461043390600160b01b900460ff1681565b3480156106c557600080fd5b506103de60105481565b3480156106db57600080fd5b506104796106ea366004613a29565b61136a565b3480156106fb57600080fd5b5061043361070a366004613a29565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561073457600080fd5b50601d546104bc906001600160a01b031681565b34801561075457600080fd5b50610479610763366004613aa0565b6114bd565b34801561077457600080fd5b50610479610783366004613aa0565b6115c7565b34801561079457600080fd5b506103de60275481565b3480156107aa57600080fd5b50601f546104bc906001600160a01b031681565b3480156107ca57600080fd5b506103de60125481565b3480156107e057600080fd5b506103de600f5481565b3480156107f657600080fd5b506103de60135481565b34801561080c57600080fd5b5060225461043390600160a81b900460ff1681565b34801561082d57600080fd5b506103de61083c366004613a29565b6116ab565b34801561084d57600080fd5b5061047961170a565b34801561086257600080fd5b50601b546104bc906001600160a01b031681565b34801561088257600080fd5b50610433610891366004613a29565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156108bb57600080fd5b5061047961177e565b3480156108d057600080fd5b506000546001600160a01b03166104bc565b3480156108ee57600080fd5b506103de600e5481565b34801561090457600080fd5b50601c546104bc906001600160a01b031681565b34801561092457600080fd5b50610406611817565b34801561093957600080fd5b506103de60155481565b34801561094f57600080fd5b5061043361095e3660046139b6565b611826565b34801561096f57600080fd5b5061043361097e366004613a29565b6001600160a01b031660009081526028602052604090205460ff1690565b3480156109a857600080fd5b506104336109b73660046139b6565b61185d565b3480156109c857600080fd5b506103de60145481565b3480156109de57600080fd5b506103de602a5481565b3480156109f457600080fd5b50610479610a03366004613a87565b61186a565b348015610a1457600080fd5b50600d546103de565b348015610a2957600080fd5b50610479610a38366004613ae2565b611954565b348015610a4957600080fd5b50610479610a58366004613a29565b611ae1565b348015610a6957600080fd5b50610479610a783660046139f0565b611c2a565b348015610a8957600080fd5b50601e546104bc906001600160a01b031681565b348015610aa957600080fd5b50610479610ab83660046139f0565b611d2f565b348015610ac957600080fd5b506103de610ad8366004613b04565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b0f57600080fd5b50610479610b1e366004613aa0565b611e49565b348015610b2f57600080fd5b506103de60235481565b348015610b4557600080fd5b50610479610b54366004613b32565b611ec0565b348015610b6557600080fd5b50610479610b74366004613b32565b611fcf565b348015610b8557600080fd5b50610479610b94366004613a29565b6120d4565b348015610ba557600080fd5b50610479610bb4366004613a29565b6121be565b606060078054610bc890613b64565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf490613b64565b8015610c415780601f10610c1657610100808354040283529160200191610c41565b820191906000526020600020905b815481529060010190602001808311610c2457829003601f168201915b5050505050905090565b6000610c58338484612340565b5060015b92915050565b6000546001600160a01b03163314610c955760405162461bcd60e51b8152600401610c8c90613b9e565b60405180910390fd5b6001600160a01b03821660009081526024602052604090205481151560ff909116151503610cd55760405162461bcd60e51b8152600401610c8c90613bd3565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6000610d42848484612464565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610d7d918691610d78908690613c2d565b612340565b5060019392505050565b6000546001600160a01b03163314610db15760405162461bcd60e51b8152600401610c8c90613b9e565b6064610dbf60095460ff1690565b610dca90600a613d24565b600b54610dd79190613d33565b610de19190613d33565b811015610e465760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b6064820152608401610c8c565b60095460ff16610e5790600a613d24565b610e619082613d55565b602a8190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6000546001600160a01b03163314610ec75760405162461bcd60e51b8152600401610c8c90613b9e565b60295460ff16151581151503610f355760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b6064820152608401610c8c565b6029805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610e92565b6000600c54821115610fe35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c8c565b6000610fed6128c1565b9050610ff98184613d33565b9392505050565b6000546001600160a01b0316331461102a5760405162461bcd60e51b8152600401610c8c90613b9e565b6001600160a01b03811660009081526005602052604090205460ff166110925760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610c8c565b60005b6006548110156111b257816001600160a01b0316600682815481106110bc576110bc613d6c565b6000918252602090912001546001600160a01b0316036111a057600680546110e690600190613c2d565b815481106110f6576110f6613d6c565b600091825260209091200154600680546001600160a01b03909216918390811061112257611122613d6c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600680548061117a5761117a613d82565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111aa81613d98565b915050611095565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c58918590610d78908690613db1565b3360008181526005602052604090205460ff16156112625760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c8c565b600061126d836128e4565b505050506001600160a01b03851660009081526001602052604090205492935061129b928492509050613c2d565b6001600160a01b038316600090815260016020526040902055600c546112c2908290613c2d565b600c55600d546112d3908490613db1565b600d55505050565b6000600a5483111561132f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c8c565b8161134f57600061133f846128e4565b50949650610c5c95505050505050565b600061135a846128e4565b50939650610c5c95505050505050565b6000546001600160a01b031633146113945760405162461bcd60e51b8152600401610c8c90613b9e565b6001600160a01b03811660009081526005602052604090205460ff16156113fd5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c8c565b6001600160a01b03811660009081526001602052604090205415611457576001600160a01b03811660009081526001602052604090205461143d90610f7c565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146114e75760405162461bcd60e51b8152600401610c8c90613b9e565b801515601f60149054906101000a900460ff1615150361157a5760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610c8c565b601f8054821515600160a01b0260ff60a01b199091161790556040517f77c1f4015c54df9478a364bf8fc1b76b03f0eda36c594de58b4023771cebb9e790610e9290831515815260200190565b6000546001600160a01b031633146115f15760405162461bcd60e51b8152600401610c8c90613b9e565b60255460ff161515811515036116645760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610c8c565b6025805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610e92565b6001600160a01b03811660009081526005602052604081205460ff16156116e857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c5c90610f7c565b6000546001600160a01b031633146117345760405162461bcd60e51b8152600401610c8c90613b9e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117a85760405162461bcd60e51b8152600401610c8c90613b9e565b602254600160b01b900460ff16156118025760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610c8c565b6022805460ff60b01b1916600160b01b179055565b606060088054610bc890613b64565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c58918590610d78908690613c2d565b6000610c58338484612464565b6000546001600160a01b031633146118945760405162461bcd60e51b8152600401610c8c90613b9e565b620186a06118a1600b5490565b6118ab9190613d33565b811161191f5760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610c8c565b60238190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610e92565b6000546001600160a01b0316331461197e5760405162461bcd60e51b8152600401610c8c90613b9e565b606461198c60095460ff1690565b61199790600a613d24565b600b546119a49190613d33565b6119ae9190613d33565b82101580156119ec575060646119c660095460ff1690565b6119d190600a613d24565b600b546119de9190613d33565b6119e89190613d33565b8110155b611a5e5760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610c8c565b60095460ff16611a6f90600a613d24565b611a799083613d55565b60265560095460ff16611a8d90600a613d24565b611a979082613d55565b60278190556026546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13192611ad5928252602082015260400190565b60405180910390a15050565b6000546001600160a01b03163314611b0b5760405162461bcd60e51b8152600401610c8c90613b9e565b601b546001600160a01b0390811690821603611b7a5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610c8c565b6001600160a01b038116611bdc5760405162461bcd60e51b8152602060048201526024808201527f4d61726b6574696e672077616c6c657420697320746865207a65726f206164646044820152637265737360e01b6064820152608401610c8c565b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610e92565b6000546001600160a01b03163314611c545760405162461bcd60e51b8152600401610c8c90613b9e565b6001600160a01b03821660009081526004602052604090205481151560ff909116151503611cd75760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610c8c565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610d29565b6000546001600160a01b03163314611d595760405162461bcd60e51b8152600401610c8c90613b9e565b6001600160a01b03821660009081526028602052604090205481151560ff909116151503611d995760405162461bcd60e51b8152600401610c8c90613bd3565b306001600160a01b03831603611df15760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610c8c565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101610d29565b6000546001600160a01b03163314611e735760405162461bcd60e51b8152600401610c8c90613b9e565b60228054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610e9290831515815260200190565b6000546001600160a01b03163314611eea5760405162461bcd60e51b8152600401610c8c90613b9e565b600e8490556010839055601282905560148190558082611f0a8587613db1565b611f149190613db1565b611f1e9190613db1565b601981905560641015611f7f5760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526231302560e81b6064820152608401610c8c565b600e54601054601254604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a150505050565b6000546001600160a01b03163314611ff95760405162461bcd60e51b8152600401610c8c90613b9e565b600f84905560118390556013829055601581905580826120198587613db1565b6120239190613db1565b61202d9190613db1565b601a8190556064101561208e5760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632031302560e01b6064820152608401610c8c565b600f54601154601354604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa5790606001611fc1565b6000546001600160a01b031633146120fe5760405162461bcd60e51b8152600401610c8c90613b9e565b6001600160a01b0381166121635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121e85760405162461bcd60e51b8152600401610c8c90613b9e565b306001600160a01b038216036122405760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610c8c565b6001600160a01b038116612258576111b2334761293f565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156122a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c59190613dc4565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190613ddd565b5050505b50565b6001600160a01b0383166123a25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8c565b6001600160a01b0382166124035760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8c565b6000811161252a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c8c565b6001600160a01b03831660009081526004602052604090205460ff1615801561256c57506001600160a01b03821660009081526004602052604090205460ff16155b156125ca57602254600160b01b900460ff166125ca5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610c8c565b60255460ff16156126ac576022546001600160a01b03848116911614806125fe57506022546001600160a01b038381169116145b801561262357506001600160a01b03831660009081526024602052604090205460ff16155b801561264857506001600160a01b03821660009081526024602052604090205460ff16155b156126ac576022546001600160a01b039081169084160361268a576026548111156126855760405162461bcd60e51b8152600401610c8c90613dfa565b6126ac565b6027548111156126ac5760405162461bcd60e51b8152600401610c8c90613dfa565b60006126b7306116ab565b602354909150811080159081906126d85750602254600160a01b900460ff16155b80156126f157506022546001600160a01b038581169116145b80156127065750602254600160a81b900460ff165b156127bf576022805460ff60a01b1916600160a01b17905560135460125460009161273091613db1565b905060006011546010546127449190613db1565b905060006127528284613db1565b905080156127ae5781156127845760008161276d8488613d55565b6127779190613d33565b9050612782816129ee565b505b82156127ae576000816127978588613d55565b6127a19190613d33565b90506127ac81612c5e565b505b50506022805460ff60a01b19169055505b6127ca858585612dfd565b60295460ff16156128ba576001600160a01b03851660009081526028602052604090205460ff1615801561281757506001600160a01b03841660009081526028602052604090205460ff16155b801561283157506022546001600160a01b03858116911614155b156128ba576000612841856116ab565b602a549091506128518583613db1565b11156128b85760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b6064820152608401610c8c565b505b5050505050565b60008060006128ce613000565b90925090506128dd8183613d33565b9250505090565b60008060008060008060008060008060006128fe8c613183565b9350935093509350600080600061291f8f87878761291a6128c1565b6131e2565b919f509d509b509599509397509195509350505050919395979092949650565b6000814710156129915760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c8c565b6000836001600160a01b03168360405160006040518083038185875af1925050503d80600081146129de576040519150601f19603f3d011682016040523d82523d6000602084013e6129e3565b606091505b509095945050505050565b60006129fb600283613d33565b90506000612a098284613c2d565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110612a4357612a43613d6c565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac09190613e57565b81600181518110612ad357612ad3613d6c565b6001600160a01b03928316602091820292909201015260215460405163791ac94760e01b815291169063791ac94790612b19908790600090869030904290600401613e74565b600060405180830381600087803b158015612b3357600080fd5b505af1158015612b47573d6000803e3d6000fd5b5050505060008247612b599190613c2d565b6021549091506001600160a01b031663f305d719823087600080612b856000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612bed573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c129190613ee5565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b604080516002808252606082018352479260009291906020830190803683370190505090503081600081518110612c9757612c97613d6c565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d149190613e57565b81600181518110612d2757612d27613d6c565b6001600160a01b03928316602091820292909201015260215460405163791ac94760e01b815291169063791ac94790612d6d908690600090869030904290600401613e74565b600060405180830381600087803b158015612d8757600080fd5b505af1158015612d9b573d6000803e3d6000fd5b5050505060008247612dad9190613c2d565b601b54909150612dc6906001600160a01b03168261293f565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629999101611fc1565b6001600160a01b03831660009081526004602052604090205460ff1680612e3c57506001600160a01b03821660009081526004602052604090205460ff165b15612e4e57612e49613254565b612eac565b6022546001600160a01b0390811690831603612e6c57612e49613288565b6022546001600160a01b0390811690841603612e8a57612e496132e2565b601f54600160a01b900460ff1615612ea457612e49613254565b612eac613288565b6001600160a01b03831660009081526005602052604090205460ff168015612eed57506001600160a01b03821660009081526005602052604090205460ff16155b15612f0257612efd838383613337565b505050565b6001600160a01b03831660009081526005602052604090205460ff16158015612f4357506001600160a01b03821660009081526005602052604090205460ff165b15612f5357612efd838383613478565b6001600160a01b03831660009081526005602052604090205460ff16158015612f9557506001600160a01b03821660009081526005602052604090205460ff16155b15612fa557612efd838383613532565b6001600160a01b03831660009081526005602052604090205460ff168015612fe557506001600160a01b03821660009081526005602052604090205460ff165b15612ff557612efd838383613585565b612efd838383613532565b600c54600a546000918291825b6006548110156131525782600160006006848154811061302f5761302f613d6c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061309a575081600260006006848154811061307357613073613d6c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130b057600c54600a54945094505050509091565b60016000600683815481106130c7576130c7613d6c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546130f69084613c2d565b9250600260006006838154811061310f5761310f613d6c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461313e9083613c2d565b91508061314a81613d98565b91505061300d565b50600a54600c546131639190613d33565b82101561317a57600c54600a549350935050509091565b90939092509050565b600080600080600061319486613608565b905060006131a187613624565b905060006131ae88613636565b9050600081836131be868c613c2d565b6131c89190613c2d565b6131d29190613c2d565b9993985091965094509092505050565b60008080806131f1858a613d55565b905060006131ff868a613d55565b9050600061320d878a613d55565b9050600061321b888a613d55565b90506000818361322b8688613c2d565b6132359190613c2d565b61323f9190613c2d565b949d949c50929a509298505050505050505050565b6016541580156132645750601754155b80156132705750601854155b1561327757565b600060168190556018819055601755565b600f546016541480156132ab57506015546011546132a69190613db1565b601754145b80156132ba5750601354601854145b156132c157565b600f546016556013546018556015546011546132dd9190613db1565b601755565b600e5460165414801561330557506014546010546133009190613db1565b601754145b80156133145750601254601854145b1561331b57565b600e546016556012546018556014546010546132dd9190613db1565b600080600080600080600061334b886128e4565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b031681526020019081526020016000205461338a9190613c2d565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546133ba908890613c2d565b6001600160a01b03808c1660009081526001602052604080822093909355908b16815220546133ea908790613db1565b6001600160a01b038a1660009081526001602052604090205561340c81613648565b613415826136d8565b61341f858461392d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161346491815260200190565b60405180910390a350505050505050505050565b600080600080600080600061348c886128e4565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546134cb9190613c2d565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054613502908590613db1565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546133ea908790613db1565b6000806000806000806000613546886128e4565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546133ba9190613c2d565b6000806000806000806000613599886128e4565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546135d89190613c2d565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546134cb908890613c2d565b600060646016548361361a9190613d55565b610c5c9190613d33565b600060646017548361361a9190613d55565b600060646018548361361a9190613d55565b801561233d5760006136586128c1565b905060006136668284613d55565b30600090815260016020526040902054909150613684908290613db1565b3060009081526001602090815260408083209390935560059052205460ff1615612efd57306000908152600260205260409020546136c3908490613db1565b30600090815260026020526040902055505050565b60008060006015546014546011546010546136f39190613db1565b6136fd9190613db1565b6137079190613db1565b111561376a576015546014546011546010546137239190613db1565b61372d9190613db1565b6137379190613db1565b6011546010546137479190613db1565b6137519085613d55565b61375b9190613d33565b91506137678284613c2d565b90505b81156137f957600061377a6128c1565b905060006137888285613d55565b306000908152600160205260409020549091506137a6908290613db1565b3060009081526001602090815260408083209390935560059052205460ff16156137f657306000908152600260205260409020546137e5908590613db1565b306000908152600260205260409020555b50505b8015612efd5760006138096128c1565b905060006138178284613d55565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54909150613852908290613db1565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff161561390f5761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546138e1908490613db1565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc555b82600b60008282546139219190613c2d565b90915550505050505050565b81600c5461393b9190613c2d565b600c55600d5461394c908290613db1565b600d555050565b600060208083528351808285015260005b8181101561398057858101830151858201604001528201613964565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461233d57600080fd5b600080604083850312156139c957600080fd5b82356139d4816139a1565b946020939093013593505050565b801515811461233d57600080fd5b60008060408385031215613a0357600080fd5b8235613a0e816139a1565b91506020830135613a1e816139e2565b809150509250929050565b600060208284031215613a3b57600080fd5b8135610ff9816139a1565b600080600060608486031215613a5b57600080fd5b8335613a66816139a1565b92506020840135613a76816139a1565b929592945050506040919091013590565b600060208284031215613a9957600080fd5b5035919050565b600060208284031215613ab257600080fd5b8135610ff9816139e2565b60008060408385031215613ad057600080fd5b823591506020830135613a1e816139e2565b60008060408385031215613af557600080fd5b50508035926020909101359150565b60008060408385031215613b1757600080fd5b8235613b22816139a1565b91506020830135613a1e816139a1565b60008060008060808587031215613b4857600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680613b7857607f821691505b602082108103613b9857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f4163636f756e7420697320616c72656164792073657420746f207468617420736040820152637461746560e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c5c57610c5c613c17565b600181815b80851115613c7b578160001904821115613c6157613c61613c17565b80851615613c6e57918102915b93841c9390800290613c45565b509250929050565b600082613c9257506001610c5c565b81613c9f57506000610c5c565b8160018114613cb55760028114613cbf57613cdb565b6001915050610c5c565b60ff841115613cd057613cd0613c17565b50506001821b610c5c565b5060208310610133831016604e8410600b8410161715613cfe575081810a610c5c565b613d088383613c40565b8060001904821115613d1c57613d1c613c17565b029392505050565b6000610ff960ff841683613c83565b600082613d5057634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610c5c57610c5c613c17565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201613daa57613daa613c17565b5060010190565b80820180821115610c5c57610c5c613c17565b600060208284031215613dd657600080fd5b5051919050565b600060208284031215613def57600080fd5b8151610ff9816139e2565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b600060208284031215613e6957600080fd5b8151610ff9816139a1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ec45784516001600160a01b031683529383019391830191600101613e9f565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613efa57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122027b7a1599bf83f1e798329a18e29a9e9878446c2027ff8521967ace2d71b1b9e64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103bc5760003560e01c80635f35bc5c116101f2578063a938d1c91161010d578063d2fcc001116100a0578063e3b467911161006f578063e3b4679114610b39578063e982f35114610b59578063f2fde38b14610b79578063f9d0831a14610b9957600080fd5b8063d2fcc00114610a9d578063dd62ed3e14610abd578063e01af92c14610b03578063e2f4560514610b2357600080fd5b8063b6f7f681116100dc578063b6f7f68114610a1d578063bb85c6d114610a3d578063c024666814610a5d578063c04a541414610a7d57600080fd5b8063a938d1c9146109bc578063aa4bde28146109d2578063afa4f3b2146109e8578063b577554a14610a0857600080fd5b80638da5cb5b11610185578063989a124f11610154578063989a124f1461092d578063a457c2d714610943578063a8a69b9d14610963578063a9059cbb1461099c57600080fd5b80638da5cb5b146108c457806393a7781f146108e257806394929164146108f857806395d89b411461091857600080fd5b8063715018a6116101c1578063715018a61461084157806375f0a8741461085657806388f82020146108765780638a8c523c146108af57600080fd5b80635f35bc5c146107d457806365a8ee4f146107ea5780636ddd17131461080057806370a082311461082157600080fd5b8063313ce567116102e257806352390c021161027557806356a6cabf1161024457806356a6cabf1461076857806359136fa514610788578063599270441461079e5780635a04e035146107be57600080fd5b806352390c02146106cf5780635342acb4146106ef57806355ef1df2146107285780635654d0b31461074857600080fd5b80634549b039116102b15780634549b0391461065857806349bd5a5e146106785780634ada218b146106985780634b93d059146106b957600080fd5b8063313ce567146105d65780633685d419146105f857806339509351146106185780633bd5d1731461063857600080fd5b806318160ddd1161035a57806327a14fc21161032957806327a14fc21461055c5780632a6c7dba1461057c5780632ba86bf21461059c5780632d838119146105b657600080fd5b806318160ddd146104d457806318d9ceae146104e957806321a9d82a1461052257806323b872dd1461053c57600080fd5b8063142725fc11610396578063142725fc14610443578063150c880c146104595780631529fbbf1461047b5780631694505e1461049c57600080fd5b80630105d0fd146103c857806306fdde03146103f1578063095ea7b31461041357600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de60265481565b6040519081526020015b60405180910390f35b3480156103fd57600080fd5b50610406610bb9565b6040516103e89190613953565b34801561041f57600080fd5b5061043361042e3660046139b6565b610c4b565b60405190151581526020016103e8565b34801561044f57600080fd5b506103de60115481565b34801561046557600080fd5b506104796104743660046139f0565b610c62565b005b34801561048757600080fd5b50601f5461043390600160a01b900460ff1681565b3480156104a857600080fd5b506021546104bc906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b3480156104e057600080fd5b50600b546103de565b3480156104f557600080fd5b50610433610504366004613a29565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561052e57600080fd5b506029546104339060ff1681565b34801561054857600080fd5b50610433610557366004613a46565b610d35565b34801561056857600080fd5b50610479610577366004613a87565b610d87565b34801561058857600080fd5b50610479610597366004613aa0565b610e9d565b3480156105a857600080fd5b506025546104339060ff1681565b3480156105c257600080fd5b506103de6105d1366004613a87565b610f7c565b3480156105e257600080fd5b5060095460405160ff90911681526020016103e8565b34801561060457600080fd5b50610479610613366004613a29565b611000565b34801561062457600080fd5b506104336106333660046139b6565b6111b6565b34801561064457600080fd5b50610479610653366004613a87565b6111ed565b34801561066457600080fd5b506103de610673366004613abd565b6112db565b34801561068457600080fd5b506022546104bc906001600160a01b031681565b3480156106a457600080fd5b5060225461043390600160b01b900460ff1681565b3480156106c557600080fd5b506103de60105481565b3480156106db57600080fd5b506104796106ea366004613a29565b61136a565b3480156106fb57600080fd5b5061043361070a366004613a29565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561073457600080fd5b50601d546104bc906001600160a01b031681565b34801561075457600080fd5b50610479610763366004613aa0565b6114bd565b34801561077457600080fd5b50610479610783366004613aa0565b6115c7565b34801561079457600080fd5b506103de60275481565b3480156107aa57600080fd5b50601f546104bc906001600160a01b031681565b3480156107ca57600080fd5b506103de60125481565b3480156107e057600080fd5b506103de600f5481565b3480156107f657600080fd5b506103de60135481565b34801561080c57600080fd5b5060225461043390600160a81b900460ff1681565b34801561082d57600080fd5b506103de61083c366004613a29565b6116ab565b34801561084d57600080fd5b5061047961170a565b34801561086257600080fd5b50601b546104bc906001600160a01b031681565b34801561088257600080fd5b50610433610891366004613a29565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156108bb57600080fd5b5061047961177e565b3480156108d057600080fd5b506000546001600160a01b03166104bc565b3480156108ee57600080fd5b506103de600e5481565b34801561090457600080fd5b50601c546104bc906001600160a01b031681565b34801561092457600080fd5b50610406611817565b34801561093957600080fd5b506103de60155481565b34801561094f57600080fd5b5061043361095e3660046139b6565b611826565b34801561096f57600080fd5b5061043361097e366004613a29565b6001600160a01b031660009081526028602052604090205460ff1690565b3480156109a857600080fd5b506104336109b73660046139b6565b61185d565b3480156109c857600080fd5b506103de60145481565b3480156109de57600080fd5b506103de602a5481565b3480156109f457600080fd5b50610479610a03366004613a87565b61186a565b348015610a1457600080fd5b50600d546103de565b348015610a2957600080fd5b50610479610a38366004613ae2565b611954565b348015610a4957600080fd5b50610479610a58366004613a29565b611ae1565b348015610a6957600080fd5b50610479610a783660046139f0565b611c2a565b348015610a8957600080fd5b50601e546104bc906001600160a01b031681565b348015610aa957600080fd5b50610479610ab83660046139f0565b611d2f565b348015610ac957600080fd5b506103de610ad8366004613b04565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b0f57600080fd5b50610479610b1e366004613aa0565b611e49565b348015610b2f57600080fd5b506103de60235481565b348015610b4557600080fd5b50610479610b54366004613b32565b611ec0565b348015610b6557600080fd5b50610479610b74366004613b32565b611fcf565b348015610b8557600080fd5b50610479610b94366004613a29565b6120d4565b348015610ba557600080fd5b50610479610bb4366004613a29565b6121be565b606060078054610bc890613b64565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf490613b64565b8015610c415780601f10610c1657610100808354040283529160200191610c41565b820191906000526020600020905b815481529060010190602001808311610c2457829003601f168201915b5050505050905090565b6000610c58338484612340565b5060015b92915050565b6000546001600160a01b03163314610c955760405162461bcd60e51b8152600401610c8c90613b9e565b60405180910390fd5b6001600160a01b03821660009081526024602052604090205481151560ff909116151503610cd55760405162461bcd60e51b8152600401610c8c90613bd3565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6000610d42848484612464565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610d7d918691610d78908690613c2d565b612340565b5060019392505050565b6000546001600160a01b03163314610db15760405162461bcd60e51b8152600401610c8c90613b9e565b6064610dbf60095460ff1690565b610dca90600a613d24565b600b54610dd79190613d33565b610de19190613d33565b811015610e465760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b6064820152608401610c8c565b60095460ff16610e5790600a613d24565b610e619082613d55565b602a8190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6000546001600160a01b03163314610ec75760405162461bcd60e51b8152600401610c8c90613b9e565b60295460ff16151581151503610f355760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b6064820152608401610c8c565b6029805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610e92565b6000600c54821115610fe35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c8c565b6000610fed6128c1565b9050610ff98184613d33565b9392505050565b6000546001600160a01b0316331461102a5760405162461bcd60e51b8152600401610c8c90613b9e565b6001600160a01b03811660009081526005602052604090205460ff166110925760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610c8c565b60005b6006548110156111b257816001600160a01b0316600682815481106110bc576110bc613d6c565b6000918252602090912001546001600160a01b0316036111a057600680546110e690600190613c2d565b815481106110f6576110f6613d6c565b600091825260209091200154600680546001600160a01b03909216918390811061112257611122613d6c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600680548061117a5761117a613d82565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111aa81613d98565b915050611095565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c58918590610d78908690613db1565b3360008181526005602052604090205460ff16156112625760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c8c565b600061126d836128e4565b505050506001600160a01b03851660009081526001602052604090205492935061129b928492509050613c2d565b6001600160a01b038316600090815260016020526040902055600c546112c2908290613c2d565b600c55600d546112d3908490613db1565b600d55505050565b6000600a5483111561132f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c8c565b8161134f57600061133f846128e4565b50949650610c5c95505050505050565b600061135a846128e4565b50939650610c5c95505050505050565b6000546001600160a01b031633146113945760405162461bcd60e51b8152600401610c8c90613b9e565b6001600160a01b03811660009081526005602052604090205460ff16156113fd5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c8c565b6001600160a01b03811660009081526001602052604090205415611457576001600160a01b03811660009081526001602052604090205461143d90610f7c565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146114e75760405162461bcd60e51b8152600401610c8c90613b9e565b801515601f60149054906101000a900460ff1615150361157a5760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610c8c565b601f8054821515600160a01b0260ff60a01b199091161790556040517f77c1f4015c54df9478a364bf8fc1b76b03f0eda36c594de58b4023771cebb9e790610e9290831515815260200190565b6000546001600160a01b031633146115f15760405162461bcd60e51b8152600401610c8c90613b9e565b60255460ff161515811515036116645760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610c8c565b6025805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610e92565b6001600160a01b03811660009081526005602052604081205460ff16156116e857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c5c90610f7c565b6000546001600160a01b031633146117345760405162461bcd60e51b8152600401610c8c90613b9e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117a85760405162461bcd60e51b8152600401610c8c90613b9e565b602254600160b01b900460ff16156118025760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610c8c565b6022805460ff60b01b1916600160b01b179055565b606060088054610bc890613b64565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c58918590610d78908690613c2d565b6000610c58338484612464565b6000546001600160a01b031633146118945760405162461bcd60e51b8152600401610c8c90613b9e565b620186a06118a1600b5490565b6118ab9190613d33565b811161191f5760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610c8c565b60238190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610e92565b6000546001600160a01b0316331461197e5760405162461bcd60e51b8152600401610c8c90613b9e565b606461198c60095460ff1690565b61199790600a613d24565b600b546119a49190613d33565b6119ae9190613d33565b82101580156119ec575060646119c660095460ff1690565b6119d190600a613d24565b600b546119de9190613d33565b6119e89190613d33565b8110155b611a5e5760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610c8c565b60095460ff16611a6f90600a613d24565b611a799083613d55565b60265560095460ff16611a8d90600a613d24565b611a979082613d55565b60278190556026546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13192611ad5928252602082015260400190565b60405180910390a15050565b6000546001600160a01b03163314611b0b5760405162461bcd60e51b8152600401610c8c90613b9e565b601b546001600160a01b0390811690821603611b7a5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610c8c565b6001600160a01b038116611bdc5760405162461bcd60e51b8152602060048201526024808201527f4d61726b6574696e672077616c6c657420697320746865207a65726f206164646044820152637265737360e01b6064820152608401610c8c565b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610e92565b6000546001600160a01b03163314611c545760405162461bcd60e51b8152600401610c8c90613b9e565b6001600160a01b03821660009081526004602052604090205481151560ff909116151503611cd75760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610c8c565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610d29565b6000546001600160a01b03163314611d595760405162461bcd60e51b8152600401610c8c90613b9e565b6001600160a01b03821660009081526028602052604090205481151560ff909116151503611d995760405162461bcd60e51b8152600401610c8c90613bd3565b306001600160a01b03831603611df15760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610c8c565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101610d29565b6000546001600160a01b03163314611e735760405162461bcd60e51b8152600401610c8c90613b9e565b60228054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610e9290831515815260200190565b6000546001600160a01b03163314611eea5760405162461bcd60e51b8152600401610c8c90613b9e565b600e8490556010839055601282905560148190558082611f0a8587613db1565b611f149190613db1565b611f1e9190613db1565b601981905560641015611f7f5760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526231302560e81b6064820152608401610c8c565b600e54601054601254604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a150505050565b6000546001600160a01b03163314611ff95760405162461bcd60e51b8152600401610c8c90613b9e565b600f84905560118390556013829055601581905580826120198587613db1565b6120239190613db1565b61202d9190613db1565b601a8190556064101561208e5760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632031302560e01b6064820152608401610c8c565b600f54601154601354604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa5790606001611fc1565b6000546001600160a01b031633146120fe5760405162461bcd60e51b8152600401610c8c90613b9e565b6001600160a01b0381166121635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121e85760405162461bcd60e51b8152600401610c8c90613b9e565b306001600160a01b038216036122405760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610c8c565b6001600160a01b038116612258576111b2334761293f565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156122a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c59190613dc4565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190613ddd565b5050505b50565b6001600160a01b0383166123a25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8c565b6001600160a01b0382166124035760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8c565b6000811161252a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c8c565b6001600160a01b03831660009081526004602052604090205460ff1615801561256c57506001600160a01b03821660009081526004602052604090205460ff16155b156125ca57602254600160b01b900460ff166125ca5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610c8c565b60255460ff16156126ac576022546001600160a01b03848116911614806125fe57506022546001600160a01b038381169116145b801561262357506001600160a01b03831660009081526024602052604090205460ff16155b801561264857506001600160a01b03821660009081526024602052604090205460ff16155b156126ac576022546001600160a01b039081169084160361268a576026548111156126855760405162461bcd60e51b8152600401610c8c90613dfa565b6126ac565b6027548111156126ac5760405162461bcd60e51b8152600401610c8c90613dfa565b60006126b7306116ab565b602354909150811080159081906126d85750602254600160a01b900460ff16155b80156126f157506022546001600160a01b038581169116145b80156127065750602254600160a81b900460ff165b156127bf576022805460ff60a01b1916600160a01b17905560135460125460009161273091613db1565b905060006011546010546127449190613db1565b905060006127528284613db1565b905080156127ae5781156127845760008161276d8488613d55565b6127779190613d33565b9050612782816129ee565b505b82156127ae576000816127978588613d55565b6127a19190613d33565b90506127ac81612c5e565b505b50506022805460ff60a01b19169055505b6127ca858585612dfd565b60295460ff16156128ba576001600160a01b03851660009081526028602052604090205460ff1615801561281757506001600160a01b03841660009081526028602052604090205460ff16155b801561283157506022546001600160a01b03858116911614155b156128ba576000612841856116ab565b602a549091506128518583613db1565b11156128b85760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b6064820152608401610c8c565b505b5050505050565b60008060006128ce613000565b90925090506128dd8183613d33565b9250505090565b60008060008060008060008060008060006128fe8c613183565b9350935093509350600080600061291f8f87878761291a6128c1565b6131e2565b919f509d509b509599509397509195509350505050919395979092949650565b6000814710156129915760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c8c565b6000836001600160a01b03168360405160006040518083038185875af1925050503d80600081146129de576040519150601f19603f3d011682016040523d82523d6000602084013e6129e3565b606091505b509095945050505050565b60006129fb600283613d33565b90506000612a098284613c2d565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110612a4357612a43613d6c565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac09190613e57565b81600181518110612ad357612ad3613d6c565b6001600160a01b03928316602091820292909201015260215460405163791ac94760e01b815291169063791ac94790612b19908790600090869030904290600401613e74565b600060405180830381600087803b158015612b3357600080fd5b505af1158015612b47573d6000803e3d6000fd5b5050505060008247612b599190613c2d565b6021549091506001600160a01b031663f305d719823087600080612b856000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612bed573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c129190613ee5565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b604080516002808252606082018352479260009291906020830190803683370190505090503081600081518110612c9757612c97613d6c565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d149190613e57565b81600181518110612d2757612d27613d6c565b6001600160a01b03928316602091820292909201015260215460405163791ac94760e01b815291169063791ac94790612d6d908690600090869030904290600401613e74565b600060405180830381600087803b158015612d8757600080fd5b505af1158015612d9b573d6000803e3d6000fd5b5050505060008247612dad9190613c2d565b601b54909150612dc6906001600160a01b03168261293f565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629999101611fc1565b6001600160a01b03831660009081526004602052604090205460ff1680612e3c57506001600160a01b03821660009081526004602052604090205460ff165b15612e4e57612e49613254565b612eac565b6022546001600160a01b0390811690831603612e6c57612e49613288565b6022546001600160a01b0390811690841603612e8a57612e496132e2565b601f54600160a01b900460ff1615612ea457612e49613254565b612eac613288565b6001600160a01b03831660009081526005602052604090205460ff168015612eed57506001600160a01b03821660009081526005602052604090205460ff16155b15612f0257612efd838383613337565b505050565b6001600160a01b03831660009081526005602052604090205460ff16158015612f4357506001600160a01b03821660009081526005602052604090205460ff165b15612f5357612efd838383613478565b6001600160a01b03831660009081526005602052604090205460ff16158015612f9557506001600160a01b03821660009081526005602052604090205460ff16155b15612fa557612efd838383613532565b6001600160a01b03831660009081526005602052604090205460ff168015612fe557506001600160a01b03821660009081526005602052604090205460ff165b15612ff557612efd838383613585565b612efd838383613532565b600c54600a546000918291825b6006548110156131525782600160006006848154811061302f5761302f613d6c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061309a575081600260006006848154811061307357613073613d6c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130b057600c54600a54945094505050509091565b60016000600683815481106130c7576130c7613d6c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546130f69084613c2d565b9250600260006006838154811061310f5761310f613d6c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461313e9083613c2d565b91508061314a81613d98565b91505061300d565b50600a54600c546131639190613d33565b82101561317a57600c54600a549350935050509091565b90939092509050565b600080600080600061319486613608565b905060006131a187613624565b905060006131ae88613636565b9050600081836131be868c613c2d565b6131c89190613c2d565b6131d29190613c2d565b9993985091965094509092505050565b60008080806131f1858a613d55565b905060006131ff868a613d55565b9050600061320d878a613d55565b9050600061321b888a613d55565b90506000818361322b8688613c2d565b6132359190613c2d565b61323f9190613c2d565b949d949c50929a509298505050505050505050565b6016541580156132645750601754155b80156132705750601854155b1561327757565b600060168190556018819055601755565b600f546016541480156132ab57506015546011546132a69190613db1565b601754145b80156132ba5750601354601854145b156132c157565b600f546016556013546018556015546011546132dd9190613db1565b601755565b600e5460165414801561330557506014546010546133009190613db1565b601754145b80156133145750601254601854145b1561331b57565b600e546016556012546018556014546010546132dd9190613db1565b600080600080600080600061334b886128e4565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b031681526020019081526020016000205461338a9190613c2d565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546133ba908890613c2d565b6001600160a01b03808c1660009081526001602052604080822093909355908b16815220546133ea908790613db1565b6001600160a01b038a1660009081526001602052604090205561340c81613648565b613415826136d8565b61341f858461392d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161346491815260200190565b60405180910390a350505050505050505050565b600080600080600080600061348c886128e4565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546134cb9190613c2d565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054613502908590613db1565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546133ea908790613db1565b6000806000806000806000613546886128e4565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546133ba9190613c2d565b6000806000806000806000613599886128e4565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546135d89190613c2d565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546134cb908890613c2d565b600060646016548361361a9190613d55565b610c5c9190613d33565b600060646017548361361a9190613d55565b600060646018548361361a9190613d55565b801561233d5760006136586128c1565b905060006136668284613d55565b30600090815260016020526040902054909150613684908290613db1565b3060009081526001602090815260408083209390935560059052205460ff1615612efd57306000908152600260205260409020546136c3908490613db1565b30600090815260026020526040902055505050565b60008060006015546014546011546010546136f39190613db1565b6136fd9190613db1565b6137079190613db1565b111561376a576015546014546011546010546137239190613db1565b61372d9190613db1565b6137379190613db1565b6011546010546137479190613db1565b6137519085613d55565b61375b9190613d33565b91506137678284613c2d565b90505b81156137f957600061377a6128c1565b905060006137888285613d55565b306000908152600160205260409020549091506137a6908290613db1565b3060009081526001602090815260408083209390935560059052205460ff16156137f657306000908152600260205260409020546137e5908590613db1565b306000908152600260205260409020555b50505b8015612efd5760006138096128c1565b905060006138178284613d55565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54909150613852908290613db1565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff161561390f5761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546138e1908490613db1565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc555b82600b60008282546139219190613c2d565b90915550505050505050565b81600c5461393b9190613c2d565b600c55600d5461394c908290613db1565b600d555050565b600060208083528351808285015260005b8181101561398057858101830151858201604001528201613964565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461233d57600080fd5b600080604083850312156139c957600080fd5b82356139d4816139a1565b946020939093013593505050565b801515811461233d57600080fd5b60008060408385031215613a0357600080fd5b8235613a0e816139a1565b91506020830135613a1e816139e2565b809150509250929050565b600060208284031215613a3b57600080fd5b8135610ff9816139a1565b600080600060608486031215613a5b57600080fd5b8335613a66816139a1565b92506020840135613a76816139a1565b929592945050506040919091013590565b600060208284031215613a9957600080fd5b5035919050565b600060208284031215613ab257600080fd5b8135610ff9816139e2565b60008060408385031215613ad057600080fd5b823591506020830135613a1e816139e2565b60008060408385031215613af557600080fd5b50508035926020909101359150565b60008060408385031215613b1757600080fd5b8235613b22816139a1565b91506020830135613a1e816139a1565b60008060008060808587031215613b4857600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680613b7857607f821691505b602082108103613b9857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f4163636f756e7420697320616c72656164792073657420746f207468617420736040820152637461746560e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c5c57610c5c613c17565b600181815b80851115613c7b578160001904821115613c6157613c61613c17565b80851615613c6e57918102915b93841c9390800290613c45565b509250929050565b600082613c9257506001610c5c565b81613c9f57506000610c5c565b8160018114613cb55760028114613cbf57613cdb565b6001915050610c5c565b60ff841115613cd057613cd0613c17565b50506001821b610c5c565b5060208310610133831016604e8410600b8410161715613cfe575081810a610c5c565b613d088383613c40565b8060001904821115613d1c57613d1c613c17565b029392505050565b6000610ff960ff841683613c83565b600082613d5057634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610c5c57610c5c613c17565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201613daa57613daa613c17565b5060010190565b80820180821115610c5c57610c5c613c17565b600060208284031215613dd657600080fd5b5051919050565b600060208284031215613def57600080fd5b8151610ff9816139e2565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b600060208284031215613e6957600080fd5b8151610ff9816139a1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ec45784516001600160a01b031683529383019391830191600101613e9f565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613efa57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122027b7a1599bf83f1e798329a18e29a9e9878446c2027ff8521967ace2d71b1b9e64736f6c63430008110033
Deployed Bytecode Sourcemap
13016:30774:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40320:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;40320:39:0;;;;;;;;18966:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19884:161::-;;;;;;;;;;-1:-1:-1;19884:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;19884:161:0;1205:187:1;13977:33:0;;;;;;;;;;;;;;;;41727:364;;;;;;;;;;-1:-1:-1;41727:364:0;;;;;:::i;:::-;;:::i;:::-;;14701:44;;;;;;;;;;-1:-1:-1;14701:44:0;;;;-1:-1:-1;;;14701:44:0;;;;;;14832:42;;;;;;;;;;-1:-1:-1;14832:42:0;;;;-1:-1:-1;;;;;14832:42:0;;;;;;-1:-1:-1;;;;;2098:32:1;;;2080:51;;2068:2;2053:18;14832:42:0;1907:230:1;19243:101:0;;;;;;;;;;-1:-1:-1;19323:13:0;;19243:101;;42099:141;;;;;;;;;;-1:-1:-1;42099:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;42198:34:0;42174:4;42198:34;;;:25;:34;;;;;;;;;42099:141;42317:36;;;;;;;;;;-1:-1:-1;42317:36:0;;;;;;;;20053:266;;;;;;;;;;-1:-1:-1;20053:266:0;;;;;:::i;:::-;;:::i;42895:340::-;;;;;;;;;;-1:-1:-1;42895:340:0;;;;;:::i;:::-;;:::i;42607:280::-;;;;;;;;;;-1:-1:-1;42607:280:0;;;;;:::i;:::-;;:::i;40271:42::-;;;;;;;;;;-1:-1:-1;40271:42:0;;;;;;;;21846:250;;;;;;;;;;-1:-1:-1;21846:250:0;;;;;:::i;:::-;;:::i;19152:83::-;;;;;;;;;;-1:-1:-1;19218:9:0;;19152:83;;19218:9;;;;3428:36:1;;3416:2;3401:18;19152:83:0;3286:184:1;22445:479:0;;;;;;;;;;-1:-1:-1;22445:479:0;;;;;:::i;:::-;;:::i;20327:215::-;;;;;;;;;;-1:-1:-1;20327:215:0;;;;;:::i;:::-;;:::i;21023:369::-;;;;;;;;;;-1:-1:-1;21023:369:0;;;;;:::i;:::-;;:::i;21400:438::-;;;;;;;;;;-1:-1:-1;21400:438:0;;;;;:::i;:::-;;:::i;14881:29::-;;;;;;;;;;-1:-1:-1;14881:29:0;;;;-1:-1:-1;;;;;14881:29:0;;;14985:26;;;;;;;;;;-1:-1:-1;14985:26:0;;;;-1:-1:-1;;;14985:26:0;;;;;;13938:32;;;;;;;;;;;;;;;;22104:333;;;;;;;;;;-1:-1:-1;22104:333:0;;;;;:::i;:::-;;:::i;28634:124::-;;;;;;;;;;-1:-1:-1;28634:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;28722:28:0;28698:4;28722:28;;;:19;:28;;;;;;;;;28634:124;14463:72;;;;;;;;;;-1:-1:-1;14463:72:0;;;;-1:-1:-1;;;;;14463:72:0;;;39863:335;;;;;;;;;;-1:-1:-1;39863:335:0;;;;;:::i;:::-;;:::i;40685:347::-;;;;;;;;;;-1:-1:-1;40685:347:0;;;;;:::i;:::-;;:::i;40366:40::-;;;;;;;;;;;;;;;;14624:68;;;;;;;;;;-1:-1:-1;14624:68:0;;;;-1:-1:-1;;;;;14624:68:0;;;14019:32;;;;;;;;;;;;;;;;13902:27;;;;;;;;;;;;;;;;14058:33;;;;;;;;;;;;;;;;14955:23;;;;;;;;;;-1:-1:-1;14955:23:0;;;;-1:-1:-1;;;14955:23:0;;;;;;19352:198;;;;;;;;;;-1:-1:-1;19352:198:0;;;;;:::i;:::-;;:::i;1132:148::-;;;;;;;;;;;;;:::i;14348:30::-;;;;;;;;;;-1:-1:-1;14348:30:0;;;;-1:-1:-1;;;;;14348:30:0;;;20783:120;;;;;;;;;;-1:-1:-1;20783:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20875:20:0;20851:4;20875:20;;;:11;:20;;;;;;;;;20783:120;29111:156;;;;;;;;;;;;;:::i;918:79::-;;;;;;;;;;-1:-1:-1;956:7:0;983:6;-1:-1:-1;;;;;983:6:0;918:79;;13869:26;;;;;;;;;;;;;;;;14385:71;;;;;;;;;;-1:-1:-1;14385:71:0;;;;-1:-1:-1;;;;;14385:71:0;;;19057:87;;;;;;;;;;;;;:::i;14134:28::-;;;;;;;;;;;;;;;;20550:225;;;;;;;;;;-1:-1:-1;20550:225:0;;;;;:::i;:::-;;:::i;43642:145::-;;;;;;;;;;-1:-1:-1;43642:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;43741:38:0;43717:4;43741:38;;;:29;:38;;;;;;;;;43642:145;19558:167;;;;;;;;;;-1:-1:-1;19558:167:0;;;;;:::i;:::-;;:::i;14100:27::-;;;;;;;;;;;;;;;;42360:30;;;;;;;;;;;;;;;;33865:289;;;;;;;;;;-1:-1:-1;33865:289:0;;;;;:::i;:::-;;:::i;20911:104::-;;;;;;;;;;-1:-1:-1;20997:10:0;;20911:104;;41040:679;;;;;;;;;;-1:-1:-1;41040:679:0;;;;;:::i;:::-;;:::i;38266:371::-;;;;;;;;;;-1:-1:-1;38266:371:0;;;;;:::i;:::-;;:::i;37962:292::-;;;;;;;;;;-1:-1:-1;37962:292:0;;;;;:::i;:::-;;:::i;14542:75::-;;;;;;;;;;-1:-1:-1;14542:75:0;;;;-1:-1:-1;;;;;14542:75:0;;;43243:391;;;;;;;;;;-1:-1:-1;43243:391:0;;;;;:::i;:::-;;:::i;19733:143::-;;;;;;;;;;-1:-1:-1;19733:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19841:18:0;;;19814:7;19841:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19733:143;34166;;;;;;;;;;-1:-1:-1;34166:143:0;;;;;:::i;:::-;;:::i;15018:33::-;;;;;;;;;;;;;;;;38645:589;;;;;;;;;;-1:-1:-1;38645:589:0;;;;;:::i;:::-;;:::i;39242:613::-;;;;;;;;;;-1:-1:-1;39242:613:0;;;;;:::i;:::-;;:::i;1288:244::-;;;;;;;;;;-1:-1:-1;1288:244:0;;;;;:::i;:::-;;:::i;22969:442::-;;;;;;;;;;-1:-1:-1;22969:442:0;;;;;:::i;:::-;;:::i;18966:83::-;19003:13;19036:5;19029:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18966:83;:::o;19884:161::-;19959:4;19976:39;322:10;19999:7;20008:6;19976:8;:39::i;:::-;-1:-1:-1;20033:4:0;19884:161;;;;;:::o;41727:364::-;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;41853:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;:45;::::1;;:34;::::0;;::::1;:45;;::::0;41831:132:::1;;;;-1:-1:-1::0;;;41831:132:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41974:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:44;;-1:-1:-1;;41974:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42034:49;;1345:41:1;;;42034:49:0::1;::::0;1318:18:1;42034:49:0::1;;;;;;;;41727:364:::0;;:::o;20053:266::-;20151:4;20168:36;20178:6;20186:9;20197:6;20168:9;:36::i;:::-;-1:-1:-1;;;;;20246:19:0;;;;;;:11;:19;;;;;;;;322:10;20246:33;;;;;;;;;20215:74;;20224:6;;20246:42;;20282:6;;20246:42;:::i;:::-;20215:8;:74::i;:::-;-1:-1:-1;20307:4:0;20053:266;;;;;:::o;42895:340::-;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;43046:3:::1;43031:10;19218:9:::0;;;;;19152:83;43031:10:::1;43025:16;::::0;:2:::1;:16;:::i;:::-;19323:13:::0;;43008:34:::1;;;;:::i;:::-;43007:42;;;;:::i;:::-;42987:16;:62;;42979:120;;;::::0;-1:-1:-1;;;42979:120:0;;8256:2:1;42979:120:0::1;::::0;::::1;8238:21:1::0;8295:2;8275:18;;;8268:30;8334:34;8314:18;;;8307:62;-1:-1:-1;;;8385:18:1;;;8378:43;8438:19;;42979:120:0::1;8054:409:1::0;42979:120:0::1;19218:9:::0;;;;43148:16:::1;::::0;:2:::1;:16;:::i;:::-;43128:37;::::0;:16;:37:::1;:::i;:::-;43110:15;:55:::0;;;43183:44:::1;::::0;160:25:1;;;43183:44:0::1;::::0;148:2:1;133:18;43183:44:0::1;;;;;;;;42895:340:::0;:::o;42607:280::-;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;42701:21:::1;::::0;::::1;;42691:31;;::::0;::::1;;::::0;42683:88:::1;;;::::0;-1:-1:-1;;;42683:88:0;;8843:2:1;42683:88:0::1;::::0;::::1;8825:21:1::0;8882:2;8862:18;;;8855:30;8921:34;8901:18;;;8894:62;-1:-1:-1;;;8972:18:1;;;8965:43;9025:19;;42683:88:0::1;8641:409:1::0;42683:88:0::1;42782:21;:30:::0;;-1:-1:-1;;42782:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42830:49:::1;::::0;42782:30:::1;42857:21:::0;;;1370:14:1;1363:22;1345:41;;42830:49:0::1;::::0;1333:2:1;1318:18;42830:49:0::1;1205:187:1::0;21846:250:0;21912:7;21951;;21940;:18;;21932:73;;;;-1:-1:-1;;;21932:73:0;;9257:2:1;21932:73:0;;;9239:21:1;9296:2;9276:18;;;9269:30;9335:34;9315:18;;;9308:62;-1:-1:-1;;;9386:18:1;;;9379:40;9436:19;;21932:73:0;9055:406:1;21932:73:0;22016:19;22039:10;:8;:10::i;:::-;22016:33;-1:-1:-1;22067:21:0;22016:33;22067:7;:21;:::i;:::-;22060:28;21846:250;-1:-1:-1;;;21846:250:0:o;22445:479::-;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22527:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22519:60;;;::::0;-1:-1:-1;;;22519:60:0;;9668:2:1;22519:60:0::1;::::0;::::1;9650:21:1::0;9707:2;9687:18;;;9680:30;9746:29;9726:18;;;9719:57;9793:18;;22519:60:0::1;9466:351:1::0;22519:60:0::1;22595:9;22590:327;22614:9;:16:::0;22610:20;::::1;22590:327;;;22672:7;-1:-1:-1::0;;;;;22656:23:0::1;:9;22666:1;22656:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22656:12:0::1;:23:::0;22652:254:::1;;22715:9;22725:16:::0;;:20:::1;::::0;22744:1:::1;::::0;22725:20:::1;:::i;:::-;22715:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22700:9:::1;:12:::0;;-1:-1:-1;;;;;22715:31:0;;::::1;::::0;22710:1;;22700:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22700:46:0::1;-1:-1:-1::0;;;;;22700:46:0;;::::1;;::::0;;22765:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22804:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22804:28:0::1;::::0;;22851:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22851:15:0;;;;;-1:-1:-1;;;;;;22851:15:0::1;::::0;;;;;22590:327:::1;22445:479:::0;:::o;22652:254::-:1;22632:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22590:327;;;;22445:479:::0;:::o;20327:215::-;322:10;20415:4;20464:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20464:34:0;;;;;;;;;;20415:4;;20432:80;;20455:7;;20464:47;;20501:10;;20464:47;:::i;21023:369::-;322:10;21075:14;21124:19;;;:11;:19;;;;;;;;21123:20;21115:77;;;;-1:-1:-1;;;21115:77:0;;10558:2:1;21115:77:0;;;10540:21:1;10597:2;10577:18;;;10570:30;10636:34;10616:18;;;10609:62;-1:-1:-1;;;10687:18:1;;;10680:42;10739:19;;21115:77:0;10356:408:1;21115:77:0;21204:15;21229:19;21240:7;21229:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21277:15:0;;;;;;:7;:15;;;;;;21203:45;;-1:-1:-1;21277:25:0;;21203:45;;-1:-1:-1;21277:15:0;-1:-1:-1;21277:25:0;:::i;:::-;-1:-1:-1;;;;;21259:15:0;;;;;;:7;:15;;;;;:43;21323:7;;:17;;21333:7;;21323:17;:::i;:::-;21313:7;:27;21364:10;;:20;;21377:7;;21364:20;:::i;:::-;21351:10;:33;-1:-1:-1;;;21023:369:0:o;21400:438::-;21490:7;21529;;21518;:18;;21510:62;;;;-1:-1:-1;;;21510:62:0;;10971:2:1;21510:62:0;;;10953:21:1;11010:2;10990:18;;;10983:30;11049:33;11029:18;;;11022:61;11100:18;;21510:62:0;10769:355:1;21510:62:0;21588:17;21583:248;;21623:15;21648:19;21659:7;21648:10;:19::i;:::-;-1:-1:-1;21622:45:0;;-1:-1:-1;21682:14:0;;-1:-1:-1;;;;;;21682:14:0;21583:248;21731:23;21763:19;21774:7;21763:10;:19::i;:::-;-1:-1:-1;21729:53:0;;-1:-1:-1;21797:22:0;;-1:-1:-1;;;;;;21797:22:0;22104:333;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22187:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22186:21;22178:61;;;::::0;-1:-1:-1;;;22178:61:0;;11331:2:1;22178:61:0::1;::::0;::::1;11313:21:1::0;11370:2;11350:18;;;11343:30;11409:29;11389:18;;;11382:57;11456:18;;22178:61:0::1;11129:351:1::0;22178:61:0::1;-1:-1:-1::0;;;;;22253:16:0;::::1;22272:1;22253:16:::0;;;:7:::1;:16;::::0;;;;;:20;22250:108:::1;;-1:-1:-1::0;;;;;22329:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22309:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22290:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22250:108:::1;-1:-1:-1::0;;;;;22368:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22368:27:0::1;22391:4;22368:27:::0;;::::1;::::0;;;22406:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22406:23:0::1;::::0;;::::1;::::0;;22104:333::o;39863:335::-;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;39998:6:::1;39962:42;;:32;;;;;;;;;;;:42;;::::0;39954:121:::1;;;::::0;-1:-1:-1;;;39954:121:0;;11687:2:1;39954:121:0::1;::::0;::::1;11669:21:1::0;11726:2;11706:18;;;11699:30;11765:34;11745:18;;;11738:62;11836:34;11816:18;;;11809:62;-1:-1:-1;;;11887:19:1;;;11880:33;11930:19;;39954:121:0::1;11485:470:1::0;39954:121:0::1;40086:32;:41:::0;;;::::1;;-1:-1:-1::0;;;40086:41:0::1;-1:-1:-1::0;;;;40086:41:0;;::::1;;::::0;;40143:47:::1;::::0;::::1;::::0;::::1;::::0;40121:6;1370:14:1;1363:22;1345:41;;1333:2;1318:18;;1205:187;40685:347:0;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;40798:26:::1;::::0;::::1;;40788:36;;::::0;::::1;;::::0;40766:137:::1;;;::::0;-1:-1:-1;;;40766:137:0;;12162:2:1;40766:137:0::1;::::0;::::1;12144:21:1::0;12201:2;12181:18;;;12174:30;12240:34;12220:18;;;12213:62;-1:-1:-1;;;12291:18:1;;;12284:48;12349:19;;40766:137:0::1;11960:414:1::0;40766:137:0::1;40914:26;:35:::0;;-1:-1:-1;;40914:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;40965:59:::1;::::0;40914:35:::1;40997:26:::0;;;1370:14:1;1363:22;1345:41;;40965:59:0::1;::::0;1333:2:1;1318:18;40965:59:0::1;1205:187:1::0;19352:198:0;-1:-1:-1;;;;;19442:20:0;;19418:7;19442:20;;;:11;:20;;;;;;;;19438:49;;;-1:-1:-1;;;;;;19471:16:0;;;;;:7;:16;;;;;;;19352:198::o;19438:49::-;-1:-1:-1;;;;;19525:16:0;;;;;;:7;:16;;;;;;19505:37;;:19;:37::i;1132:148::-;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;1239:1:::1;1223:6:::0;;1202:40:::1;::::0;-1:-1:-1;;;;;1223:6:0;;::::1;::::0;1202:40:::1;::::0;1239:1;;1202:40:::1;1270:1;1253:19:::0;;-1:-1:-1;;;;;;1253:19:0::1;::::0;;1132:148::o;29111:156::-;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;29173:14:::1;::::0;-1:-1:-1;;;29173:14:0;::::1;;;:23;29165:62;;;::::0;-1:-1:-1;;;29165:62:0;;12581:2:1;29165:62:0::1;::::0;::::1;12563:21:1::0;12620:2;12600:18;;;12593:30;12659:28;12639:18;;;12632:56;12705:18;;29165:62:0::1;12379:350:1::0;29165:62:0::1;29238:14;:21:::0;;-1:-1:-1;;;;29238:21:0::1;-1:-1:-1::0;;;29238:21:0::1;::::0;;29111:156::o;19057:87::-;19096:13;19129:7;19122:14;;;;;:::i;20550:225::-;322:10;20643:4;20692:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20692:34:0;;;;;;;;;;20643:4;;20660:85;;20683:7;;20692:52;;20729:15;;20692:52;:::i;19558:167::-;19636:4;19653:42;322:10;19677:9;19688:6;19653:9;:42::i;33865:289::-;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;33983:3:::1;33967:13;19323::::0;;;19243:101;33967:13:::1;:19;;;;:::i;:::-;33955:9;:31;33947:106;;;::::0;-1:-1:-1;;;33947:106:0;;12936:2:1;33947:106:0::1;::::0;::::1;12918:21:1::0;12975:2;12955:18;;;12948:30;13014:34;12994:18;;;12987:62;13085:32;13065:18;;;13058:60;13135:19;;33947:106:0::1;12734:426:1::0;33947:106:0::1;34064:18;:30:::0;;;34110:36:::1;::::0;160:25:1;;;34110:36:0::1;::::0;148:2:1;133:18;34110:36:0::1;14:177:1::0;41040:679:0;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;41261:3:::1;41247:10;19218:9:::0;;;;;19152:83;41247:10:::1;41241:16;::::0;:2:::1;:16;:::i;:::-;19323:13:::0;;41224:34:::1;;;;:::i;:::-;:40;;;;:::i;:::-;41195:24;:69;;:156;;;;;41348:3;41334:10;19218:9:::0;;;;;19152:83;41334:10:::1;41328:16;::::0;:2:::1;:16;:::i;:::-;19323:13:::0;;41311:34:::1;;;;:::i;:::-;:40;;;;:::i;:::-;41282:25;:69;;41195:156;41173:270;;;::::0;-1:-1:-1;;;41173:270:0;;13367:2:1;41173:270:0::1;::::0;::::1;13349:21:1::0;13406:2;13386:18;;;13379:30;13445:34;13425:18;;;13418:62;13516:33;13496:18;;;13489:61;13567:19;;41173:270:0::1;13165:427:1::0;41173:270:0::1;19218:9:::0;;;;41511:16:::1;::::0;:2:::1;:16;:::i;:::-;41482:46;::::0;:24;:46:::1;:::i;:::-;41455:23;:73:::0;19218:9;;;;41595:16:::1;::::0;:2:::1;:16;:::i;:::-;41566:46;::::0;:25;:46:::1;:::i;:::-;41539:24;:73:::0;;;41661:23:::1;::::0;41628:83:::1;::::0;::::1;::::0;::::1;::::0;13771:25:1;;13827:2;13812:18;;13805:34;13759:2;13744:18;;13597:248;41628:83:0::1;;;;;;;;41040:679:::0;;:::o;38266:371::-;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;38381:15:::1;::::0;-1:-1:-1;;;;;38381:15:0;;::::1;38361:35:::0;;::::1;::::0;38353:88:::1;;;::::0;-1:-1:-1;;;38353:88:0;;14052:2:1;38353:88:0::1;::::0;::::1;14034:21:1::0;14091:2;14071:18;;;14064:30;14130:34;14110:18;;;14103:62;-1:-1:-1;;;14181:18:1;;;14174:38;14229:19;;38353:88:0::1;13850:404:1::0;38353:88:0::1;-1:-1:-1::0;;;;;38460:28:0;::::1;38452:77;;;::::0;-1:-1:-1;;;38452:77:0;;14461:2:1;38452:77:0::1;::::0;::::1;14443:21:1::0;14500:2;14480:18;;;14473:30;14539:34;14519:18;;;14512:62;-1:-1:-1;;;14590:18:1;;;14583:34;14634:19;;38452:77:0::1;14259:400:1::0;38452:77:0::1;38540:15;:34:::0;;-1:-1:-1;;;;;;38540:34:0::1;-1:-1:-1::0;;;;;38540:34:0;::::1;::::0;;::::1;::::0;;;38590:39:::1;::::0;2080:51:1;;;38590:39:0::1;::::0;2068:2:1;2053:18;38590:39:0::1;1907:230:1::0;37962:292:0;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38057:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;38049:95:::1;;;::::0;-1:-1:-1;;;38049:95:0;;14866:2:1;38049:95:0::1;::::0;::::1;14848:21:1::0;14905:2;14885:18;;;14878:30;14944:34;14924:18;;;14917:62;-1:-1:-1;;;14995:18:1;;;14988:40;15045:19;;38049:95:0::1;14664:406:1::0;38049:95:0::1;-1:-1:-1::0;;;;;38155:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;38155:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;38212:34;;1345:41:1;;;38212:34:0::1;::::0;1318:18:1;38212:34:0::1;1205:187:1::0;43243:391:0;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43343:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:49;::::1;;:38;::::0;;::::1;:49;;::::0;43334:98:::1;;;;-1:-1:-1::0;;;43334:98:0::1;;;;;;;:::i;:::-;43470:4;-1:-1:-1::0;;;;;43451:24:0;::::1;::::0;43443:60:::1;;;::::0;-1:-1:-1;;;43443:60:0;;15277:2:1;43443:60:0::1;::::0;::::1;15259:21:1::0;15316:2;15296:18;;;15289:30;15355:25;15335:18;;;15328:53;15398:18;;43443:60:0::1;15075:347:1::0;43443:60:0::1;-1:-1:-1::0;;;;;43516:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;43516:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43582:44;;1345:41:1;;;43582:44:0::1;::::0;1318:18:1;43582:44:0::1;1205:187:1::0;34166:143:0;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;34235:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;34235:22:0::1;-1:-1:-1::0;;;;34235:22:0;;::::1;;::::0;;34273:28:::1;::::0;::::1;::::0;::::1;::::0;34249:8;1370:14:1;1363:22;1345:41;;1333:2;1318:18;;1205:187;38645:589:0;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;38806:11:::1;:26:::0;;;38843:17:::1;:38:::0;;;38892:17:::1;:38:::0;;;38941:12:::1;:28:::0;;;38956:13;38912:18;38997:31:::1;38863:18:::0;38820:12;38997:31:::1;:::i;:::-;:51;;;;:::i;:::-;:66;;;;:::i;:::-;38982:12;:81:::0;;;39100:3:::1;-1:-1:-1::0;39084:19:0::1;39076:67;;;::::0;-1:-1:-1;;;39076:67:0;;15629:2:1;39076:67:0::1;::::0;::::1;15611:21:1::0;15668:2;15648:18;;;15641:30;15707:34;15687:18;;;15680:62;-1:-1:-1;;;15758:18:1;;;15751:33;15801:19;;39076:67:0::1;15427:399:1::0;39076:67:0::1;39176:11;::::0;39189:17:::1;::::0;39208::::1;::::0;39161:65:::1;::::0;;16033:25:1;;;16089:2;16074:18;;16067:34;;;;16117:18;;;16110:34;39161:65:0::1;::::0;16021:2:1;16006:18;39161:65:0::1;;;;;;;;38645:589:::0;;;;:::o;39242:613::-;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;39408:12:::1;:28:::0;;;39447:18:::1;:40:::0;;;39498:18:::1;:40:::0;;;39549:13:::1;:30:::0;;;39565:14;39519:19;39608:33:::1;39468:19:::0;39423:13;39608:33:::1;:::i;:::-;:54;;;;:::i;:::-;:70;;;;:::i;:::-;39592:13;:86:::0;;;39716:3:::1;-1:-1:-1::0;39699:20:0::1;39691:69;;;::::0;-1:-1:-1;;;39691:69:0;;16357:2:1;39691:69:0::1;::::0;::::1;16339:21:1::0;16396:2;16376:18;;;16369:30;16435:34;16415:18;;;16408:62;-1:-1:-1;;;16486:18:1;;;16479:34;16530:19;;39691:69:0::1;16155:400:1::0;39691:69:0::1;39794:12;::::0;39808:18:::1;::::0;39828::::1;::::0;39778:69:::1;::::0;;16033:25:1;;;16089:2;16074:18;;16067:34;;;;16117:18;;;16110:34;39778:69:0::1;::::0;16021:2:1;16006:18;39778:69:0::1;15831:319:1::0;1288:244:0;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1377:22:0;::::1;1369:73;;;::::0;-1:-1:-1;;;1369:73:0;;16762:2:1;1369:73:0::1;::::0;::::1;16744:21:1::0;16801:2;16781:18;;;16774:30;16840:34;16820:18;;;16813:62;-1:-1:-1;;;16891:18:1;;;16884:36;16937:19;;1369:73:0::1;16560:402:1::0;1369:73:0::1;1479:6;::::0;;1458:38:::1;::::0;-1:-1:-1;;;;;1458:38:0;;::::1;::::0;1479:6;::::1;::::0;1458:38:::1;::::0;::::1;1507:6;:17:::0;;-1:-1:-1;;;;;;1507:17:0::1;-1:-1:-1::0;;;;;1507:17:0;;;::::1;::::0;;;::::1;::::0;;1288:244::o;22969:442::-;1045:6;;-1:-1:-1;;;;;1045:6:0;322:10;1045:22;1037:67;;;;-1:-1:-1;;;1037:67:0;;;;;;;:::i;:::-;23065:4:::1;-1:-1:-1::0;;;;;23048:22:0;::::1;::::0;23040:67:::1;;;::::0;-1:-1:-1;;;23040:67:0;;17169:2:1;23040:67:0::1;::::0;::::1;17151:21:1::0;;;17188:18;;;17181:30;17247:34;17227:18;;;17220:62;17299:18;;23040:67:0::1;16967:356:1::0;23040:67:0::1;-1:-1:-1::0;;;;;23122:21:0;::::1;23118:127;;23160:52;23168:10;23190:21;23160:29;:52::i;23118:127::-;23317:35;::::0;-1:-1:-1;;;23317:35:0;;23346:4:::1;23317:35;::::0;::::1;2080:51:1::0;23282:5:0;;23255:17:::1;::::0;-1:-1:-1;;;;;23317:20:0;::::1;::::0;::::1;::::0;2053:18:1;;23317:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23363:40;::::0;-1:-1:-1;;;23363:40:0;;23383:10:::1;23363:40;::::0;::::1;17691:51:1::0;17758:18;;;17751:34;;;23299:53:0;;-1:-1:-1;;;;;;23363:19:0;::::1;::::0;::::1;::::0;17664:18:1;;23363:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23029:382;;1115:1;22969:442:::0;:::o;28766:337::-;-1:-1:-1;;;;;28859:19:0;;28851:68;;;;-1:-1:-1;;;28851:68:0;;18248:2:1;28851:68:0;;;18230:21:1;18287:2;18267:18;;;18260:30;18326:34;18306:18;;;18299:62;-1:-1:-1;;;18377:18:1;;;18370:34;18421:19;;28851:68:0;18046:400:1;28851:68:0;-1:-1:-1;;;;;28938:21:0;;28930:68;;;;-1:-1:-1;;;28930:68:0;;18653:2:1;28930:68:0;;;18635:21:1;18692:2;18672:18;;;18665:30;18731:34;18711:18;;;18704:62;-1:-1:-1;;;18782:18:1;;;18775:32;18824:19;;28930:68:0;18451:398:1;28930:68:0;-1:-1:-1;;;;;29011:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29063:32;;160:25:1;;;29063:32:0;;133:18:1;29063:32:0;;;;;;;28766:337;;;:::o;29279:2937::-;-1:-1:-1;;;;;29401:18:0;;29393:68;;;;-1:-1:-1;;;29393:68:0;;19056:2:1;29393:68:0;;;19038:21:1;19095:2;19075:18;;;19068:30;19134:34;19114:18;;;19107:62;-1:-1:-1;;;19185:18:1;;;19178:35;19230:19;;29393:68:0;18854:401:1;29393:68:0;29489:1;29480:6;:10;29472:64;;;;-1:-1:-1;;;29472:64:0;;19462:2:1;29472:64:0;;;19444:21:1;19501:2;19481:18;;;19474:30;19540:34;19520:18;;;19513:62;-1:-1:-1;;;19591:18:1;;;19584:39;19640:19;;29472:64:0;19260:405:1;29472:64:0;-1:-1:-1;;;;;29553:25:0;;;;;;:19;:25;;;;;;;;29552:26;:54;;;;-1:-1:-1;;;;;;29583:23:0;;;;;;:19;:23;;;;;;;;29582:24;29552:54;29549:139;;;29631:14;;-1:-1:-1;;;29631:14:0;;;;29623:53;;;;-1:-1:-1;;;29623:53:0;;19872:2:1;29623:53:0;;;19854:21:1;19911:2;19891:18;;;19884:30;19950:28;19930:18;;;19923:56;19996:18;;29623:53:0;19670:350:1;29623:53:0;29704:26;;;;29700:770;;;29770:13;;-1:-1:-1;;;;;29762:21:0;;;29770:13;;29762:21;;:44;;-1:-1:-1;29793:13:0;;-1:-1:-1;;;;;29787:19:0;;;29793:13;;29787:19;29762:44;29761:107;;;;-1:-1:-1;;;;;;29828:31:0;;;;;;:25;:31;;;;;;;;:40;29761:107;:169;;;;-1:-1:-1;;;;;;29890:29:0;;;;;;:25;:29;;;;;;;;:40;29761:169;29757:702;;;29977:13;;-1:-1:-1;;;;;29977:13:0;;;29969:21;;;;29965:479;;30059:23;;30049:6;:33;;30015:180;;;;-1:-1:-1;;;30015:180:0;;;;;;;:::i;:::-;29965:479;;;30288:24;;30278:6;:34;;30244:180;;;;-1:-1:-1;;;30244:180:0;;;;;;;:::i;:::-;30482:28;30513:24;30531:4;30513:9;:24::i;:::-;30607:18;;30482:55;;-1:-1:-1;30583:42:0;;;;;;;30654:53;;-1:-1:-1;30691:16:0;;-1:-1:-1;;;30691:16:0;;;;30690:17;30654:53;:89;;;;-1:-1:-1;30730:13:0;;-1:-1:-1;;;;;30724:19:0;;;30730:13;;30724:19;30654:89;:117;;;;-1:-1:-1;30760:11:0;;-1:-1:-1;;;30760:11:0;;;;30654:117;30636:985;;;30798:16;:23;;-1:-1:-1;;;;30798:23:0;-1:-1:-1;;;30798:23:0;;;30895:18;;30875:17;;30798:23;;30875:38;;;:::i;:::-;30850:63;;30928:22;30973:18;;30953:17;;:38;;;;:::i;:::-;30928:63;-1:-1:-1;31008:18:0;31029:31;30928:63;31029:14;:31;:::i;:::-;31008:52;-1:-1:-1;31080:14:0;;31077:492;;31118:18;;31115:198;;31161:23;31229:10;31188:37;31211:14;31188:20;:37;:::i;:::-;31187:52;;;;:::i;:::-;31161:78;;31262:31;31277:15;31262:14;:31::i;:::-;31138:175;31115:198;31352:18;;31349:204;;31395:23;31463:10;31422:37;31445:14;31422:20;:37;:::i;:::-;31421:52;;;;:::i;:::-;31395:78;;31496:37;31517:15;31496:20;:37::i;:::-;31372:181;31349:204;-1:-1:-1;;31585:16:0;:24;;-1:-1:-1;;;;31585:24:0;;;-1:-1:-1;30636:985:0;31707:30;31722:4;31727:2;31730:6;31707:14;:30::i;:::-;31754:21;;;;31750:459;;;-1:-1:-1;;;;;31807:35:0;;;;;;:29;:35;;;;;;;;31806:36;:92;;;;-1:-1:-1;;;;;;31865:33:0;;;;;;:29;:33;;;;;;;;31864:34;31806:92;:132;;;;-1:-1:-1;31925:13:0;;-1:-1:-1;;;;;31919:19:0;;;31925:13;;31919:19;;31806:132;31802:396;;;31973:15;31992:13;32002:2;31992:9;:13::i;:::-;32074:15;;31973:32;;-1:-1:-1;32054:16:0;32064:6;31973:32;32054:16;:::i;:::-;:35;;32024:158;;;;-1:-1:-1;;;32024:158:0;;20655:2:1;32024:158:0;;;20637:21:1;20694:2;20674:18;;;20667:30;20733:34;20713:18;;;20706:62;-1:-1:-1;;;20784:18:1;;;20777:46;20840:19;;32024:158:0;20453:412:1;32024:158:0;31954:244;31802:396;29382:2834;;29279:2937;;;:::o;24987:160::-;25028:7;25049:15;25066;25085:19;:17;:19::i;:::-;25048:56;;-1:-1:-1;25048:56:0;-1:-1:-1;25122:17:0;25048:56;;25122:17;:::i;:::-;25115:24;;;;24987:160;:::o;23568:472::-;23627:7;23636;23645;23654;23663;23672;23681;23702:23;23727:12;23741:18;23761;23783:20;23795:7;23783:11;:20::i;:::-;23701:102;;;;;;;;23815:15;23832:23;23857:12;23873:62;23885:7;23894:4;23900:10;23912;23924;:8;:10::i;:::-;23873:11;:62::i;:::-;23814:121;;-1:-1:-1;23814:121:0;-1:-1:-1;23814:121:0;-1:-1:-1;23986:15:0;;-1:-1:-1;24003:4:0;;-1:-1:-1;24009:10:0;;-1:-1:-1;24021:10:0;-1:-1:-1;;;;23568:472:0;;;;;;;;;:::o;2905:346::-;2984:4;3033:6;3008:21;:31;;3000:73;;;;-1:-1:-1;;;3000:73:0;;21072:2:1;3000:73:0;;;21054:21:1;21111:2;21091:18;;;21084:30;21150:31;21130:18;;;21123:59;21199:18;;3000:73:0;20870:353:1;3000:73:0;3165:12;3183:9;-1:-1:-1;;;;;3183:14:0;3206:6;3183:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3164:54:0;;2905:346;-1:-1:-1;;;;;2905:346:0:o;32224:950::-;32283:12;32298:10;32307:1;32298:6;:10;:::i;:::-;32283:25;-1:-1:-1;32319:17:0;32339:13;32283:25;32339:6;:13;:::i;:::-;32448:16;;;32462:1;32448:16;;;;;;;;32319:33;;-1:-1:-1;32390:21:0;;32365:22;;32448:16;;;;;;;;;;-1:-1:-1;32448:16:0;32424:40;;32493:4;32475;32480:1;32475:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32475:23:0;;;:7;;;;;;;;;;:23;;;;32519:15;;:22;;;-1:-1:-1;;;32519:22:0;;;;:15;;;;;:20;;:22;;;;;32475:7;;32519:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32509:4;32514:1;32509:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32509:32:0;;;:7;;;;;;;;;:32;32554:15;;:207;;-1:-1:-1;;;32554:207:0;;:15;;;:66;;:207;;32635:4;;32554:15;;32698:4;;32725;;32745:15;;32554:207;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32782:18;32827:14;32803:21;:38;;;;:::i;:::-;32854:15;;32782:59;;-1:-1:-1;;;;;;32854:15:0;:31;32782:59;32927:4;32947:9;32854:15;;33057:7;956;983:6;-1:-1:-1;;;;;983:6:0;;918:79;33057:7;32854:251;;;;;;-1:-1:-1;;;;;;32854:251:0;;;-1:-1:-1;;;;;23170:15:1;;;32854:251:0;;;23152:34:1;23202:18;;;23195:34;;;;23245:18;;;23238:34;;;;23288:18;;;23281:34;23352:15;;;23331:19;;;23324:44;33079:15:0;23384:19:1;;;23377:35;23086:19;;32854:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;33123:43:0;;;16033:25:1;;;16089:2;16074:18;;16067:34;;;16117:18;;;16110:34;;;33123:43:0;;-1:-1:-1;16021:2:1;16006:18;33123:43:0;;;;;;;32272:902;;;;;32224:950;:::o;33182:675::-;33335:16;;;33349:1;33335:16;;;;;;;;33277:21;;33252:22;;33335:16;33349:1;33335:16;;;;;;;;;;-1:-1:-1;33335:16:0;33311:40;;33380:4;33362;33367:1;33362:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33362:23:0;;;:7;;;;;;;;;;:23;;;;33406:15;;:22;;;-1:-1:-1;;;33406:22:0;;;;:15;;;;;:20;;:22;;;;;33362:7;;33406:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33396:4;33401:1;33396:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33396:32:0;;;:7;;;;;;;;;:32;33441:15;;:214;;-1:-1:-1;;;33441:214:0;;:15;;;:66;;:214;;33522:11;;33441:15;;33592:4;;33619;;33639:15;;33441:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33668:18;33713:14;33689:21;:38;;;;:::i;:::-;33748:15;;33668:59;;-1:-1:-1;33740:46:0;;-1:-1:-1;;;;;33748:15:0;33668:59;33740:34;:46::i;:::-;-1:-1:-1;33804:45:0;;;13771:25:1;;;13827:2;13812:18;;13805:34;;;33804:45:0;;13744:18:1;33804:45:0;13597:248:1;34317:1117:0;-1:-1:-1;;;;;34416:27:0;;;;;;:19;:27;;;;;;;;;:75;;-1:-1:-1;;;;;;34461:30:0;;;;;;:19;:30;;;;;;;;34416:75;34412:406;;;34523:14;:12;:14::i;:::-;34412:406;;;34570:13;;-1:-1:-1;;;;;34570:13:0;;;34557:26;;;;34554:264;;34599:12;:10;:12::i;34554:264::-;34641:13;;-1:-1:-1;;;;;34641:13:0;;;34631:23;;;;34628:190;;34670:11;:9;:11::i;34628:190::-;34701:32;;-1:-1:-1;;;34701:32:0;;;;34698:120;;;34749:14;:12;:14::i;34698:120::-;34794:12;:10;:12::i;:::-;-1:-1:-1;;;;;34834:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;34858:22:0;;;;;;:11;:22;;;;;;;;34857:23;34834:46;34830:597;;;34897:48;34919:6;34927:9;34938:6;34897:21;:48::i;:::-;34317:1117;;;:::o;34830:597::-;-1:-1:-1;;;;;34968:19:0;;;;;;:11;:19;;;;;;;;34967:20;:46;;;;-1:-1:-1;;;;;;34991:22:0;;;;;;:11;:22;;;;;;;;34967:46;34963:464;;;35030:46;35050:6;35058:9;35069:6;35030:19;:46::i;34963:464::-;-1:-1:-1;;;;;35099:19:0;;;;;;:11;:19;;;;;;;;35098:20;:47;;;;-1:-1:-1;;;;;;35123:22:0;;;;;;:11;:22;;;;;;;;35122:23;35098:47;35094:333;;;35162:44;35180:6;35188:9;35199:6;35162:17;:44::i;35094:333::-;-1:-1:-1;;;;;35228:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;35251:22:0;;;;;;:11;:22;;;;;;;;35228:45;35224:203;;;35290:48;35312:6;35320:9;35331:6;35290:21;:48::i;35224:203::-;35371:44;35389:6;35397:9;35408:6;35371:17;:44::i;25155:552::-;25252:7;;25288;;25205;;;;;25312:283;25336:9;:16;25332:20;;25312:283;;;25402:7;25378;:21;25386:9;25396:1;25386:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25386:12:0;25378:21;;;;;;;;;;;;;:31;;:66;;;25437:7;25413;:21;25421:9;25431:1;25421:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25421:12:0;25413:21;;;;;;;;;;;;;:31;25378:66;25374:97;;;25454:7;;25463;;25446:25;;;;;;;25155:552;;:::o;25374:97::-;25506:7;:21;25514:9;25524:1;25514:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25514:12:0;25506:21;;;;;;;;;;;;;25496:31;;:7;:31;:::i;:::-;25486:41;;25562:7;:21;25570:9;25580:1;25570:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25570:12:0;25562:21;;;;;;;;;;;;;25552:31;;:7;:31;:::i;:::-;25542:41;-1:-1:-1;25354:3:0;;;;:::i;:::-;;;;25312:283;;;;25629:7;;25619;;:17;;;;:::i;:::-;25609:7;:27;25605:58;;;25646:7;;25655;;25638:25;;;;;;25155:552;;:::o;25605:58::-;25682:7;;25691;;-1:-1:-1;25155:552:0;-1:-1:-1;25155:552:0:o;24048:420::-;24108:7;24117;24126;24135;24155:12;24170:24;24186:7;24170:15;:24::i;:::-;24155:39;;24205:18;24226:30;24248:7;24226:21;:30::i;:::-;24205:51;;24267:18;24288:30;24310:7;24288:21;:30::i;:::-;24267:51;-1:-1:-1;24329:23:0;24267:51;24372:10;24355:14;24365:4;24355:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;24329:66;24431:4;;-1:-1:-1;24437:10:0;;-1:-1:-1;24437:10:0;-1:-1:-1;24048:420:0;;-1:-1:-1;;;24048:420:0:o;24476:503::-;24611:7;;;;24667:21;24677:11;24667:7;:21;:::i;:::-;24649:39;-1:-1:-1;24699:12:0;24714:18;24721:11;24714:4;:18;:::i;:::-;24699:33;-1:-1:-1;24743:18:0;24764:24;24777:11;24764:10;:24;:::i;:::-;24743:45;-1:-1:-1;24799:18:0;24820:24;24833:11;24820:10;:24;:::i;:::-;24799:45;-1:-1:-1;24855:23:0;24799:45;24898:10;24881:14;24891:4;24881:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;24940:7;;;;-1:-1:-1;24966:4:0;;-1:-1:-1;24476:503:0;;-1:-1:-1;;;;;;;;;24476:503:0:o;27765:206::-;27811:7;;:12;:34;;;;-1:-1:-1;27827:13:0;;:18;27811:34;:56;;;;-1:-1:-1;27849:13:0;;:18;27811:56;27808:68;;;27765:206::o;27808:68::-;27906:1;27896:7;:11;;;27918:13;:17;;;27946:13;:17;27765:206::o;28302:320::-;28356:12;;28345:7;;:23;:80;;;;;28411:13;;28390:18;;:34;;;;:::i;:::-;28372:13;;:53;28345:80;:119;;;;;28446:18;;28429:13;;:35;28345:119;28342:132;;;28302:320::o;28342:132::-;28496:12;;28486:7;:22;28535:18;;28519:13;:34;28601:13;;28580:18;;:34;;28601:13;28580:34;:::i;:::-;28564:13;:50;28302:320::o;27983:311::-;28036:11;;28025:7;;:22;:77;;;;;28089:12;;28069:17;;:32;;;;:::i;:::-;28051:13;;:51;28025:77;:115;;;;;28123:17;;28106:13;;:34;28025:115;28022:128;;;27983:311::o;28022:128::-;28172:11;;28162:7;:21;28210:17;;28194:13;:33;28274:12;;28254:17;;:32;;28274:12;28254:32;:::i;36645:614::-;36748:15;36765:23;36790:12;36804:23;36829:12;36843:18;36863;36885:19;36896:7;36885:10;:19::i;:::-;36747:157;;;;;;;;;;;;;;36951:7;36933;:15;36941:6;-1:-1:-1;;;;;36933:15:0;-1:-1:-1;;;;;36933:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;36915:15:0;;;;;;:7;:15;;;;;;;;:43;;;;36987:7;:15;;;;:25;;37005:7;;36987:25;:::i;:::-;-1:-1:-1;;;;;36969:15:0;;;;;;;:7;:15;;;;;;:43;;;;37044:18;;;;;;;:36;;37065:15;;37044:36;:::i;:::-;-1:-1:-1;;;;;37023:18:0;;;;;;:7;:18;;;;;:57;37092:26;37107:10;37092:14;:26::i;:::-;37131;37146:10;37131:14;:26::i;:::-;37168:23;37180:4;37186;37168:11;:23::i;:::-;37224:9;-1:-1:-1;;;;;37207:44:0;37216:6;-1:-1:-1;;;;;37207:44:0;;37235:15;37207:44;;;;160:25:1;;148:2;133:18;;14:177;37207:44:0;;;;;;;;36736:523;;;;;;;36645:614;;;:::o;36003:634::-;36104:15;36121:23;36146:12;36160:23;36185:12;36199:18;36219;36241:19;36252:7;36241:10;:19::i;:::-;36103:157;;;;;;;;;;;;;;36307:7;36289;:15;36297:6;-1:-1:-1;;;;;36289:15:0;-1:-1:-1;;;;;36289:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;36271:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;36346:18;;;;;:7;:18;;;;;:36;;36367:15;;36346:36;:::i;:::-;-1:-1:-1;;;;;36325:18:0;;;;;;:7;:18;;;;;;;;:57;;;;36414:7;:18;;;;:36;;36435:15;;36414:36;:::i;35442:553::-;35541:15;35558:23;35583:12;35597:23;35622:12;35636:18;35656;35678:19;35689:7;35678:10;:19::i;:::-;35540:157;;;;;;;;;;;;;;35744:7;35726;:15;35734:6;-1:-1:-1;;;;;35726:15:0;-1:-1:-1;;;;;35726:15:0;;;;;;;;;;;;;:25;;;;:::i;37267:687::-;37370:15;37387:23;37412:12;37426:23;37451:12;37465:18;37485;37507:19;37518:7;37507:10;:19::i;:::-;37369:157;;;;;;;;;;;;;;37573:7;37555;:15;37563:6;-1:-1:-1;;;;;37555:15:0;-1:-1:-1;;;;;37555:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;37537:15:0;;;;;;:7;:15;;;;;;;;:43;;;;37609:7;:15;;;;:25;;37627:7;;37609:25;:::i;27343:122::-;27407:7;27454:3;27444:7;;27434;:17;;;;:::i;:::-;:23;;;;:::i;27473:134::-;27543:7;27596:3;27580:13;;27570:7;:23;;;;:::i;27619:134::-;27689:7;27742:3;27726:13;;27716:7;:23;;;;:::i;26923:408::-;26990:14;;26986:338;;27021:19;27044:10;:8;:10::i;:::-;27021:33;-1:-1:-1;27069:18:0;27090:24;27021:33;27090:10;:24;:::i;:::-;27170:4;27154:22;;;;:7;:22;;;;;;27069:45;;-1:-1:-1;27154:35:0;;27069:45;;27154:35;:::i;:::-;27145:4;27129:22;;;;:7;:22;;;;;;;;:60;;;;27207:11;:26;;;;;;27204:108;;;27293:4;27277:22;;;;:7;:22;;;;;;:35;;27302:10;;27277:35;:::i;:::-;27268:4;27252:22;;;;:7;:22;;;;;:60;27006:318;;26923:408;:::o;25719:1196::-;25782:23;25816:18;25923:1;25907:13;;25892:12;;25871:18;;25851:17;;:38;;;;:::i;:::-;:53;;;;:::i;:::-;:69;;;;:::i;:::-;:73;25847:306;;;26071:13;;26056:12;;26035:18;;26015:17;;:38;;;;:::i;:::-;:53;;;;:::i;:::-;:69;;;;:::i;:::-;25992:18;;25972:17;;:38;;;;:::i;:::-;25958:53;;:10;:53;:::i;:::-;:127;;;;:::i;:::-;25940:145;-1:-1:-1;26113:28:0;25940:145;26113:10;:28;:::i;:::-;26100:41;;25847:306;26168:19;;26165:351;;26203:19;26226:10;:8;:10::i;:::-;26203:33;-1:-1:-1;26251:18:0;26272:29;26203:33;26272:15;:29;:::i;:::-;26357:4;26341:22;;;;:7;:22;;;;;;26251:50;;-1:-1:-1;26341:35:0;;26251:50;;26341:35;:::i;:::-;26332:4;26316:22;;;;:7;:22;;;;;;;;:60;;;;26394:11;:26;;;;;;26391:113;;;26480:4;26464:22;;;;:7;:22;;;;;;:40;;26489:15;;26464:40;:::i;:::-;26455:4;26439:22;;;;:7;:22;;;;;:65;26391:113;26188:328;;26165:351;26531:14;;26528:380;;26561:19;26584:10;:8;:10::i;:::-;26561:33;-1:-1:-1;26609:13:0;26625:24;26561:33;26625:10;:24;:::i;:::-;26707:6;26691:24;;:7;:24;;;;26609:40;;-1:-1:-1;26691:32:0;;26609:40;;26691:32;:::i;:::-;26680:6;26664:24;;;:59;26741:11;26664:24;26741:28;;;;;26738:114;;;26831:6;26815:24;;:7;:24;;;;:37;;26842:10;;26815:37;:::i;:::-;26804:6;26788:24;;:7;:24;;;:64;26738:114;26886:10;26869:13;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;25771:1144:0;;25719:1196;:::o;23419:141::-;23507:4;23497:7;;:14;;;;:::i;:::-;23487:7;:24;23535:10;;:17;;23548:4;;23535:17;:::i;:::-;23522:10;:30;-1:-1:-1;;23419:141:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:118::-;1483:5;1476:13;1469:21;1462:5;1459:32;1449:60;;1505:1;1502;1495:12;1520:382;1585:6;1593;1646:2;1634:9;1625:7;1621:23;1617:32;1614:52;;;1662:1;1659;1652:12;1614:52;1701:9;1688:23;1720:31;1745:5;1720:31;:::i;:::-;1770:5;-1:-1:-1;1827:2:1;1812:18;;1799:32;1840:30;1799:32;1840:30;:::i;:::-;1889:7;1879:17;;;1520:382;;;;;:::o;2142:247::-;2201:6;2254:2;2242:9;2233:7;2229:23;2225:32;2222:52;;;2270:1;2267;2260:12;2222:52;2309:9;2296:23;2328:31;2353:5;2328:31;:::i;2394:456::-;2471:6;2479;2487;2540:2;2528:9;2519:7;2515:23;2511:32;2508:52;;;2556:1;2553;2546:12;2508:52;2595:9;2582:23;2614:31;2639:5;2614:31;:::i;:::-;2664:5;-1:-1:-1;2721:2:1;2706:18;;2693:32;2734:33;2693:32;2734:33;:::i;:::-;2394:456;;2786:7;;-1:-1:-1;;;2840:2:1;2825:18;;;;2812:32;;2394:456::o;2855:180::-;2914:6;2967:2;2955:9;2946:7;2942:23;2938:32;2935:52;;;2983:1;2980;2973:12;2935:52;-1:-1:-1;3006:23:1;;2855:180;-1:-1:-1;2855:180:1:o;3040:241::-;3096:6;3149:2;3137:9;3128:7;3124:23;3120:32;3117:52;;;3165:1;3162;3155:12;3117:52;3204:9;3191:23;3223:28;3245:5;3223:28;:::i;3475:309::-;3540:6;3548;3601:2;3589:9;3580:7;3576:23;3572:32;3569:52;;;3617:1;3614;3607:12;3569:52;3653:9;3640:23;3630:33;;3713:2;3702:9;3698:18;3685:32;3726:28;3748:5;3726:28;:::i;3997:248::-;4065:6;4073;4126:2;4114:9;4105:7;4101:23;4097:32;4094:52;;;4142:1;4139;4132:12;4094:52;-1:-1:-1;;4165:23:1;;;4235:2;4220:18;;;4207:32;;-1:-1:-1;3997:248:1:o;4250:388::-;4318:6;4326;4379:2;4367:9;4358:7;4354:23;4350:32;4347:52;;;4395:1;4392;4385:12;4347:52;4434:9;4421:23;4453:31;4478:5;4453:31;:::i;:::-;4503:5;-1:-1:-1;4560:2:1;4545:18;;4532:32;4573:33;4532:32;4573:33;:::i;4643:385::-;4729:6;4737;4745;4753;4806:3;4794:9;4785:7;4781:23;4777:33;4774:53;;;4823:1;4820;4813:12;4774:53;-1:-1:-1;;4846:23:1;;;4916:2;4901:18;;4888:32;;-1:-1:-1;4967:2:1;4952:18;;4939:32;;5018:2;5003:18;4990:32;;-1:-1:-1;4643:385:1;-1:-1:-1;4643:385:1:o;5033:380::-;5112:1;5108:12;;;;5155;;;5176:61;;5230:4;5222:6;5218:17;5208:27;;5176:61;5283:2;5275:6;5272:14;5252:18;5249:38;5246:161;;5329:10;5324:3;5320:20;5317:1;5310:31;5364:4;5361:1;5354:15;5392:4;5389:1;5382:15;5246:161;;5033:380;;;:::o;5418:356::-;5620:2;5602:21;;;5639:18;;;5632:30;5698:34;5693:2;5678:18;;5671:62;5765:2;5750:18;;5418:356::o;5779:400::-;5981:2;5963:21;;;6020:2;6000:18;;;5993:30;6059:34;6054:2;6039:18;;6032:62;-1:-1:-1;;;6125:2:1;6110:18;;6103:34;6169:3;6154:19;;5779:400::o;6184:127::-;6245:10;6240:3;6236:20;6233:1;6226:31;6276:4;6273:1;6266:15;6300:4;6297:1;6290:15;6316:128;6383:9;;;6404:11;;;6401:37;;;6418:18;;:::i;6449:422::-;6538:1;6581:5;6538:1;6595:270;6616:7;6606:8;6603:21;6595:270;;;6675:4;6671:1;6667:6;6663:17;6657:4;6654:27;6651:53;;;6684:18;;:::i;:::-;6734:7;6724:8;6720:22;6717:55;;;6754:16;;;;6717:55;6833:22;;;;6793:15;;;;6595:270;;;6599:3;6449:422;;;;;:::o;6876:806::-;6925:5;6955:8;6945:80;;-1:-1:-1;6996:1:1;7010:5;;6945:80;7044:4;7034:76;;-1:-1:-1;7081:1:1;7095:5;;7034:76;7126:4;7144:1;7139:59;;;;7212:1;7207:130;;;;7119:218;;7139:59;7169:1;7160:10;;7183:5;;;7207:130;7244:3;7234:8;7231:17;7228:43;;;7251:18;;:::i;:::-;-1:-1:-1;;7307:1:1;7293:16;;7322:5;;7119:218;;7421:2;7411:8;7408:16;7402:3;7396:4;7393:13;7389:36;7383:2;7373:8;7370:16;7365:2;7359:4;7356:12;7352:35;7349:77;7346:159;;;-1:-1:-1;7458:19:1;;;7490:5;;7346:159;7537:34;7562:8;7556:4;7537:34;:::i;:::-;7607:6;7603:1;7599:6;7595:19;7586:7;7583:32;7580:58;;;7618:18;;:::i;:::-;7656:20;;6876:806;-1:-1:-1;;;6876:806:1:o;7687:140::-;7745:5;7774:47;7815:4;7805:8;7801:19;7795:4;7774:47;:::i;7832:217::-;7872:1;7898;7888:132;;7942:10;7937:3;7933:20;7930:1;7923:31;7977:4;7974:1;7967:15;8005:4;8002:1;7995:15;7888:132;-1:-1:-1;8034:9:1;;7832:217::o;8468:168::-;8541:9;;;8572;;8589:15;;;8583:22;;8569:37;8559:71;;8610:18;;:::i;9822:127::-;9883:10;9878:3;9874:20;9871:1;9864:31;9914:4;9911:1;9904:15;9938:4;9935:1;9928:15;9954:127;10015:10;10010:3;10006:20;10003:1;9996:31;10046:4;10043:1;10036:15;10070:4;10067:1;10060:15;10086:135;10125:3;10146:17;;;10143:43;;10166:18;;:::i;:::-;-1:-1:-1;10213:1:1;10202:13;;10086:135::o;10226:125::-;10291:9;;;10312:10;;;10309:36;;;10325:18;;:::i;17328:184::-;17398:6;17451:2;17439:9;17430:7;17426:23;17422:32;17419:52;;;17467:1;17464;17457:12;17419:52;-1:-1:-1;17490:16:1;;17328:184;-1:-1:-1;17328:184:1:o;17796:245::-;17863:6;17916:2;17904:9;17895:7;17891:23;17887:32;17884:52;;;17932:1;17929;17922:12;17884:52;17964:9;17958:16;17983:28;18005:5;17983:28;:::i;20025:423::-;20227:2;20209:21;;;20266:2;20246:18;;;20239:30;20305:34;20300:2;20285:18;;20278:62;20376:29;20371:2;20356:18;;20349:57;20438:3;20423:19;;20025:423::o;21570:251::-;21640:6;21693:2;21681:9;21672:7;21668:23;21664:32;21661:52;;;21709:1;21706;21699:12;21661:52;21741:9;21735:16;21760:31;21785:5;21760:31;:::i;21826:980::-;22088:4;22136:3;22125:9;22121:19;22167:6;22156:9;22149:25;22193:2;22231:6;22226:2;22215:9;22211:18;22204:34;22274:3;22269:2;22258:9;22254:18;22247:31;22298:6;22333;22327:13;22364:6;22356;22349:22;22402:3;22391:9;22387:19;22380:26;;22441:2;22433:6;22429:15;22415:29;;22462:1;22472:195;22486:6;22483:1;22480:13;22472:195;;;22551:13;;-1:-1:-1;;;;;22547:39:1;22535:52;;22642:15;;;;22607:12;;;;22583:1;22501:9;22472:195;;;-1:-1:-1;;;;;;;22723:32:1;;;;22718:2;22703:18;;22696:60;-1:-1:-1;;;22787:3:1;22772:19;22765:35;22684:3;21826:980;-1:-1:-1;;;21826:980:1:o;23423:306::-;23511:6;23519;23527;23580:2;23568:9;23559:7;23555:23;23551:32;23548:52;;;23596:1;23593;23586:12;23548:52;23625:9;23619:16;23609:26;;23675:2;23664:9;23660:18;23654:25;23644:35;;23719:2;23708:9;23704:18;23698:25;23688:35;;23423:306;;;;;:::o
Swarm Source
ipfs://27b7a1599bf83f1e798329a18e29a9e9878446c2027ff8521967ace2d71b1b9e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.