Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 UnFortune
Holders
31
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.000000329 UnFortuneValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
UnFortune
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-14 */ /** * https://t.me/Unfortune_mono Missed Fortune? Dont miss this. */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; 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; } } 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 SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { // 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 { 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 }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); 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"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; 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; } } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.6.2; 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); } // pragma solidity >=0.6.2; 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 UnFortune is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address payable private marketingWallet = payable(0xf08B88bB7F788378ecef7c6A5e6f4869F6CBfeE7); // Marketing Wallet address payable private prizeRewardWallet = payable (0xB4EF7b6DcE52E16665Aecf0b6acEF9BEe4c7cE9f); // prizeReward Wallet mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isSniper; uint256 private deadBlocks = 4; uint256 private launchedAt = 0; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isMaxWalletExempt; mapping (address => bool) private _isExcluded; address[] private _excluded; address DEAD = 0x000000000000000000000000000000000000dEaD; uint8 private _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "UnFortune"; string private _symbol = "UnFortune"; uint256 public _maxWalletToken = _tTotal.div(1000).mul(2); //0.2% for first few mins uint256 private reflectionFee=0; uint256 public liquidityFee = 3; uint256 public marketingFee = 5; uint256 public prizeRewardFee = 2; uint256 public totalFee = liquidityFee.add(marketingFee).add(prizeRewardFee); uint256 private currenttotalFee = totalFee; uint256 public swapThreshold = _tTotal.div(1000).mul(1); //0.1% IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwap; bool tradingOpen = false; bool zeroBuyTaxmode = false; event SwapETHForTokens( uint256 amountIn, address[] path ); event SwapTokensForETH( uint256 amountIn, address[] path ); modifier lockTheSwap { inSwap = true; _; inSwap = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isMaxWalletExempt[owner()] = true; _isMaxWalletExempt[address(this)] = true; _isMaxWalletExempt[uniswapV2Pair] = true; _isMaxWalletExempt[DEAD] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() { tradingOpen = _status; excludeFromReward(address(this)); excludeFromReward(uniswapV2Pair); if(tradingOpen && launchedAt == 0){ launchedAt = block.number; deadBlocks = _deadBlocks; } } function setZeroBuyTaxmode(bool _status) external onlyOwner() { zeroBuyTaxmode=_status; } function setNewRouter(address newRouter) external onlyOwner() { IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter); address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH()); if (get_pair == address(0)) { uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH()); } else { uniswapV2Pair = get_pair; } uniswapV2Router = _newRouter; } 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 _tTotal; } 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()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() 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].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(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.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { 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 excluded"); 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; } } } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isSniper[to], "You have no power here!"); require(!_isSniper[from], "You have no power here!"); if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading bool takeFee = false; //take fee only on swaps if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) { takeFee = true; } if(launchedAt>0 && (!_isMaxWalletExempt[to] && from!= owner()) && !((launchedAt + deadBlocks) > block.number)){ require(amount+ balanceOf(to)<=_maxWalletToken, "Total Holding is currently limited"); } currenttotalFee=totalFee; //antibot if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){ _isSniper[to]=true; } if(zeroBuyTaxmode){ if(tradingOpen && from == uniswapV2Pair) { //buys currenttotalFee=0; } if(tradingOpen && to == uniswapV2Pair) { //sells currenttotalFee=2*totalFee; } } //sell if (!inSwap && tradingOpen && to == uniswapV2Pair) { uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance>=swapThreshold){ contractTokenBalance = swapThreshold; swapTokens(contractTokenBalance); } } _tokenTransfer(from,to,amount,takeFee); } function swapTokens(uint256 contractTokenBalance) private lockTheSwap { uint256 amountToLiquify = contractTokenBalance .mul(liquidityFee) .div(totalFee) .div(2); uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify); swapTokensForEth(amountToSwap); uint256 amountETH = address(this).balance; uint256 totalETHFee = totalFee.sub(liquidityFee.div(2)); uint256 amountETHLiquidity = amountETH .mul(liquidityFee) .div(totalETHFee) .div(2); uint256 amountETHprizeReward = amountETH.mul(prizeRewardFee).div(totalETHFee); uint256 amountETHMarketing = amountETH.mul(marketingFee).div( totalETHFee ); //Send to marketing wallet and prizeReward wallet uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { sendETHToFee(amountETHMarketing,marketingWallet); sendETHToFee(amountETHprizeReward,prizeRewardWallet); } if (amountToLiquify > 0) { addLiquidity(amountToLiquify,amountETHLiquidity); } } function sendETHToFee(uint256 amount,address payable wallet) private { wallet.transfer(amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { uint256 _previousReflectionFee=reflectionFee; uint256 _previousTotalFee=currenttotalFee; if(!takeFee){ reflectionFee = 0; currenttotalFee=0; } 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]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee){ reflectionFee = _previousReflectionFee; currenttotalFee=_previousTotalFee; } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _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) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _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) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _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) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(reflectionFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(currenttotalFee).div( 10**2 ); } function excludeMultiple(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function excludeFromFee(address[] calldata addresses) public onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isExcludedFromFee[addresses[i]] = true; } } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setWallets(address _marketingWallet,address _prizeRewardWallet) external onlyOwner() { marketingWallet = payable(_marketingWallet); prizeRewardWallet = payable(_prizeRewardWallet); } function setFees( uint256 _reflectionFee, uint256 _liquidityFee, uint256 _prizeRewardFee, uint256 _marketingFee ) external onlyOwner { reflectionFee=_reflectionFee; liquidityFee = _liquidityFee; prizeRewardFee = _prizeRewardFee; marketingFee = _marketingFee; totalFee = liquidityFee.add(marketingFee).add(prizeRewardFee); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } function isSniper(address account) public view returns (bool) { return _isSniper[account]; } function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isSniper[addresses[i]] = status; } } function withDrawLeftoverETH(address payable receipient) public onlyOwner { receipient.transfer(address(this).balance); } function withdrawStuckTokens(IERC20 token, address to) public onlyOwner { uint256 balance = token.balanceOf(address(this)); token.transfer(to, balance); } function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() { _maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000); } function setMaxWalletExempt(address _addr) external onlyOwner { _isMaxWalletExempt[_addr] = true; } function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor) external onlyOwner { swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor; } function multiTransfer(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner { require(addresses.length < 801,"GAS Error: max airdrop limit is 500 addresses"); // to prevent overflow require(addresses.length == tokens.length,"Mismatch between Address and token count"); uint256 SCCC = 0; for(uint i=0; i < addresses.length; i++){ SCCC = SCCC + (tokens[i] * 10**_decimals); } require(balanceOf(from) >= SCCC, "Not enough tokens in wallet"); for(uint i=0; i < addresses.length; i++){ _transfer(from,addresses[i],(tokens[i] * 10**_decimals)); } } function multiTransfer_fixed(address from, address[] calldata addresses, uint256 tokens) external onlyOwner { require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow uint256 SCCC = tokens* 10**_decimals * addresses.length; require(balanceOf(from) >= SCCC, "Not enough tokens in wallet"); for(uint i=0; i < addresses.length; i++){ _transfer(from,addresses[i],(tokens* 10**_decimals)); } } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
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":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":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","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":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"multiTransfer_fixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prizeRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_prizeRewardFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_prizeRewardWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600380546001600160a01b031990811673f08b88bb7f788378ecef7c6a5e6f4869f6cbfee7179091556004805490911673b4ef7b6dce52e16665aecf0b6acef9bee4c7ce9f1781556009556000600a908155600f80547409000000000000000000000000000000000000dead6001600160a81b031990911617908190556200009891600160a01b90910460ff169062000872565b620000a890633b9aca0062000931565b6010819055620000bb90600019620009aa565b620000c99060001962000953565b60115560408051808201909152600980825268556e466f7274756e6560b81b6020909201918252620000fe91601391620006d2565b5060408051808201909152600980825268556e466f7274756e6560b81b60209092019182526200013191601491620006d2565b506200016a6002620001566103e86010546200055560201b62001e471790919060201c565b620005a860201b62001e891790919060201c565b6015556000601655600360175560056018556002601955620001ba601954620001a66018546017546200063360201b62001f081790919060201c565b6200063360201b62001f081790919060201c565b601a55601a54601b55620001e76001620001566103e86010546200055560201b62001e471790919060201c565b601c55601e805461ffff60a81b191690553480156200020557600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506011543360009081526005602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620002a957600080fd5b505afa158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e4919062000778565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000368919062000778565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003b157600080fd5b505af1158015620003c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ec919062000778565b601e80546001600160a01b03199081166001600160a01b0393841617909155601d80549091169183169190911790556001600b6000620004346000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b909252812080549092166001908117909255600c906200048d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600c909352818320805485166001908117909155601e54821684528284208054861682179055600f54909116835291208054909216179055620004fe3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6010546040516200054691815260200190565b60405180910390a350620009ed565b60006200059f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200069660201b60201c565b90505b92915050565b600082620005b957506000620005a2565b6000620005c7838562000931565b905082620005d6858362000812565b146200059f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620006428385620007f7565b9050838110156200059f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200062a565b60008183620006ba5760405162461bcd60e51b81526004016200062a9190620007a1565b506000620006c9848662000812565b95945050505050565b828054620006e0906200096d565b90600052602060002090601f0160209004810192826200070457600085556200074f565b82601f106200071f57805160ff19168380011785556200074f565b828001600101855582156200074f579182015b828111156200074f57825182559160200191906001019062000732565b506200075d92915062000761565b5090565b5b808211156200075d576000815560010162000762565b6000602082840312156200078a578081fd5b81516001600160a01b03811681146200059f578182fd5b6000602080835283518082850152825b81811015620007cf57858101830151858201604001528201620007b1565b81811115620007e15783604083870101525b50601f01601f1916929092016040019392505050565b600082198211156200080d576200080d620009c1565b500190565b600082620008245762000824620009d7565b500490565b600181815b808511156200086a5781600019048211156200084e576200084e620009c1565b808516156200085c57918102915b93841c93908002906200082e565b509250929050565b60006200059f60ff8416836000826200088e57506001620005a2565b816200089d57506000620005a2565b8160018114620008b65760028114620008c157620008e1565b6001915050620005a2565b60ff841115620008d557620008d5620009c1565b50506001821b620005a2565b5060208310610133831016604e8410600b841016171562000906575081810a620005a2565b62000912838362000829565b8060001904821115620009295762000929620009c1565b029392505050565b60008160001904831182151516156200094e576200094e620009c1565b500290565b600082821015620009685762000968620009c1565b500390565b600181811c908216806200098257607f821691505b60208210811415620009a457634e487b7160e01b600052602260045260246000fd5b50919050565b600082620009bc57620009bc620009d7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6138fa80620009fd6000396000f3fe6080604052600436106102815760003560e01c806352390c021161014f5780638f4590d2116100c1578063dd62ed3e1161007a578063dd62ed3e146107aa578063de7ecf99146107f0578063ea2f0b3714610806578063eafb5a3c14610826578063f259c57b14610846578063f2fde38b1461086657600080fd5b80638f4590d2146106ff57806395d89b411461071f57806398118cb414610734578063a457c2d71461074a578063a9059cbb1461076a578063d3f6a1571461078a57600080fd5b8063715018a611610113578063715018a61461063d57806371b9189c14610652578063743942b61461067257806378109e541461069257806388f82020146106a85780638da5cb5b146106e157600080fd5b806352390c02146105a75780635d54c0af146105c75780636b67c4df146105e75780636fcba377146105fd57806370a082311461061d57600080fd5b806325b86edf116101f35780633685d419116101ac5780633685d419146104e757806339509351146105075780633bd5d173146105275780634549b0391461054757806349bd5a5e146105675780634b01547f1461058757600080fd5b806325b86edf1461041b5780632d4103d61461043b5780632d8381191461045b5780632dd5efe71461047b578063313ce5671461049b578063335f6a43146104c757600080fd5b806313114a9d1161024557806313114a9d146103635780631694505e1461037857806318160ddd146103b05780631ca0a28d146103c55780631df4ccfc146103e557806323b872dd146103fb57600080fd5b80630445b6671461028d57806306fdde03146102b657806309302dc6146102d8578063095ea7b3146102fa5780630f3a325f1461032a57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a3601c5481565b6040519081526020015b60405180910390f35b3480156102c257600080fd5b506102cb610886565b6040516102ad91906135a4565b3480156102e457600080fd5b506102f86102f336600461348e565b610918565b005b34801561030657600080fd5b5061031a610315366004613367565b610972565b60405190151581526020016102ad565b34801561033657600080fd5b5061031a6103453660046131dd565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561036f57600080fd5b506012546102a3565b34801561038457600080fd5b50601d54610398906001600160a01b031681565b6040516001600160a01b0390911681526020016102ad565b3480156103bc57600080fd5b506010546102a3565b3480156103d157600080fd5b506102f86103e036600461328d565b610989565b3480156103f157600080fd5b506102a3601a5481565b34801561040757600080fd5b5061031a61041636600461324d565b610bf3565b34801561042757600080fd5b506102f861043636600461347c565b610c5c565b34801561044757600080fd5b506102f861045636600461345f565b610d8c565b34801561046757600080fd5b506102a361047636600461348e565b610e17565b34801561048757600080fd5b506102f86104963660046131dd565b610e9b565b3480156104a757600080fd5b50600f54600160a01b900460ff1660405160ff90911681526020016102ad565b3480156104d357600080fd5b506102f86104e236600461330d565b610ee9565b3480156104f357600080fd5b506102f86105023660046131dd565b611086565b34801561051357600080fd5b5061031a610522366004613367565b611271565b34801561053357600080fd5b506102f861054236600461348e565b6112a7565b34801561055357600080fd5b506102a36105623660046134be565b611391565b34801561057357600080fd5b50601e54610398906001600160a01b031681565b34801561059357600080fd5b506102f86105a2366004613427565b61141e565b3480156105b357600080fd5b506102f86105c23660046131dd565b611466565b3480156105d357600080fd5b506102f86105e23660046133d2565b611550565b3480156105f357600080fd5b506102a360185481565b34801561060957600080fd5b506102f8610618366004613530565b6115f7565b34801561062957600080fd5b506102a36106383660046131dd565b611652565b34801561064957600080fd5b506102f86116b1565b34801561065e57600080fd5b506102f861066d366004613392565b611725565b34801561067e57600080fd5b506102f861068d3660046131dd565b6117d2565b34801561069e57600080fd5b506102a360155481565b3480156106b457600080fd5b5061031a6106c33660046131dd565b6001600160a01b03166000908152600d602052604090205460ff1690565b3480156106ed57600080fd5b506000546001600160a01b0316610398565b34801561070b57600080fd5b506102f861071a3660046134e2565b611831565b34801561072b57600080fd5b506102cb61187b565b34801561074057600080fd5b506102a360175481565b34801561075657600080fd5b5061031a610765366004613367565b61188a565b34801561077657600080fd5b5061031a610785366004613367565b6118d9565b34801561079657600080fd5b506102f86107a5366004613215565b6118e6565b3480156107b657600080fd5b506102a36107c5366004613215565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156107fc57600080fd5b506102a360195481565b34801561081257600080fd5b506102f86108213660046131dd565b61193e565b34801561083257600080fd5b506102f86108413660046131dd565b611989565b34801561085257600080fd5b506102f86108613660046131dd565b611d0f565b34801561087257600080fd5b506102f86108813660046131dd565b611d5d565b606060138054610895906137e5565b80601f01602080910402602001604051908101604052809291908181526020018280546108c1906137e5565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b5050505050905090565b6000546001600160a01b0316331461094b5760405162461bcd60e51b8152600401610942906135f7565b60405180910390fd5b61096c816109666103e8601054611e4790919063ffffffff16565b90611e89565b60155550565b600061097f338484611f67565b5060015b92915050565b6000546001600160a01b031633146109b35760405162461bcd60e51b8152600401610942906135f7565b6103218310610a1a5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610942565b828114610a7a5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610942565b6000805b84811015610aed57600f54610a9e90600160a01b900460ff16600a613704565b848483818110610abe57634e487b7160e01b600052603260045260246000fd5b90506020020135610acf91906137af565b610ad99083613689565b915080610ae581613820565b915050610a7e565b5080610af887611652565b1015610b465760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610942565b60005b84811015610bea57610bd887878784818110610b7557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610b8a91906131dd565b600f54610ba290600160a01b900460ff16600a613704565b878786818110610bc257634e487b7160e01b600052603260045260246000fd5b90506020020135610bd391906137af565b61208b565b80610be281613820565b915050610b49565b50505050505050565b6000610c0084848461208b565b610c528433610c4d85604051806060016040528060288152602001613878602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612593565b611f67565b5060019392505050565b6000546001600160a01b03163314610c865760405162461bcd60e51b8152600401610942906135f7565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610cc857600080fd5b505afa158015610cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0091906134a6565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d4e57600080fd5b505af1158015610d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d869190613443565b50505050565b6000546001600160a01b03163314610db65760405162461bcd60e51b8152600401610942906135f7565b601e805460ff60a81b1916600160a81b84151502179055610dd630611466565b601e54610deb906001600160a01b0316611466565b601e54600160a81b900460ff168015610e045750600a54155b15610e135743600a5560098190555b5050565b6000601154821115610e7e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610942565b6000610e886125cd565b9050610e948382611e47565b9392505050565b6000546001600160a01b03163314610ec55760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610f135760405162461bcd60e51b8152600401610942906135f7565b6107d18210610f7b5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610942565b600f546000908390610f9890600160a01b900460ff16600a613704565b610fa290846137af565b610fac91906137af565b905080610fb886611652565b10156110065760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610942565b60005b8381101561107e5761106c8686868481811061103557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061104a91906131dd565b600f5461106290600160a01b900460ff16600a613704565b610bd390876137af565b8061107681613820565b915050611009565b505050505050565b6000546001600160a01b031633146110b05760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b0381166000908152600d602052604090205460ff166111185760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610942565b60005b600e54811015610e1357816001600160a01b0316600e828154811061115057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561125f57600e805461117b906001906137ce565b8154811061119957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600e80546001600160a01b0390921691839081106111d357634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600d90925220805460ff19169055600e80548061123957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061126981613820565b91505061111b565b3360008181526007602090815260408083206001600160a01b0387168452909152812054909161097f918590610c4d9086611f08565b336000818152600d602052604090205460ff161561131c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610942565b6000611327836125f0565b505050506001600160a01b0384166000908152600560205260409020549192506113539190508261263f565b6001600160a01b038316600090815260056020526040902055601154611379908261263f565b6011556012546113899084611f08565b601255505050565b60006010548311156113e55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610942565b816114045760006113f5846125f0565b50939550610983945050505050565b600061140f846125f0565b50929550610983945050505050565b6000546001600160a01b031633146114485760405162461bcd60e51b8152600401610942906135f7565b601e8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146114905760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b038116600090815260056020526040902054156114ea576001600160a01b0381166000908152600560205260409020546114d090610e17565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600e805491820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461157a5760405162461bcd60e51b8152600401610942906135f7565b60005b82811015610d865781600860008686858181106115aa57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115bf91906131dd565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115f081613820565b905061157d565b6000546001600160a01b031633146116215760405162461bcd60e51b8152600401610942906135f7565b6016849055601783905560198290556018819055611649826116438584611f08565b90611f08565b601a5550505050565b6001600160a01b0381166000908152600d602052604081205460ff161561168f57506001600160a01b031660009081526006602052604090205490565b6001600160a01b03821660009081526005602052604090205461098390610e17565b6000546001600160a01b031633146116db5760405162461bcd60e51b8152600401610942906135f7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610942906135f7565b60005b818110156117cd576001600b600085858581811061178057634e487b7160e01b600052603260045260246000fd5b905060200201602081019061179591906131dd565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117c681613820565b9050611752565b505050565b6000546001600160a01b031633146117fc5760405162461bcd60e51b8152600401610942906135f7565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610e13573d6000803e3d6000fd5b6000546001600160a01b0316331461185b5760405162461bcd60e51b8152600401610942906135f7565b808260105461186a91906137af565b61187491906136a1565b601c555050565b606060148054610895906137e5565b600061097f3384610c4d856040518060600160405280602581526020016138a0602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612593565b600061097f33848461208b565b6000546001600160a01b031633146119105760405162461bcd60e51b8152600401610942906135f7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6000546001600160a01b031633146119685760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146119b35760405162461bcd60e51b8152600401610942906135f7565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119f357600080fd5b505afa158015611a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2b91906131f9565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7357600080fd5b505afa158015611a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aab91906131f9565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611af157600080fd5b505afa158015611b05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2991906131f9565b90506001600160a01b038116611ccf57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7257600080fd5b505afa158015611b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baa91906131f9565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf257600080fd5b505afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a91906131f9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611c7257600080fd5b505af1158015611c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611caa91906131f9565b601e80546001600160a01b0319166001600160a01b0392909216919091179055611ceb565b601e80546001600160a01b0319166001600160a01b0383161790555b50601d80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611d395760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611d875760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b038116611dec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610942565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e9483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612681565b600082611e9857506000610983565b6000611ea483856137af565b905082611eb185836136a1565b14610e945760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610942565b600080611f158385613689565b905083811015610e945760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610942565b6001600160a01b038316611fc95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610942565b6001600160a01b03821661202a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610942565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120ef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610942565b6001600160a01b0382166121515760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610942565b600081116121b35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610942565b6001600160a01b03821660009081526008602052604090205460ff16156122165760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610942565b6001600160a01b03831660009081526008602052604090205460ff16156122795760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610942565b6000546001600160a01b038481169116148015906122a557506000546001600160a01b03838116911614155b1561230357601e54600160a81b900460ff166123035760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610942565b601e546000906001600160a01b038581169116148061232f5750601e546001600160a01b038481169116145b801561237757506001600160a01b0384166000908152600b602052604090205460ff168061237557506001600160a01b0383166000908152600b602052604090205460ff165b155b15612380575060015b6000600a541180156123c457506001600160a01b0383166000908152600c602052604090205460ff161580156123c457506000546001600160a01b03858116911614155b80156123df575043600954600a546123dc9190613689565b11155b15612453576015546123f084611652565b6123fa9084613689565b11156124535760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610942565b601a54601b55600a5415801590612478575043600954600a546124769190613689565b115b156124a1576001600160a01b0383166000908152600860205260409020805460ff191660011790555b601e54600160b01b900460ff161561252157601e54600160a81b900460ff1680156124d95750601e546001600160a01b038581169116145b156124e4576000601b555b601e54600160a81b900460ff16801561250a5750601e546001600160a01b038481169116145b1561252157601a5461251d9060026137af565b601b555b601e54600160a01b900460ff161580156125445750601e54600160a81b900460ff165b801561255d5750601e546001600160a01b038481169116145b1561258757600061256d30611652565b9050601c5481106125855750601c54612585816126af565b505b610d86848484846127d9565b600081848411156125b75760405162461bcd60e51b815260040161094291906135a4565b5060006125c484866137ce565b95945050505050565b60008060006125da612905565b90925090506125e98282611e47565b9250505090565b60008060008060008060008060006126078a612abf565b92509250925060008060006126258d86866126206125cd565b612b01565b919f909e50909c50959a5093985091965092945050505050565b6000610e9483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612593565b600081836126a25760405162461bcd60e51b815260040161094291906135a4565b5060006125c484866136a1565b601e805460ff60a01b1916600160a01b179055601a546017546000916126e5916002916126df9182908790611e89565b90611e47565b905060006126f3838361263f565b90506126fe81612b51565b601754479060009061271e90612715906002611e47565b601a549061263f565b9050600061274060026126df846126df60175488611e8990919063ffffffff16565b9050600061275d836126df60195487611e8990919063ffffffff16565b9050600061277a846126df60185488611e8990919063ffffffff16565b90504780156127b15760035461279a9083906001600160a01b0316612d0f565b6004546127b19084906001600160a01b0316612d0f565b87156127c1576127c18885612d45565b5050601e805460ff60a01b1916905550505050505050565b601654601b54826127ef5760006016819055601b555b6001600160a01b0386166000908152600d602052604090205460ff16801561283057506001600160a01b0385166000908152600d602052604090205460ff16155b1561284557612840868686612e29565b6128f1565b6001600160a01b0386166000908152600d602052604090205460ff1615801561288657506001600160a01b0385166000908152600d602052604090205460ff165b1561289657612840868686612f4f565b6001600160a01b0386166000908152600d602052604090205460ff1680156128d657506001600160a01b0385166000908152600d602052604090205460ff165b156128e657612840868686612ff8565b6128f186868661306b565b8261107e57601691909155601b5550505050565b6011546010546000918291825b600e54811015612a8f578260056000600e848154811061294257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806129bb57508160066000600e848154811061299457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156129d157601154601054945094505050509091565b612a2560056000600e84815481106129f957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061263f565b9250612a7b60066000600e8481548110612a4f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061263f565b915080612a8781613820565b915050612912565b50601054601154612a9f91611e47565b821015612ab6576011546010549350935050509091565b90939092509050565b600080600080612ace856130af565b90506000612adb866130cb565b90506000612af382612aed898661263f565b9061263f565b979296509094509092505050565b6000808080612b108886611e89565b90506000612b1e8887611e89565b90506000612b2c8888611e89565b90506000612b3e82612aed868661263f565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b9457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612be857600080fd5b505afa158015612bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2091906131f9565b81600181518110612c4157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d54612c679130911684611f67565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ca090859060009086903090429060040161364d565b600060405180830381600087803b158015612cba57600080fd5b505af1158015612cce573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d0392919061362c565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156117cd573d6000803e3d6000fd5b601d54612d5d9030906001600160a01b031684611f67565b601d546001600160a01b031663f305d719823085600080612d866000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612de957600080fd5b505af1158015612dfd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e229190613503565b5050505050565b600080600080600080612e3b876125f0565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612e6d908861263f565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612e9c908761263f565b6001600160a01b03808b1660009081526005602052604080822093909355908a1681522054612ecb9086611f08565b6001600160a01b038916600090815260056020526040902055612eed816130e7565b612ef7848361316f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f3c91815260200190565b60405180910390a3505050505050505050565b600080600080600080612f61876125f0565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612f93908761263f565b6001600160a01b03808b16600090815260056020908152604080832094909455918b16815260069091522054612fc99084611f08565b6001600160a01b038916600090815260066020908152604080832093909355600590522054612ecb9086611f08565b60008060008060008061300a876125f0565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061303c908861263f565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612f93908761263f565b60008060008060008061307d876125f0565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612e9c908761263f565b600061098360646126df60165485611e8990919063ffffffff16565b600061098360646126df601b5485611e8990919063ffffffff16565b60006130f16125cd565b905060006130ff8383611e89565b3060009081526005602052604090205490915061311c9082611f08565b30600090815260056020908152604080832093909355600d9052205460ff16156117cd573060009081526006602052604090205461315a9084611f08565b30600090815260066020526040902055505050565b60115461317c908361263f565b60115560125461318c9082611f08565b6012555050565b60008083601f8401126131a4578182fd5b50813567ffffffffffffffff8111156131bb578182fd5b6020830191508360208260051b85010111156131d657600080fd5b9250929050565b6000602082840312156131ee578081fd5b8135610e9481613851565b60006020828403121561320a578081fd5b8151610e9481613851565b60008060408385031215613227578081fd5b823561323281613851565b9150602083013561324281613851565b809150509250929050565b600080600060608486031215613261578081fd5b833561326c81613851565b9250602084013561327c81613851565b929592945050506040919091013590565b6000806000806000606086880312156132a4578081fd5b85356132af81613851565b9450602086013567ffffffffffffffff808211156132cb578283fd5b6132d789838a01613193565b909650945060408801359150808211156132ef578283fd5b506132fc88828901613193565b969995985093965092949392505050565b60008060008060608587031215613322578384fd5b843561332d81613851565b9350602085013567ffffffffffffffff811115613348578384fd5b61335487828801613193565b9598909750949560400135949350505050565b60008060408385031215613379578182fd5b823561338481613851565b946020939093013593505050565b600080602083850312156133a4578182fd5b823567ffffffffffffffff8111156133ba578283fd5b6133c685828601613193565b90969095509350505050565b6000806000604084860312156133e6578283fd5b833567ffffffffffffffff8111156133fc578384fd5b61340886828701613193565b909450925050602084013561341c81613869565b809150509250925092565b600060208284031215613438578081fd5b8135610e9481613869565b600060208284031215613454578081fd5b8151610e9481613869565b60008060408385031215613471578182fd5b823561338481613869565b60008060408385031215613227578182fd5b60006020828403121561349f578081fd5b5035919050565b6000602082840312156134b7578081fd5b5051919050565b600080604083850312156134d0578182fd5b82359150602083013561324281613869565b600080604083850312156134f4578182fd5b50508035926020909101359150565b600080600060608486031215613517578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613545578182fd5b5050823594602084013594506040840135936060013592509050565b6000815180845260208085019450808401835b838110156135995781516001600160a01b031687529582019590820190600101613574565b509495945050505050565b6000602080835283518082850152825b818110156135d0578581018301518582016040015282016135b4565b818111156135e15783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006136456040830184613561565b949350505050565b85815284602082015260a06040820152600061366c60a0830186613561565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561369c5761369c61383b565b500190565b6000826136bc57634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156136fc5781600019048211156136e2576136e261383b565b808516156136ef57918102915b93841c93908002906136c6565b509250929050565b6000610e9460ff84168360008261371d57506001610983565b8161372a57506000610983565b8160018114613740576002811461374a57613766565b6001915050610983565b60ff84111561375b5761375b61383b565b50506001821b610983565b5060208310610133831016604e8410600b8410161715613789575081810a610983565b61379383836136c1565b80600019048211156137a7576137a761383b565b029392505050565b60008160001904831182151516156137c9576137c961383b565b500290565b6000828210156137e0576137e061383b565b500390565b600181811c908216806137f957607f821691505b6020821081141561381a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156138345761383461383b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461386657600080fd5b50565b801515811461386657600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208eea7d4742c72379d9ec889bba6e4628756a7cc4f97f1a547047bc7b87f12fe564736f6c63430008040033
Deployed Bytecode
0x6080604052600436106102815760003560e01c806352390c021161014f5780638f4590d2116100c1578063dd62ed3e1161007a578063dd62ed3e146107aa578063de7ecf99146107f0578063ea2f0b3714610806578063eafb5a3c14610826578063f259c57b14610846578063f2fde38b1461086657600080fd5b80638f4590d2146106ff57806395d89b411461071f57806398118cb414610734578063a457c2d71461074a578063a9059cbb1461076a578063d3f6a1571461078a57600080fd5b8063715018a611610113578063715018a61461063d57806371b9189c14610652578063743942b61461067257806378109e541461069257806388f82020146106a85780638da5cb5b146106e157600080fd5b806352390c02146105a75780635d54c0af146105c75780636b67c4df146105e75780636fcba377146105fd57806370a082311461061d57600080fd5b806325b86edf116101f35780633685d419116101ac5780633685d419146104e757806339509351146105075780633bd5d173146105275780634549b0391461054757806349bd5a5e146105675780634b01547f1461058757600080fd5b806325b86edf1461041b5780632d4103d61461043b5780632d8381191461045b5780632dd5efe71461047b578063313ce5671461049b578063335f6a43146104c757600080fd5b806313114a9d1161024557806313114a9d146103635780631694505e1461037857806318160ddd146103b05780631ca0a28d146103c55780631df4ccfc146103e557806323b872dd146103fb57600080fd5b80630445b6671461028d57806306fdde03146102b657806309302dc6146102d8578063095ea7b3146102fa5780630f3a325f1461032a57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a3601c5481565b6040519081526020015b60405180910390f35b3480156102c257600080fd5b506102cb610886565b6040516102ad91906135a4565b3480156102e457600080fd5b506102f86102f336600461348e565b610918565b005b34801561030657600080fd5b5061031a610315366004613367565b610972565b60405190151581526020016102ad565b34801561033657600080fd5b5061031a6103453660046131dd565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561036f57600080fd5b506012546102a3565b34801561038457600080fd5b50601d54610398906001600160a01b031681565b6040516001600160a01b0390911681526020016102ad565b3480156103bc57600080fd5b506010546102a3565b3480156103d157600080fd5b506102f86103e036600461328d565b610989565b3480156103f157600080fd5b506102a3601a5481565b34801561040757600080fd5b5061031a61041636600461324d565b610bf3565b34801561042757600080fd5b506102f861043636600461347c565b610c5c565b34801561044757600080fd5b506102f861045636600461345f565b610d8c565b34801561046757600080fd5b506102a361047636600461348e565b610e17565b34801561048757600080fd5b506102f86104963660046131dd565b610e9b565b3480156104a757600080fd5b50600f54600160a01b900460ff1660405160ff90911681526020016102ad565b3480156104d357600080fd5b506102f86104e236600461330d565b610ee9565b3480156104f357600080fd5b506102f86105023660046131dd565b611086565b34801561051357600080fd5b5061031a610522366004613367565b611271565b34801561053357600080fd5b506102f861054236600461348e565b6112a7565b34801561055357600080fd5b506102a36105623660046134be565b611391565b34801561057357600080fd5b50601e54610398906001600160a01b031681565b34801561059357600080fd5b506102f86105a2366004613427565b61141e565b3480156105b357600080fd5b506102f86105c23660046131dd565b611466565b3480156105d357600080fd5b506102f86105e23660046133d2565b611550565b3480156105f357600080fd5b506102a360185481565b34801561060957600080fd5b506102f8610618366004613530565b6115f7565b34801561062957600080fd5b506102a36106383660046131dd565b611652565b34801561064957600080fd5b506102f86116b1565b34801561065e57600080fd5b506102f861066d366004613392565b611725565b34801561067e57600080fd5b506102f861068d3660046131dd565b6117d2565b34801561069e57600080fd5b506102a360155481565b3480156106b457600080fd5b5061031a6106c33660046131dd565b6001600160a01b03166000908152600d602052604090205460ff1690565b3480156106ed57600080fd5b506000546001600160a01b0316610398565b34801561070b57600080fd5b506102f861071a3660046134e2565b611831565b34801561072b57600080fd5b506102cb61187b565b34801561074057600080fd5b506102a360175481565b34801561075657600080fd5b5061031a610765366004613367565b61188a565b34801561077657600080fd5b5061031a610785366004613367565b6118d9565b34801561079657600080fd5b506102f86107a5366004613215565b6118e6565b3480156107b657600080fd5b506102a36107c5366004613215565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156107fc57600080fd5b506102a360195481565b34801561081257600080fd5b506102f86108213660046131dd565b61193e565b34801561083257600080fd5b506102f86108413660046131dd565b611989565b34801561085257600080fd5b506102f86108613660046131dd565b611d0f565b34801561087257600080fd5b506102f86108813660046131dd565b611d5d565b606060138054610895906137e5565b80601f01602080910402602001604051908101604052809291908181526020018280546108c1906137e5565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b5050505050905090565b6000546001600160a01b0316331461094b5760405162461bcd60e51b8152600401610942906135f7565b60405180910390fd5b61096c816109666103e8601054611e4790919063ffffffff16565b90611e89565b60155550565b600061097f338484611f67565b5060015b92915050565b6000546001600160a01b031633146109b35760405162461bcd60e51b8152600401610942906135f7565b6103218310610a1a5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610942565b828114610a7a5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610942565b6000805b84811015610aed57600f54610a9e90600160a01b900460ff16600a613704565b848483818110610abe57634e487b7160e01b600052603260045260246000fd5b90506020020135610acf91906137af565b610ad99083613689565b915080610ae581613820565b915050610a7e565b5080610af887611652565b1015610b465760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610942565b60005b84811015610bea57610bd887878784818110610b7557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610b8a91906131dd565b600f54610ba290600160a01b900460ff16600a613704565b878786818110610bc257634e487b7160e01b600052603260045260246000fd5b90506020020135610bd391906137af565b61208b565b80610be281613820565b915050610b49565b50505050505050565b6000610c0084848461208b565b610c528433610c4d85604051806060016040528060288152602001613878602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612593565b611f67565b5060019392505050565b6000546001600160a01b03163314610c865760405162461bcd60e51b8152600401610942906135f7565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610cc857600080fd5b505afa158015610cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0091906134a6565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d4e57600080fd5b505af1158015610d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d869190613443565b50505050565b6000546001600160a01b03163314610db65760405162461bcd60e51b8152600401610942906135f7565b601e805460ff60a81b1916600160a81b84151502179055610dd630611466565b601e54610deb906001600160a01b0316611466565b601e54600160a81b900460ff168015610e045750600a54155b15610e135743600a5560098190555b5050565b6000601154821115610e7e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610942565b6000610e886125cd565b9050610e948382611e47565b9392505050565b6000546001600160a01b03163314610ec55760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610f135760405162461bcd60e51b8152600401610942906135f7565b6107d18210610f7b5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610942565b600f546000908390610f9890600160a01b900460ff16600a613704565b610fa290846137af565b610fac91906137af565b905080610fb886611652565b10156110065760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610942565b60005b8381101561107e5761106c8686868481811061103557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061104a91906131dd565b600f5461106290600160a01b900460ff16600a613704565b610bd390876137af565b8061107681613820565b915050611009565b505050505050565b6000546001600160a01b031633146110b05760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b0381166000908152600d602052604090205460ff166111185760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610942565b60005b600e54811015610e1357816001600160a01b0316600e828154811061115057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561125f57600e805461117b906001906137ce565b8154811061119957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600e80546001600160a01b0390921691839081106111d357634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600d90925220805460ff19169055600e80548061123957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061126981613820565b91505061111b565b3360008181526007602090815260408083206001600160a01b0387168452909152812054909161097f918590610c4d9086611f08565b336000818152600d602052604090205460ff161561131c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610942565b6000611327836125f0565b505050506001600160a01b0384166000908152600560205260409020549192506113539190508261263f565b6001600160a01b038316600090815260056020526040902055601154611379908261263f565b6011556012546113899084611f08565b601255505050565b60006010548311156113e55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610942565b816114045760006113f5846125f0565b50939550610983945050505050565b600061140f846125f0565b50929550610983945050505050565b6000546001600160a01b031633146114485760405162461bcd60e51b8152600401610942906135f7565b601e8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146114905760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b038116600090815260056020526040902054156114ea576001600160a01b0381166000908152600560205260409020546114d090610e17565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600e805491820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461157a5760405162461bcd60e51b8152600401610942906135f7565b60005b82811015610d865781600860008686858181106115aa57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115bf91906131dd565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115f081613820565b905061157d565b6000546001600160a01b031633146116215760405162461bcd60e51b8152600401610942906135f7565b6016849055601783905560198290556018819055611649826116438584611f08565b90611f08565b601a5550505050565b6001600160a01b0381166000908152600d602052604081205460ff161561168f57506001600160a01b031660009081526006602052604090205490565b6001600160a01b03821660009081526005602052604090205461098390610e17565b6000546001600160a01b031633146116db5760405162461bcd60e51b8152600401610942906135f7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610942906135f7565b60005b818110156117cd576001600b600085858581811061178057634e487b7160e01b600052603260045260246000fd5b905060200201602081019061179591906131dd565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117c681613820565b9050611752565b505050565b6000546001600160a01b031633146117fc5760405162461bcd60e51b8152600401610942906135f7565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610e13573d6000803e3d6000fd5b6000546001600160a01b0316331461185b5760405162461bcd60e51b8152600401610942906135f7565b808260105461186a91906137af565b61187491906136a1565b601c555050565b606060148054610895906137e5565b600061097f3384610c4d856040518060600160405280602581526020016138a0602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612593565b600061097f33848461208b565b6000546001600160a01b031633146119105760405162461bcd60e51b8152600401610942906135f7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6000546001600160a01b031633146119685760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146119b35760405162461bcd60e51b8152600401610942906135f7565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119f357600080fd5b505afa158015611a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2b91906131f9565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7357600080fd5b505afa158015611a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aab91906131f9565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611af157600080fd5b505afa158015611b05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2991906131f9565b90506001600160a01b038116611ccf57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7257600080fd5b505afa158015611b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baa91906131f9565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf257600080fd5b505afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a91906131f9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611c7257600080fd5b505af1158015611c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611caa91906131f9565b601e80546001600160a01b0319166001600160a01b0392909216919091179055611ceb565b601e80546001600160a01b0319166001600160a01b0383161790555b50601d80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611d395760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611d875760405162461bcd60e51b8152600401610942906135f7565b6001600160a01b038116611dec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610942565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e9483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612681565b600082611e9857506000610983565b6000611ea483856137af565b905082611eb185836136a1565b14610e945760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610942565b600080611f158385613689565b905083811015610e945760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610942565b6001600160a01b038316611fc95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610942565b6001600160a01b03821661202a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610942565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120ef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610942565b6001600160a01b0382166121515760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610942565b600081116121b35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610942565b6001600160a01b03821660009081526008602052604090205460ff16156122165760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610942565b6001600160a01b03831660009081526008602052604090205460ff16156122795760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610942565b6000546001600160a01b038481169116148015906122a557506000546001600160a01b03838116911614155b1561230357601e54600160a81b900460ff166123035760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610942565b601e546000906001600160a01b038581169116148061232f5750601e546001600160a01b038481169116145b801561237757506001600160a01b0384166000908152600b602052604090205460ff168061237557506001600160a01b0383166000908152600b602052604090205460ff165b155b15612380575060015b6000600a541180156123c457506001600160a01b0383166000908152600c602052604090205460ff161580156123c457506000546001600160a01b03858116911614155b80156123df575043600954600a546123dc9190613689565b11155b15612453576015546123f084611652565b6123fa9084613689565b11156124535760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610942565b601a54601b55600a5415801590612478575043600954600a546124769190613689565b115b156124a1576001600160a01b0383166000908152600860205260409020805460ff191660011790555b601e54600160b01b900460ff161561252157601e54600160a81b900460ff1680156124d95750601e546001600160a01b038581169116145b156124e4576000601b555b601e54600160a81b900460ff16801561250a5750601e546001600160a01b038481169116145b1561252157601a5461251d9060026137af565b601b555b601e54600160a01b900460ff161580156125445750601e54600160a81b900460ff165b801561255d5750601e546001600160a01b038481169116145b1561258757600061256d30611652565b9050601c5481106125855750601c54612585816126af565b505b610d86848484846127d9565b600081848411156125b75760405162461bcd60e51b815260040161094291906135a4565b5060006125c484866137ce565b95945050505050565b60008060006125da612905565b90925090506125e98282611e47565b9250505090565b60008060008060008060008060006126078a612abf565b92509250925060008060006126258d86866126206125cd565b612b01565b919f909e50909c50959a5093985091965092945050505050565b6000610e9483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612593565b600081836126a25760405162461bcd60e51b815260040161094291906135a4565b5060006125c484866136a1565b601e805460ff60a01b1916600160a01b179055601a546017546000916126e5916002916126df9182908790611e89565b90611e47565b905060006126f3838361263f565b90506126fe81612b51565b601754479060009061271e90612715906002611e47565b601a549061263f565b9050600061274060026126df846126df60175488611e8990919063ffffffff16565b9050600061275d836126df60195487611e8990919063ffffffff16565b9050600061277a846126df60185488611e8990919063ffffffff16565b90504780156127b15760035461279a9083906001600160a01b0316612d0f565b6004546127b19084906001600160a01b0316612d0f565b87156127c1576127c18885612d45565b5050601e805460ff60a01b1916905550505050505050565b601654601b54826127ef5760006016819055601b555b6001600160a01b0386166000908152600d602052604090205460ff16801561283057506001600160a01b0385166000908152600d602052604090205460ff16155b1561284557612840868686612e29565b6128f1565b6001600160a01b0386166000908152600d602052604090205460ff1615801561288657506001600160a01b0385166000908152600d602052604090205460ff165b1561289657612840868686612f4f565b6001600160a01b0386166000908152600d602052604090205460ff1680156128d657506001600160a01b0385166000908152600d602052604090205460ff165b156128e657612840868686612ff8565b6128f186868661306b565b8261107e57601691909155601b5550505050565b6011546010546000918291825b600e54811015612a8f578260056000600e848154811061294257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806129bb57508160066000600e848154811061299457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156129d157601154601054945094505050509091565b612a2560056000600e84815481106129f957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061263f565b9250612a7b60066000600e8481548110612a4f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061263f565b915080612a8781613820565b915050612912565b50601054601154612a9f91611e47565b821015612ab6576011546010549350935050509091565b90939092509050565b600080600080612ace856130af565b90506000612adb866130cb565b90506000612af382612aed898661263f565b9061263f565b979296509094509092505050565b6000808080612b108886611e89565b90506000612b1e8887611e89565b90506000612b2c8888611e89565b90506000612b3e82612aed868661263f565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b9457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612be857600080fd5b505afa158015612bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2091906131f9565b81600181518110612c4157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d54612c679130911684611f67565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ca090859060009086903090429060040161364d565b600060405180830381600087803b158015612cba57600080fd5b505af1158015612cce573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d0392919061362c565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156117cd573d6000803e3d6000fd5b601d54612d5d9030906001600160a01b031684611f67565b601d546001600160a01b031663f305d719823085600080612d866000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612de957600080fd5b505af1158015612dfd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e229190613503565b5050505050565b600080600080600080612e3b876125f0565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612e6d908861263f565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612e9c908761263f565b6001600160a01b03808b1660009081526005602052604080822093909355908a1681522054612ecb9086611f08565b6001600160a01b038916600090815260056020526040902055612eed816130e7565b612ef7848361316f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f3c91815260200190565b60405180910390a3505050505050505050565b600080600080600080612f61876125f0565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612f93908761263f565b6001600160a01b03808b16600090815260056020908152604080832094909455918b16815260069091522054612fc99084611f08565b6001600160a01b038916600090815260066020908152604080832093909355600590522054612ecb9086611f08565b60008060008060008061300a876125f0565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061303c908861263f565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612f93908761263f565b60008060008060008061307d876125f0565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612e9c908761263f565b600061098360646126df60165485611e8990919063ffffffff16565b600061098360646126df601b5485611e8990919063ffffffff16565b60006130f16125cd565b905060006130ff8383611e89565b3060009081526005602052604090205490915061311c9082611f08565b30600090815260056020908152604080832093909355600d9052205460ff16156117cd573060009081526006602052604090205461315a9084611f08565b30600090815260066020526040902055505050565b60115461317c908361263f565b60115560125461318c9082611f08565b6012555050565b60008083601f8401126131a4578182fd5b50813567ffffffffffffffff8111156131bb578182fd5b6020830191508360208260051b85010111156131d657600080fd5b9250929050565b6000602082840312156131ee578081fd5b8135610e9481613851565b60006020828403121561320a578081fd5b8151610e9481613851565b60008060408385031215613227578081fd5b823561323281613851565b9150602083013561324281613851565b809150509250929050565b600080600060608486031215613261578081fd5b833561326c81613851565b9250602084013561327c81613851565b929592945050506040919091013590565b6000806000806000606086880312156132a4578081fd5b85356132af81613851565b9450602086013567ffffffffffffffff808211156132cb578283fd5b6132d789838a01613193565b909650945060408801359150808211156132ef578283fd5b506132fc88828901613193565b969995985093965092949392505050565b60008060008060608587031215613322578384fd5b843561332d81613851565b9350602085013567ffffffffffffffff811115613348578384fd5b61335487828801613193565b9598909750949560400135949350505050565b60008060408385031215613379578182fd5b823561338481613851565b946020939093013593505050565b600080602083850312156133a4578182fd5b823567ffffffffffffffff8111156133ba578283fd5b6133c685828601613193565b90969095509350505050565b6000806000604084860312156133e6578283fd5b833567ffffffffffffffff8111156133fc578384fd5b61340886828701613193565b909450925050602084013561341c81613869565b809150509250925092565b600060208284031215613438578081fd5b8135610e9481613869565b600060208284031215613454578081fd5b8151610e9481613869565b60008060408385031215613471578182fd5b823561338481613869565b60008060408385031215613227578182fd5b60006020828403121561349f578081fd5b5035919050565b6000602082840312156134b7578081fd5b5051919050565b600080604083850312156134d0578182fd5b82359150602083013561324281613869565b600080604083850312156134f4578182fd5b50508035926020909101359150565b600080600060608486031215613517578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613545578182fd5b5050823594602084013594506040840135936060013592509050565b6000815180845260208085019450808401835b838110156135995781516001600160a01b031687529582019590820190600101613574565b509495945050505050565b6000602080835283518082850152825b818110156135d0578581018301518582016040015282016135b4565b818111156135e15783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006136456040830184613561565b949350505050565b85815284602082015260a06040820152600061366c60a0830186613561565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561369c5761369c61383b565b500190565b6000826136bc57634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156136fc5781600019048211156136e2576136e261383b565b808516156136ef57918102915b93841c93908002906136c6565b509250929050565b6000610e9460ff84168360008261371d57506001610983565b8161372a57506000610983565b8160018114613740576002811461374a57613766565b6001915050610983565b60ff84111561375b5761375b61383b565b50506001821b610983565b5060208310610133831016604e8410600b8410161715613789575081810a610983565b61379383836136c1565b80600019048211156137a7576137a761383b565b029392505050565b60008160001904831182151516156137c9576137c961383b565b500290565b6000828210156137e0576137e061383b565b500390565b600181811c908216806137f957607f821691505b6020821081141561381a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156138345761383461383b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461386657600080fd5b50565b801515811461386657600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208eea7d4742c72379d9ec889bba6e4628756a7cc4f97f1a547047bc7b87f12fe564736f6c63430008040033
Deployed Bytecode Sourcemap
14474:22677:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16162:55;;;;;;;;;;;;;;;;;;;18888:25:1;;;18876:2;18861:18;16162:55:0;;;;;;;;18423:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35340:175::-;;;;;;;;;;-1:-1:-1;35340:175:0;;;;;:::i;:::-;;:::i;:::-;;19335:161;;;;;;;;;;-1:-1:-1;19335:161:0;;;;;:::i;:::-;;:::i;:::-;;;10076:14:1;;10069:22;10051:41;;10039:2;10024:18;19335:161:0;10006:92:1;34672:106:0;;;;;;;;;;-1:-1:-1;34672:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;34752:18:0;34728:4;34752:18;;;:9;:18;;;;;;;;;34672:106;20456:87;;;;;;;;;;-1:-1:-1;20525:10:0;;20456:87;;16237:41;;;;;;;;;;-1:-1:-1;16237:41:0;;;;-1:-1:-1;;;;;16237:41:0;;;;;;-1:-1:-1;;;;;8667:32:1;;;8649:51;;8637:2;8622:18;16237:41:0;8604:102:1;18700:95:0;;;;;;;;;;-1:-1:-1;18780:7:0;;18700:95;;35830:702;;;;;;;;;;-1:-1:-1;35830:702:0;;;;;:::i;:::-;;:::i;16015:85::-;;;;;;;;;;;;;;;;19504:313;;;;;;;;;;-1:-1:-1;19504:313:0;;;;;:::i;:::-;;:::i;35155:177::-;;;;;;;;;;-1:-1:-1;35155:177:0;;;;;:::i;:::-;;:::i;17431:337::-;;;;;;;;;;-1:-1:-1;17431:337:0;;;;;:::i;:::-;;:::i;21388:253::-;;;;;;;;;;-1:-1:-1;21388:253:0;;;;;:::i;:::-;;:::i;35523:113::-;;;;;;;;;;-1:-1:-1;35523:113:0;;;;;:::i;:::-;;:::i;18609:83::-;;;;;;;;;;-1:-1:-1;18675:9:0;;-1:-1:-1;;;18675:9:0;;;;18609:83;;20020:4:1;20008:17;;;19990:36;;19978:2;19963:18;18609:83:0;19945:87:1;36540:512:0;;;;;;;;;;-1:-1:-1;36540:512:0;;;;;:::i;:::-;;:::i;21920:479::-;;;;;;;;;;-1:-1:-1;21920:479:0;;;;;:::i;:::-;;:::i;19825:218::-;;;;;;;;;;-1:-1:-1;19825:218:0;;;;;:::i;:::-;;:::i;20555:377::-;;;;;;;;;;-1:-1:-1;20555:377:0;;;;;:::i;:::-;;:::i;20944:436::-;;;;;;;;;;-1:-1:-1;20944:436:0;;;;;:::i;:::-;;:::i;16285:28::-;;;;;;;;;;-1:-1:-1;16285:28:0;;;;-1:-1:-1;;;;;16285:28:0;;;17782:102;;;;;;;;;;-1:-1:-1;17782:102:0;;;;;:::i;:::-;;:::i;21649:263::-;;;;;;;;;;-1:-1:-1;21649:263:0;;;;;:::i;:::-;;:::i;34790:204::-;;;;;;;;;;-1:-1:-1;34790:204:0;;;;;:::i;:::-;;:::i;15937:31::-;;;;;;;;;;;;;;;;34109:414;;;;;;;;;;-1:-1:-1;34109:414:0;;;;;:::i;:::-;;:::i;18803:198::-;;;;;;;;;;-1:-1:-1;18803:198:0;;;;;:::i;:::-;;:::i;6105:148::-;;;;;;;;;;;;;:::i;33549:198::-;;;;;;;;;;-1:-1:-1;33549:198:0;;;;;:::i;:::-;;:::i;35012:135::-;;;;;;;;;;-1:-1:-1;35012:135:0;;;;;:::i;:::-;;:::i;15766:57::-;;;;;;;;;;;;;;;;20328:120;;;;;;;;;;-1:-1:-1;20328:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20420:20:0;20396:4;20420:20;;;:11;:20;;;;;;;;;20328:120;5880:79;;;;;;;;;;-1:-1:-1;5918:7:0;5945:6;-1:-1:-1;;;;;5945:6:0;5880:79;;35644:178;;;;;;;;;;-1:-1:-1;35644:178:0;;;;;:::i;:::-;;:::i;18514:87::-;;;;;;;;;;;;;:::i;15899:31::-;;;;;;;;;;;;;;;;20051:269;;;;;;;;;;-1:-1:-1;20051:269:0;;;;;:::i;:::-;;:::i;19009:167::-;;;;;;;;;;-1:-1:-1;19009:167:0;;;;;:::i;:::-;;:::i;33887:214::-;;;;;;;;;;-1:-1:-1;33887:214:0;;;;;:::i;:::-;;:::i;19184:143::-;;;;;;;;;;-1:-1:-1;19184:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19292:18:0;;;19265:7;19292:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19184:143;15975:33;;;;;;;;;;;;;;;;33765:110;;;;;;;;;;-1:-1:-1;33765:110:0;;;;;:::i;:::-;;:::i;17892:523::-;;;;;;;;;;-1:-1:-1;17892:523:0;;;;;:::i;:::-;;:::i;33429:112::-;;;;;;;;;;-1:-1:-1;33429:112:0;;;;;:::i;:::-;;:::i;6261:244::-;;;;;;;;;;-1:-1:-1;6261:244:0;;;;;:::i;:::-;;:::i;18423:83::-;18460:13;18493:5;18486:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18423:83;:::o;35340:175::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;;;;;;;;;35461:46:::1;35483:23;35461:17;35473:4;35461:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;35443:15;:64:::0;-1:-1:-1;35340:175:0:o;19335:161::-;19410:4;19427:39;264:10;19450:7;19459:6;19427:8;:39::i;:::-;-1:-1:-1;19484:4:0;19335:161;;;;;:::o;35830:702::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;35983:3:::1;35964:22:::0;::::1;35956:79;;;::::0;-1:-1:-1;;;35956:79:0;;16604:2:1;35956:79:0::1;::::0;::::1;16586:21:1::0;16643:2;16623:18;;;16616:30;16682:34;16662:18;;;16655:62;-1:-1:-1;;;16733:18:1;;;16726:43;16786:19;;35956:79:0::1;16576:235:1::0;35956:79:0::1;36077:33:::0;;::::1;36069:85;;;::::0;-1:-1:-1;;;36069:85:0;;11552:2:1;36069:85:0::1;::::0;::::1;11534:21:1::0;11591:2;11571:18;;;11564:30;11630:34;11610:18;;;11603:62;-1:-1:-1;;;11681:18:1;;;11674:38;11729:19;;36069:85:0::1;11524:230:1::0;36069:85:0::1;36167:12;36200:6:::0;36196:108:::1;36210:20:::0;;::::1;36196:108;;;36282:9;::::0;36278:13:::1;::::0;-1:-1:-1;;;36282:9:0;::::1;;;36278:2;:13;:::i;:::-;36266:6;;36273:1;36266:9;;;;;-1:-1:-1::0;;;36266:9:0::1;;;;;;;;;;;;;;;:25;;;;:::i;:::-;36258:34;::::0;:4;:34:::1;:::i;:::-;36251:41:::0;-1:-1:-1;36232:3:0;::::1;::::0;::::1;:::i;:::-;;;;36196:108;;;;36343:4;36324:15;36334:4;36324:9;:15::i;:::-;:23;;36316:63;;;::::0;-1:-1:-1;;;36316:63:0;;13894:2:1;36316:63:0::1;::::0;::::1;13876:21:1::0;13933:2;13913:18;;;13906:30;13972:29;13952:18;;;13945:57;14019:18;;36316:63:0::1;13866:177:1::0;36316:63:0::1;36396:6;36392:133;36406:20:::0;;::::1;36392:133;;;36447:56;36457:4;36462:9;;36472:1;36462:12;;;;;-1:-1:-1::0;;;36462:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36492:9;::::0;36488:13:::1;::::0;-1:-1:-1;;;36492:9:0;::::1;;;36488:2;:13;:::i;:::-;36476:6;;36483:1;36476:9;;;;;-1:-1:-1::0;;;36476:9:0::1;;;;;;;;;;;;;;;:25;;;;:::i;:::-;36447:9;:56::i;:::-;36428:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36392:133;;;;6084:1;35830:702:::0;;;;;:::o;19504:313::-;19602:4;19619:36;19629:6;19637:9;19648:6;19619:9;:36::i;:::-;19666:121;19675:6;264:10;19697:89;19735:6;19697:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19697:19:0;;;;;;:11;:19;;;;;;;;264:10;19697:33;;;;;;;;;;:37;:89::i;:::-;19666:8;:121::i;:::-;-1:-1:-1;19805:4:0;19504:313;;;;;:::o;35155:177::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;35256:30:::1;::::0;-1:-1:-1;;;35256:30:0;;35280:4:::1;35256:30;::::0;::::1;8649:51:1::0;35238:15:0::1;::::0;-1:-1:-1;;;;;35256:15:0;::::1;::::0;::::1;::::0;8622:18:1;;35256:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35297:27;::::0;-1:-1:-1;;;35297:27:0;;-1:-1:-1;;;;;9212:32:1;;;35297:27:0::1;::::0;::::1;9194:51:1::0;9261:18;;;9254:34;;;35238:48:0;;-1:-1:-1;35297:14:0;;::::1;::::0;::::1;::::0;9167:18:1;;35297:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6084:1;35155:177:::0;;:::o;17431:337::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;17518:11:::1;:21:::0;;-1:-1:-1;;;;17518:21:0::1;-1:-1:-1::0;;;17518:21:0;::::1;;;;::::0;;17550:32:::1;17576:4;17550:17;:32::i;:::-;17611:13;::::0;17593:32:::1;::::0;-1:-1:-1;;;;;17611:13:0::1;17593:17;:32::i;:::-;17639:11;::::0;-1:-1:-1;;;17639:11:0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;17654:10:0::1;::::0;:15;17639:30:::1;17636:125;;;17698:12;17685:10;:25:::0;17725:10:::1;:24:::0;;;17636:125:::1;17431:337:::0;;:::o;21388:253::-;21454:7;21493;;21482;:18;;21474:73;;;;-1:-1:-1;;;21474:73:0;;11961:2:1;21474:73:0;;;11943:21:1;12000:2;11980:18;;;11973:30;12039:34;12019:18;;;12012:62;-1:-1:-1;;;12090:18:1;;;12083:40;12140:19;;21474:73:0;11933:232:1;21474:73:0;21558:19;21581:10;:8;:10::i;:::-;21558:33;-1:-1:-1;21609:24:0;:7;21558:33;21609:11;:24::i;:::-;21602:31;21388:253;-1:-1:-1;;;21388:253:0:o;35523:113::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35596:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;35596:32:0::1;35624:4;35596:32;::::0;;35523:113::o;36540:512::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;36688:4:::1;36669:23:::0;::::1;36661:81;;;::::0;-1:-1:-1;;;36661:81:0;;14610:2:1;36661:81:0::1;::::0;::::1;14592:21:1::0;14649:2;14629:18;;;14622:30;14688:34;14668:18;;;14661:62;-1:-1:-1;;;14739:18:1;;;14732:44;14793:19;;36661:81:0::1;14582:236:1::0;36661:81:0::1;36805:9;::::0;36778:12:::1;::::0;36817:9;;36801:13:::1;::::0;-1:-1:-1;;;36805:9:0;::::1;;;36801:2;:13;:::i;:::-;36793:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;36778:55;;36873:4;36854:15;36864:4;36854:9;:15::i;:::-;:23;;36846:63;;;::::0;-1:-1:-1;;;36846:63:0;;13894:2:1;36846:63:0::1;::::0;::::1;13876:21:1::0;13933:2;13913:18;;;13906:30;13972:29;13952:18;;;13945:57;14019:18;;36846:63:0::1;13866:177:1::0;36846:63:0::1;36926:6;36922:123;36936:20:::0;;::::1;36922:123;;;36977:52;36987:4;36992:9;;37002:1;36992:12;;;;;-1:-1:-1::0;;;36992:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37018:9;::::0;37014:13:::1;::::0;-1:-1:-1;;;37018:9:0;::::1;;;37014:2;:13;:::i;:::-;37006:21;::::0;:6;:21:::1;:::i;36977:52::-;36958:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36922:123;;;;6084:1;36540:512:::0;;;;:::o;21920:479::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22002:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21994:60;;;::::0;-1:-1:-1;;;21994:60:0;;13538:2:1;21994:60:0::1;::::0;::::1;13520:21:1::0;13577:2;13557:18;;;13550:30;13616:29;13596:18;;;13589:57;13663:18;;21994:60:0::1;13510:177:1::0;21994:60:0::1;22070:9;22065:327;22089:9;:16:::0;22085:20;::::1;22065:327;;;22147:7;-1:-1:-1::0;;;;;22131:23:0::1;:9;22141:1;22131:12;;;;;;-1:-1:-1::0;;;22131:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22131:12:0::1;:23;22127:254;;;22190:9;22200:16:::0;;:20:::1;::::0;22219:1:::1;::::0;22200:20:::1;:::i;:::-;22190:31;;;;;;-1:-1:-1::0;;;22190:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22175:9:::1;:12:::0;;-1:-1:-1;;;;;22190:31:0;;::::1;::::0;22185:1;;22175:12;::::1;;;-1:-1:-1::0;;;22175:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22175:46:0::1;-1:-1:-1::0;;;;;22175:46:0;;::::1;;::::0;;22240:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22279:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22279:28:0::1;::::0;;22326:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;22326:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22326:15:0;;;;;-1:-1:-1;;;;;;22326:15:0::1;::::0;;;;;17431:337;;:::o;22127:254::-:1;22107:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22065:327;;19825:218:::0;264:10;19913:4;19962:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19962:34:0;;;;;;;;;;19913:4;;19930:83;;19953:7;;19962:50;;20001:10;19962:38;:50::i;20555:377::-;264:10;20607:14;20656:19;;;:11;:19;;;;;;;;20655:20;20647:77;;;;-1:-1:-1;;;20647:77:0;;18179:2:1;20647:77:0;;;18161:21:1;18218:2;18198:18;;;18191:30;18257:34;18237:18;;;18230:62;-1:-1:-1;;;18308:18:1;;;18301:42;18360:19;;20647:77:0;18151:234:1;20647:77:0;20736:15;20760:19;20771:7;20760:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20808:15:0;;;;;;:7;:15;;;;;;20735:44;;-1:-1:-1;20808:28:0;;:15;-1:-1:-1;20735:44:0;20808:19;:28::i;:::-;-1:-1:-1;;;;;20790:15:0;;;;;;:7;:15;;;;;:46;20857:7;;:20;;20869:7;20857:11;:20::i;:::-;20847:7;:30;20901:10;;:23;;20916:7;20901:14;:23::i;:::-;20888:10;:36;-1:-1:-1;;;20555:377:0:o;20944:436::-;21034:7;21073;;21062;:18;;21054:62;;;;-1:-1:-1;;;21054:62:0;;14250:2:1;21054:62:0;;;14232:21:1;14289:2;14269:18;;;14262:30;14328:33;14308:18;;;14301:61;14379:18;;21054:62:0;14222:181:1;21054:62:0;21132:17;21127:246;;21167:15;21191:19;21202:7;21191:10;:19::i;:::-;-1:-1:-1;21166:44:0;;-1:-1:-1;21225:14:0;;-1:-1:-1;;;;;21225:14:0;21127:246;21274:23;21305:19;21316:7;21305:10;:19::i;:::-;-1:-1:-1;21272:52:0;;-1:-1:-1;21339:22:0;;-1:-1:-1;;;;;21339:22:0;17782:102;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;17854:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;17854:22:0::1;-1:-1:-1::0;;;;17854:22:0;;::::1;::::0;;;::::1;::::0;;17782:102::o;21649:263::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21728:16:0;::::1;21747:1;21728:16:::0;;;:7:::1;:16;::::0;;;;;:20;21725:108:::1;;-1:-1:-1::0;;;;;21804:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21784:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21765:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21725:108:::1;-1:-1:-1::0;;;;;21843:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21843:27:0::1;21866:4;21843:27:::0;;::::1;::::0;;;21881:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21881:23:0::1;::::0;;::::1;::::0;;21649:263::o;34790:204::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;34890:9:::1;34885:102;34901:20:::0;;::::1;34885:102;;;34969:6;34943:9;:23;34953:9;;34963:1;34953:12;;;;;-1:-1:-1::0;;;34953:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34943:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34943:23:0;:32;;-1:-1:-1;;34943:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34923:3:::1;::::0;::::1;:::i;:::-;;;34885:102;;34109:414:::0;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;34294:13:::1;:28:::0;;;34333:12:::1;:28:::0;;;34372:14:::1;:32:::0;;;34415:12:::1;:28:::0;;;34465:50:::1;34389:15:::0;34465:30:::1;34348:13:::0;34430;34465:16:::1;:30::i;:::-;:34:::0;::::1;:50::i;:::-;34454:8;:61:::0;-1:-1:-1;;;;34109:414:0:o;18803:198::-;-1:-1:-1;;;;;18893:20:0;;18869:7;18893:20;;;:11;:20;;;;;;;;18889:49;;;-1:-1:-1;;;;;;18922:16:0;;;;;:7;:16;;;;;;;18803:198::o;18889:49::-;-1:-1:-1;;;;;18976:16:0;;;;;;:7;:16;;;;;;18956:37;;:19;:37::i;6105:148::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;6212:1:::1;6196:6:::0;;6175:40:::1;::::0;-1:-1:-1;;;;;6196:6:0;;::::1;::::0;6175:40:::1;::::0;6212:1;;6175:40:::1;6243:1;6226:19:::0;;-1:-1:-1;;;;;;6226:19:0::1;::::0;;6105:148::o;33549:198::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;33636:9:::1;33631:109;33647:20:::0;;::::1;33631:109;;;33724:4;33689:18;:32;33708:9;;33718:1;33708:12;;;;;-1:-1:-1::0;;;33708:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33689:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;33689:32:0;:39;;-1:-1:-1;;33689:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33669:3:::1;::::0;::::1;:::i;:::-;;;33631:109;;;;33549:198:::0;;:::o;35012:135::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;35097:42:::1;::::0;-1:-1:-1;;;;;35097:19:0;::::1;::::0;35117:21:::1;35097:42:::0;::::1;;;::::0;::::1;::::0;;;35117:21;35097:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;35644:178:::0;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;35798:16:::1;35778;35768:7;;:26;;;;:::i;:::-;35767:47;;;;:::i;:::-;35751:13;:63:::0;-1:-1:-1;;35644:178:0:o;18514:87::-;18553:13;18586:7;18579:14;;;;;:::i;20051:269::-;20144:4;20161:129;264:10;20184:7;20193:96;20232:15;20193:96;;;;;;;;;;;;;;;;;264:10;20193:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20193:34:0;;;;;;;;;;;;:38;:96::i;19009:167::-;19087:4;19104:42;264:10;19128:9;19139:6;19104:9;:42::i;33887:214::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;33992:15:::1;:43:::0;;-1:-1:-1;;;;;33992:43:0;;::::1;-1:-1:-1::0;;;;;;33992:43:0;;::::1;;::::0;;;34046:17:::1;:47:::0;;;;;::::1;::::0;::::1;;::::0;;33887:214::o;33765:110::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33832:27:0::1;33862:5;33832:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33832:35:0::1;::::0;;33765:110::o;17892:523::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;17965:29:::1;18016:9;17965:61;;18037:16;18074:10;-1:-1:-1::0;;;;;18074:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18056:47:0::1;;18112:4;18119:10;-1:-1:-1::0;;;;;18119:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18056:81;::::0;-1:-1:-1;;;;;;18056:81:0::1;::::0;;;;;;-1:-1:-1;;;;;8941:15:1;;;18056:81:0::1;::::0;::::1;8923:34:1::0;8993:15;;8973:18;;;8966:43;8858:18;;18056:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18037:100:::0;-1:-1:-1;;;;;;18152:22:0;::::1;18148:221;;18225:10;-1:-1:-1::0;;;;;18225:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18207:50:0::1;;18266:4;18273:10;-1:-1:-1::0;;;;;18273:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18207:84;::::0;-1:-1:-1;;;;;;18207:84:0::1;::::0;;;;;;-1:-1:-1;;;;;8941:15:1;;;18207:84:0::1;::::0;::::1;8923:34:1::0;8993:15;;8973:18;;;8966:43;8858:18;;18207:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18191:13;:100:::0;;-1:-1:-1;;;;;;18191:100:0::1;-1:-1:-1::0;;;;;18191:100:0;;;::::1;::::0;;;::::1;::::0;;18148:221:::1;;;18333:13;:24:::0;;-1:-1:-1;;;;;;18333:24:0::1;-1:-1:-1::0;;;;;18333:24:0;::::1;;::::0;;18148:221:::1;-1:-1:-1::0;18379:15:0::1;:28:::0;;-1:-1:-1;;;;;;18379:28:0::1;-1:-1:-1::0;;;;;18379:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;17892:523:0:o;33429:112::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33499:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;33499:34:0::1;33529:4;33499:34;::::0;;33429:112::o;6261:244::-;6014:6;;-1:-1:-1;;;;;6014:6:0;264:10;6014:22;6006:67;;;;-1:-1:-1;;;6006:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6350:22:0;::::1;6342:73;;;::::0;-1:-1:-1;;;6342:73:0;;12372:2:1;6342:73:0::1;::::0;::::1;12354:21:1::0;12411:2;12391:18;;;12384:30;12450:34;12430:18;;;12423:62;-1:-1:-1;;;12501:18:1;;;12494:36;12547:19;;6342:73:0::1;12344:228:1::0;6342:73:0::1;6452:6;::::0;;6431:38:::1;::::0;-1:-1:-1;;;;;6431:38:0;;::::1;::::0;6452:6;::::1;::::0;6431:38:::1;::::0;::::1;6480:6;:17:::0;;-1:-1:-1;;;;;;6480:17:0::1;-1:-1:-1::0;;;;;6480:17:0;;;::::1;::::0;;;::::1;::::0;;6261:244::o;2039:132::-;2097:7;2124:39;2128:1;2131;2124:39;;;;;;;;;;;;;;;;;:3;:39::i;1779:250::-;1837:7;1861:6;1857:47;;-1:-1:-1;1891:1:0;1884:8;;1857:47;1916:9;1928:5;1932:1;1928;:5;:::i;:::-;1916:17;-1:-1:-1;1961:1:0;1952:5;1956:1;1916:17;1952:5;:::i;:::-;:10;1944:56;;;;-1:-1:-1;;;1944:56:0;;15025:2:1;1944:56:0;;;15007:21:1;15064:2;15044:18;;;15037:30;15103:34;15083:18;;;15076:62;-1:-1:-1;;;15154:18:1;;;15147:31;15195:19;;1944:56:0;14997:223:1;1246:181:0;1304:7;;1336:5;1340:1;1336;:5;:::i;:::-;1324:17;;1365:1;1360;:6;;1352:46;;;;-1:-1:-1;;;1352:46:0;;13182:2:1;1352:46:0;;;13164:21:1;13221:2;13201:18;;;13194:30;13260:29;13240:18;;;13233:57;13307:18;;1352:46:0;13154:177:1;22407:337:0;-1:-1:-1;;;;;22500:19:0;;22492:68;;;;-1:-1:-1;;;22492:68:0;;17421:2:1;22492:68:0;;;17403:21:1;17460:2;17440:18;;;17433:30;17499:34;17479:18;;;17472:62;-1:-1:-1;;;17550:18:1;;;17543:34;17594:19;;22492:68:0;17393:226:1;22492:68:0;-1:-1:-1;;;;;22579:21:0;;22571:68;;;;-1:-1:-1;;;22571:68:0;;12779:2:1;22571:68:0;;;12761:21:1;12818:2;12798:18;;;12791:30;12857:34;12837:18;;;12830:62;-1:-1:-1;;;12908:18:1;;;12901:32;12950:19;;22571:68:0;12751:224:1;22571:68:0;-1:-1:-1;;;;;22652:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22704:32;;18888:25:1;;;22704:32:0;;18861:18:1;22704:32:0;;;;;;;22407:337;;;:::o;22752:1987::-;-1:-1:-1;;;;;22874:18:0;;22866:68;;;;-1:-1:-1;;;22866:68:0;;16198:2:1;22866:68:0;;;16180:21:1;16237:2;16217:18;;;16210:30;16276:34;16256:18;;;16249:62;-1:-1:-1;;;16327:18:1;;;16320:35;16372:19;;22866:68:0;16170:227:1;22866:68:0;-1:-1:-1;;;;;22953:16:0;;22945:64;;;;-1:-1:-1;;;22945:64:0;;11148:2:1;22945:64:0;;;11130:21:1;11187:2;11167:18;;;11160:30;11226:34;11206:18;;;11199:62;-1:-1:-1;;;11277:18:1;;;11270:33;11320:19;;22945:64:0;11120:225:1;22945:64:0;23037:1;23028:6;:10;23020:64;;;;-1:-1:-1;;;23020:64:0;;15788:2:1;23020:64:0;;;15770:21:1;15827:2;15807:18;;;15800:30;15866:34;15846:18;;;15839:62;-1:-1:-1;;;15917:18:1;;;15910:39;15966:19;;23020:64:0;15760:231:1;23020:64:0;-1:-1:-1;;;;;23104:13:0;;;;;;:9;:13;;;;;;;;23103:14;23095:50;;;;-1:-1:-1;;;23095:50:0;;18592:2:1;23095:50:0;;;18574:21:1;18631:2;18611:18;;;18604:30;-1:-1:-1;;;18650:18:1;;;18643:53;18713:18;;23095:50:0;18564:173:1;23095:50:0;-1:-1:-1;;;;;23165:15:0;;;;;;:9;:15;;;;;;;;23164:16;23156:52;;;;-1:-1:-1;;;23156:52:0;;18592:2:1;23156:52:0;;;18574:21:1;18631:2;18611:18;;;18604:30;-1:-1:-1;;;18650:18:1;;;18643:53;18713:18;;23156:52:0;18564:173:1;23156:52:0;5918:7;5945:6;-1:-1:-1;;;;;23223:14:0;;;5945:6;;23223:14;;;;:30;;-1:-1:-1;5918:7:0;5945:6;-1:-1:-1;;;;;23241:12:0;;;5945:6;;23241:12;;23223:30;23219:84;;;23263:11;;-1:-1:-1;;;23263:11:0;;;;23255:48;;;;-1:-1:-1;;;23255:48:0;;17826:2:1;23255:48:0;;;17808:21:1;17865:2;17845:18;;;17838:30;17904:26;17884:18;;;17877:54;17948:18;;23255:48:0;17798:174:1;23255:48:0;23442:13;;23365:12;;-1:-1:-1;;;;;23436:19:0;;;23442:13;;23436:19;;:40;;-1:-1:-1;23463:13:0;;-1:-1:-1;;;;;23459:17:0;;;23463:13;;23459:17;23436:40;23435:99;;;;-1:-1:-1;;;;;;23483:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;23511:22:0;;;;;;:18;:22;;;;;;;;23483:50;23481:53;23435:99;23430:148;;;-1:-1:-1;23562:4:0;23430:148;23604:1;23593:10;;:12;:59;;;;-1:-1:-1;;;;;;23611:22:0;;;;;;:18;:22;;;;;;;;23610:23;:41;;;;-1:-1:-1;5918:7:0;5945:6;-1:-1:-1;;;;;23637:14:0;;;5945:6;;23637:14;;23610:41;23593:106;;;;;23686:12;23672:10;;23659;;:23;;;;:::i;:::-;23658:40;23656:43;23593:106;23590:247;;;23750:15;;23735:13;23745:2;23735:9;:13::i;:::-;23727:21;;:6;:21;:::i;:::-;:38;;23719:106;;;;-1:-1:-1;;;23719:106:0;;17018:2:1;23719:106:0;;;17000:21:1;17057:2;17037:18;;;17030:30;17096:34;17076:18;;;17069:62;-1:-1:-1;;;17147:18:1;;;17140:32;17189:19;;23719:106:0;16990:224:1;23719:106:0;23865:8;;23849:15;:24;23909:10;;:12;;;;:56;;;23953:12;23939:10;;23926;;:23;;;;:::i;:::-;23925:40;23909:56;23906:109;;;-1:-1:-1;;;;;23985:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;23985:18:0;23999:4;23985:18;;;23906:109;24030:14;;-1:-1:-1;;;24030:14:0;;;;24027:278;;;24064:11;;-1:-1:-1;;;24064:11:0;;;;:36;;;;-1:-1:-1;24087:13:0;;-1:-1:-1;;;;;24079:21:0;;;24087:13;;24079:21;24064:36;24061:105;;;24148:1;24132:15;:17;24061:105;24184:11;;-1:-1:-1;;;24184:11:0;;;;:34;;;;-1:-1:-1;24205:13:0;;-1:-1:-1;;;;;24199:19:0;;;24205:13;;24199:19;24184:34;24181:113;;;24269:8;;24267:10;;:1;:10;:::i;:::-;24251:15;:26;24181:113;24338:6;;-1:-1:-1;;;24338:6:0;;;;24337:7;:22;;;;-1:-1:-1;24348:11:0;;-1:-1:-1;;;24348:11:0;;;;24337:22;:45;;;;-1:-1:-1;24369:13:0;;-1:-1:-1;;;;;24363:19:0;;;24369:13;;24363:19;24337:45;24333:350;;;24407:28;24438:24;24456:4;24438:9;:24::i;:::-;24407:55;;24516:13;;24494:20;:35;24491:169;;-1:-1:-1;24576:13:0;;24612:32;24576:13;24612:10;:32::i;:::-;24333:350;;24693:38;24708:4;24713:2;24716:6;24723:7;24693:14;:38::i;1579:192::-;1665:7;1701:12;1693:6;;;;1685:29;;;;-1:-1:-1;;;1685:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1725:9:0;1737:5;1741:1;1737;:5;:::i;:::-;1725:17;1579:192;-1:-1:-1;;;;;1579:192:0:o;31966:163::-;32007:7;32028:15;32045;32064:19;:17;:19::i;:::-;32027:56;;-1:-1:-1;32027:56:0;-1:-1:-1;32101:20:0;32027:56;;32101:11;:20::i;:::-;32094:27;;;;31966:163;:::o;30764:419::-;30823:7;30832;30841;30850;30859;30868;30889:23;30914:12;30928:18;30950:20;30962:7;30950:11;:20::i;:::-;30888:82;;;;;;30982:15;30999:23;31024:12;31040:50;31052:7;31061:4;31067:10;31079;:8;:10::i;:::-;31040:11;:50::i;:::-;30981:109;;;;-1:-1:-1;30981:109:0;;-1:-1:-1;31141:15:0;;-1:-1:-1;31158:4:0;;-1:-1:-1;31164:10:0;;-1:-1:-1;30764:419:0;;-1:-1:-1;;;;;30764:419:0:o;1435:136::-;1493:7;1520:43;1524:1;1527;1520:43;;;;;;;;;;;;;;;;;:3;:43::i;2179:278::-;2265:7;2300:12;2293:5;2285:28;;;;-1:-1:-1;;;2285:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2324:9:0;2336:5;2340:1;2336;:5;:::i;24747:1240::-;16641:6;:13;;-1:-1:-1;;;;16641:13:0;-1:-1:-1;;;16641:13:0;;;24945:8:::1;::::0;24913:12:::1;::::0;16641:13;;24874:101:::1;::::0;24973:1:::1;::::0;24874:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;24848:127:::0;-1:-1:-1;24988:20:0::1;25011:41;:20:::0;24848:127;25011:24:::1;:41::i;:::-;24988:64;;25073:30;25090:12;25073:16;:30::i;:::-;25205:12;::::0;25136:21:::1;::::0;25116:17:::1;::::0;25192:33:::1;::::0;25205:19:::1;::::0;25222:1:::1;25205:16;:19::i;:::-;25192:8;::::0;;:12:::1;:33::i;:::-;25170:55;;25238:26;25267:93;25358:1;25267:72;25327:11;25267:41;25295:12;;25267:9;:27;;:41;;;;:::i;:93::-;25238:122;;25381:28;25412:46;25446:11;25412:29;25426:14;;25412:9;:13;;:29;;;;:::i;:46::-;25381:77;;25469:26;25498:68;25544:11;25498:27;25512:12;;25498:9;:13;;:27;;;;:::i;:68::-;25469:97:::0;-1:-1:-1;25665:21:0::1;25700:22:::0;;25697:169:::1;;25771:15;::::0;25739:48:::1;::::0;25752:18;;-1:-1:-1;;;;;25771:15:0::1;25739:12;:48::i;:::-;25836:17;::::0;25802:52:::1;::::0;25815:20;;-1:-1:-1;;;;;25836:17:0::1;25802:12;:52::i;:::-;25880:19:::0;;25876:104:::1;;25920:48;25933:15;25949:18;25920:12;:48::i;:::-;-1:-1:-1::0;;16677:6:0;:14;;-1:-1:-1;;;;16677:14:0;;;-1:-1:-1;;;;;;;24747:1240:0:o;27330:943::-;27470:13;;27520:15;;27550:7;27546:88;;27589:1;27573:13;:17;;;27605:15;:17;27546:88;-1:-1:-1;;;;;27658:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27682:22:0;;;;;;:11;:22;;;;;;;;27681:23;27658:46;27654:467;;;27721:48;27743:6;27751:9;27762:6;27721:21;:48::i;:::-;27654:467;;;-1:-1:-1;;;;;27792:19:0;;;;;;:11;:19;;;;;;;;27791:20;:46;;;;-1:-1:-1;;;;;;27815:22:0;;;;;;:11;:22;;;;;;;;27791:46;27787:334;;;27854:46;27874:6;27882:9;27893:6;27854:19;:46::i;27787:334::-;-1:-1:-1;;;;;27922:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;27945:22:0;;;;;;:11;:22;;;;;;;;27922:45;27918:203;;;27984:48;28006:6;28014:9;28025:6;27984:21;:48::i;27918:203::-;28065:44;28083:6;28091:9;28102:6;28065:17;:44::i;:::-;28145:7;28141:125;;28168:13;:38;;;;28221:15;:33;-1:-1:-1;;;;27330:943:0:o;32137:561::-;32234:7;;32270;;32187;;;;;32294:289;32318:9;:16;32314:20;;32294:289;;;32384:7;32360;:21;32368:9;32378:1;32368:12;;;;;;-1:-1:-1;;;32368:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32368:12:0;32360:21;;;;;;;;;;;;;:31;;:66;;;32419:7;32395;:21;32403:9;32413:1;32403:12;;;;;;-1:-1:-1;;;32403:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32403:12:0;32395:21;;;;;;;;;;;;;:31;32360:66;32356:97;;;32436:7;;32445;;32428:25;;;;;;;32137:561;;:::o;32356:97::-;32478:34;32490:7;:21;32498:9;32508:1;32498:12;;;;;;-1:-1:-1;;;32498:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32498:12:0;32490:21;;;;;;;;;;;;;32478:7;;:11;:34::i;:::-;32468:44;;32537:34;32549:7;:21;32557:9;32567:1;32557:12;;;;;;-1:-1:-1;;;32557:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32557:12:0;32549:21;;;;;;;;;;;;;32537:7;;:11;:34::i;:::-;32527:44;-1:-1:-1;32336:3:0;;;;:::i;:::-;;;;32294:289;;;-1:-1:-1;32619:7:0;;32607;;:20;;:11;:20::i;:::-;32597:7;:30;32593:61;;;32637:7;;32646;;32629:25;;;;;;32137:561;;:::o;32593:61::-;32673:7;;32682;;-1:-1:-1;32137:561:0;-1:-1:-1;32137:561:0:o;31191:330::-;31251:7;31260;31269;31289:12;31304:24;31320:7;31304:15;:24::i;:::-;31289:39;;31339:18;31360:30;31382:7;31360:21;:30::i;:::-;31339:51;-1:-1:-1;31401:23:0;31427:33;31339:51;31427:17;:7;31439:4;31427:11;:17::i;:::-;:21;;:33::i;:::-;31401:59;31496:4;;-1:-1:-1;31502:10:0;;-1:-1:-1;31191:330:0;;-1:-1:-1;;;31191:330:0:o;31529:429::-;31644:7;;;;31700:24;:7;31712:11;31700;:24::i;:::-;31682:42;-1:-1:-1;31735:12:0;31750:21;:4;31759:11;31750:8;:21::i;:::-;31735:36;-1:-1:-1;31782:18:0;31803:27;:10;31818:11;31803:14;:27::i;:::-;31782:48;-1:-1:-1;31841:23:0;31867:33;31782:48;31867:17;:7;31879:4;31867:11;:17::i;:33::-;31919:7;;;;-1:-1:-1;31945:4:0;;-1:-1:-1;31529:429:0;;-1:-1:-1;;;;;;;31529:429:0:o;26129:666::-;26279:16;;;26293:1;26279:16;;;;;;;;26255:21;;26279:16;;;;;;;;;;-1:-1:-1;26279:16:0;26255:40;;26324:4;26306;26311:1;26306:7;;;;;;-1:-1:-1;;;26306:7:0;;;;;;;;;-1:-1:-1;;;;;26306:23:0;;;:7;;;;;;;;;;:23;;;;26350:15;;:22;;;-1:-1:-1;;;26350:22:0;;;;:15;;;;;:20;;:22;;;;;26306:7;;26350:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26340:4;26345:1;26340:7;;;;;;-1:-1:-1;;;26340:7:0;;;;;;;;;-1:-1:-1;;;;;26340:32:0;;;:7;;;;;;;;;:32;26417:15;;26385:62;;26402:4;;26417:15;26435:11;26385:8;:62::i;:::-;26486:15;;:240;;-1:-1:-1;;;26486:240:0;;-1:-1:-1;;;;;26486:15:0;;;;:66;;:240;;26567:11;;26486:15;;26637:4;;26664;;26700:15;;26486:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26752:35;26769:11;26782:4;26752:35;;;;;;;:::i;:::-;;;;;;;;26129:666;;:::o;25999:111::-;26079:23;;-1:-1:-1;;;;;26079:15:0;;;:23;;;;;26095:6;;26079:23;;;;26095:6;26079:15;:23;;;;;;;;;;;;;;;;;;;26809:513;26989:15;;26957:62;;26974:4;;-1:-1:-1;;;;;26989:15:0;27007:11;26957:8;:62::i;:::-;27062:15;;-1:-1:-1;;;;;27062:15:0;:31;27101:9;27134:4;27154:11;27062:15;;27266:7;5918;5945:6;-1:-1:-1;;;;;5945:6:0;;5880:79;27266:7;27062:252;;;;;;-1:-1:-1;;;;;;27062:252:0;;;-1:-1:-1;;;;;9658:15:1;;;27062:252:0;;;9640:34:1;9690:18;;;9683:34;;;;9733:18;;;9726:34;;;;9776:18;;;9769:34;9840:15;;;9819:19;;;9812:44;27288:15:0;9872:19:1;;;9865:35;9574:19;;27062:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26809:513;;:::o;29385:566::-;29488:15;29505:23;29530:12;29544:23;29569:12;29583:18;29605:19;29616:7;29605:10;:19::i;:::-;-1:-1:-1;;;;;29653:15:0;;;;;;:7;:15;;;;;;29487:137;;-1:-1:-1;29487:137:0;;-1:-1:-1;29487:137:0;;-1:-1:-1;29487:137:0;-1:-1:-1;29487:137:0;-1:-1:-1;29487:137:0;-1:-1:-1;29653:28:0;;29673:7;29653:19;:28::i;:::-;-1:-1:-1;;;;;29635:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29710:7;:15;;;;:28;;29730:7;29710:19;:28::i;:::-;-1:-1:-1;;;;;29692:15:0;;;;;;;:7;:15;;;;;;:46;;;;29770:18;;;;;;;:39;;29793:15;29770:22;:39::i;:::-;-1:-1:-1;;;;;29749:18:0;;;;;;:7;:18;;;;;:60;29823:26;29838:10;29823:14;:26::i;:::-;29860:23;29872:4;29878;29860:11;:23::i;:::-;29916:9;-1:-1:-1;;;;;29899:44:0;29908:6;-1:-1:-1;;;;;29899:44:0;;29927:15;29899:44;;;;18888:25:1;;18876:2;18861:18;;18843:76;29899:44:0;;;;;;;;29385:566;;;;;;;;;:::o;28791:586::-;28892:15;28909:23;28934:12;28948:23;28973:12;28987:18;29009:19;29020:7;29009:10;:19::i;:::-;-1:-1:-1;;;;;29057:15:0;;;;;;:7;:15;;;;;;28891:137;;-1:-1:-1;28891:137:0;;-1:-1:-1;28891:137:0;;-1:-1:-1;28891:137:0;-1:-1:-1;28891:137:0;-1:-1:-1;28891:137:0;-1:-1:-1;29057:28:0;;28891:137;29057:19;:28::i;:::-;-1:-1:-1;;;;;29039:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;29117:18;;;;;:7;:18;;;;;:39;;29140:15;29117:22;:39::i;:::-;-1:-1:-1;;;;;29096:18:0;;;;;;:7;:18;;;;;;;;:60;;;;29188:7;:18;;;;:39;;29211:15;29188:22;:39::i;29959:642::-;30062:15;30079:23;30104:12;30118:23;30143:12;30157:18;30179:19;30190:7;30179:10;:19::i;:::-;-1:-1:-1;;;;;30227:15:0;;;;;;:7;:15;;;;;;30061:137;;-1:-1:-1;30061:137:0;;-1:-1:-1;30061:137:0;;-1:-1:-1;30061:137:0;-1:-1:-1;30061:137:0;-1:-1:-1;30061:137:0;-1:-1:-1;30227:28:0;;30247:7;30227:19;:28::i;:::-;-1:-1:-1;;;;;30209:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30284:7;:15;;;;:28;;30304:7;30284:19;:28::i;28281:502::-;28380:15;28397:23;28422:12;28436:23;28461:12;28475:18;28497:19;28508:7;28497:10;:19::i;:::-;-1:-1:-1;;;;;28545:15:0;;;;;;:7;:15;;;;;;28379:137;;-1:-1:-1;28379:137:0;;-1:-1:-1;28379:137:0;;-1:-1:-1;28379:137:0;-1:-1:-1;28379:137:0;-1:-1:-1;28379:137:0;-1:-1:-1;28545:28:0;;28379:137;28545:19;:28::i;33077:160::-;33141:7;33168:61;33213:5;33168:26;33180:13;;33168:7;:11;;:26;;;;:::i;33249:168::-;33319:7;33346:63;33393:5;33346:28;33358:15;;33346:7;:11;;:28;;;;:::i;32710:355::-;32773:19;32796:10;:8;:10::i;:::-;32773:33;-1:-1:-1;32817:18:0;32838:27;:10;32773:33;32838:14;:27::i;:::-;32917:4;32901:22;;;;:7;:22;;;;;;32817:48;;-1:-1:-1;32901:38:0;;32817:48;32901:26;:38::i;:::-;32892:4;32876:22;;;;:7;:22;;;;;;;;:63;;;;32953:11;:26;;;;;;32950:107;;;33035:4;33019:22;;;;:7;:22;;;;;;:38;;33046:10;33019:26;:38::i;:::-;33010:4;32994:22;;;;:7;:22;;;;;:63;32710:355;;;:::o;30609:147::-;30687:7;;:17;;30699:4;30687:11;:17::i;:::-;30677:7;:27;30728:10;;:20;;30743:4;30728:14;:20::i;:::-;30715:10;:33;-1:-1:-1;;30609:147:0:o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;1212:398::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:2;;;1362:6;1354;1347:22;1309:2;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;-1:-1:-1;1532:2:1;1517:18;;1504:32;1545:33;1504:32;1545:33;:::i;:::-;1597:7;1587:17;;;1299:311;;;;;:::o;1615:466::-;1692:6;1700;1708;1761:2;1749:9;1740:7;1736:23;1732:32;1729:2;;;1782:6;1774;1767:22;1729:2;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1719:362;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1719:362::o;2086:938::-;2217:6;2225;2233;2241;2249;2302:2;2290:9;2281:7;2277:23;2273:32;2270:2;;;2323:6;2315;2308:22;2270:2;2367:9;2354:23;2386:31;2411:5;2386:31;:::i;:::-;2436:5;-1:-1:-1;2492:2:1;2477:18;;2464:32;2515:18;2545:14;;;2542:2;;;2577:6;2569;2562:22;2542:2;2621:70;2683:7;2674:6;2663:9;2659:22;2621:70;:::i;:::-;2710:8;;-1:-1:-1;2595:96:1;-1:-1:-1;2798:2:1;2783:18;;2770:32;;-1:-1:-1;2814:16:1;;;2811:2;;;2848:6;2840;2833:22;2811:2;;2892:72;2956:7;2945:8;2934:9;2930:24;2892:72;:::i;:::-;2260:764;;;;-1:-1:-1;2260:764:1;;-1:-1:-1;2983:8:1;;2866:98;2260:764;-1:-1:-1;;;2260:764:1:o;3029:660::-;3133:6;3141;3149;3157;3210:2;3198:9;3189:7;3185:23;3181:32;3178:2;;;3231:6;3223;3216:22;3178:2;3275:9;3262:23;3294:31;3319:5;3294:31;:::i;:::-;3344:5;-1:-1:-1;3400:2:1;3385:18;;3372:32;3427:18;3416:30;;3413:2;;;3464:6;3456;3449:22;3413:2;3508:70;3570:7;3561:6;3550:9;3546:22;3508:70;:::i;:::-;3168:521;;3597:8;;-1:-1:-1;3482:96:1;;3679:2;3664:18;3651:32;;3168:521;-1:-1:-1;;;;3168:521:1:o;3694:325::-;3762:6;3770;3823:2;3811:9;3802:7;3798:23;3794:32;3791:2;;;3844:6;3836;3829:22;3791:2;3888:9;3875:23;3907:31;3932:5;3907:31;:::i;:::-;3957:5;4009:2;3994:18;;;;3981:32;;-1:-1:-1;;;3781:238:1:o;4024:457::-;4110:6;4118;4171:2;4159:9;4150:7;4146:23;4142:32;4139:2;;;4192:6;4184;4177:22;4139:2;4237:9;4224:23;4270:18;4262:6;4259:30;4256:2;;;4307:6;4299;4292:22;4256:2;4351:70;4413:7;4404:6;4393:9;4389:22;4351:70;:::i;:::-;4440:8;;4325:96;;-1:-1:-1;4129:352:1;-1:-1:-1;;;;4129:352:1:o;4486:586::-;4578:6;4586;4594;4647:2;4635:9;4626:7;4622:23;4618:32;4615:2;;;4668:6;4660;4653:22;4615:2;4713:9;4700:23;4746:18;4738:6;4735:30;4732:2;;;4783:6;4775;4768:22;4732:2;4827:70;4889:7;4880:6;4869:9;4865:22;4827:70;:::i;:::-;4916:8;;-1:-1:-1;4801:96:1;-1:-1:-1;;5001:2:1;4986:18;;4973:32;5014:28;4973:32;5014:28;:::i;:::-;5061:5;5051:15;;;4605:467;;;;;:::o;5077:251::-;5133:6;5186:2;5174:9;5165:7;5161:23;5157:32;5154:2;;;5207:6;5199;5192:22;5154:2;5251:9;5238:23;5270:28;5292:5;5270:28;:::i;5333:255::-;5400:6;5453:2;5441:9;5432:7;5428:23;5424:32;5421:2;;;5474:6;5466;5459:22;5421:2;5511:9;5505:16;5530:28;5552:5;5530:28;:::i;5593:319::-;5658:6;5666;5719:2;5707:9;5698:7;5694:23;5690:32;5687:2;;;5740:6;5732;5725:22;5687:2;5784:9;5771:23;5803:28;5825:5;5803:28;:::i;5917:411::-;5998:6;6006;6059:2;6047:9;6038:7;6034:23;6030:32;6027:2;;;6080:6;6072;6065:22;6333:190;6392:6;6445:2;6433:9;6424:7;6420:23;6416:32;6413:2;;;6466:6;6458;6451:22;6413:2;-1:-1:-1;6494:23:1;;6403:120;-1:-1:-1;6403:120:1:o;6528:194::-;6598:6;6651:2;6639:9;6630:7;6626:23;6622:32;6619:2;;;6672:6;6664;6657:22;6619:2;-1:-1:-1;6700:16:1;;6609:113;-1:-1:-1;6609:113:1:o;6727:319::-;6792:6;6800;6853:2;6841:9;6832:7;6828:23;6824:32;6821:2;;;6874:6;6866;6859:22;6821:2;6915:9;6902:23;6892:33;;6975:2;6964:9;6960:18;6947:32;6988:28;7010:5;6988:28;:::i;7051:258::-;7119:6;7127;7180:2;7168:9;7159:7;7155:23;7151:32;7148:2;;;7201:6;7193;7186:22;7148:2;-1:-1:-1;;7229:23:1;;;7299:2;7284:18;;;7271:32;;-1:-1:-1;7138:171:1:o;7314:316::-;7402:6;7410;7418;7471:2;7459:9;7450:7;7446:23;7442:32;7439:2;;;7492:6;7484;7477:22;7439:2;7526:9;7520:16;7510:26;;7576:2;7565:9;7561:18;7555:25;7545:35;;7620:2;7609:9;7605:18;7599:25;7589:35;;7429:201;;;;;:::o;7635:395::-;7721:6;7729;7737;7745;7798:3;7786:9;7777:7;7773:23;7769:33;7766:2;;;7820:6;7812;7805:22;7766:2;-1:-1:-1;;7848:23:1;;;7918:2;7903:18;;7890:32;;-1:-1:-1;7969:2:1;7954:18;;7941:32;;8020:2;8005:18;7992:32;;-1:-1:-1;7756:274:1;-1:-1:-1;7756:274:1:o;8035:463::-;8088:3;8126:5;8120:12;8153:6;8148:3;8141:19;8179:4;8208:2;8203:3;8199:12;8192:19;;8245:2;8238:5;8234:14;8266:3;8278:195;8292:6;8289:1;8286:13;8278:195;;;8357:13;;-1:-1:-1;;;;;8353:39:1;8341:52;;8413:12;;;;8448:15;;;;8389:1;8307:9;8278:195;;;-1:-1:-1;8489:3:1;;8096:402;-1:-1:-1;;;;;8096:402:1:o;10338:603::-;10450:4;10479:2;10508;10497:9;10490:21;10540:6;10534:13;10583:6;10578:2;10567:9;10563:18;10556:34;10608:4;10621:140;10635:6;10632:1;10629:13;10621:140;;;10730:14;;;10726:23;;10720:30;10696:17;;;10715:2;10692:26;10685:66;10650:10;;10621:140;;;10779:6;10776:1;10773:13;10770:2;;;10849:4;10844:2;10835:6;10824:9;10820:22;10816:31;10809:45;10770:2;-1:-1:-1;10925:2:1;10904:15;-1:-1:-1;;10900:29:1;10885:45;;;;10932:2;10881:54;;10459:482;-1:-1:-1;;;10459:482:1:o;15225:356::-;15427:2;15409:21;;;15446:18;;;15439:30;15505:34;15500:2;15485:18;;15478:62;15572:2;15557:18;;15399:182::o;18924:332::-;19131:6;19120:9;19113:25;19174:2;19169;19158:9;19154:18;19147:30;19094:4;19194:56;19246:2;19235:9;19231:18;19223:6;19194:56;:::i;:::-;19186:64;19103:153;-1:-1:-1;;;;19103:153:1:o;19261:582::-;19560:6;19549:9;19542:25;19603:6;19598:2;19587:9;19583:18;19576:34;19646:3;19641:2;19630:9;19626:18;19619:31;19523:4;19667:57;19719:3;19708:9;19704:19;19696:6;19667:57;:::i;:::-;-1:-1:-1;;;;;19760:32:1;;;;19755:2;19740:18;;19733:60;-1:-1:-1;19824:3:1;19809:19;19802:35;19659:65;19532:311;-1:-1:-1;;;19532:311:1:o;20037:128::-;20077:3;20108:1;20104:6;20101:1;20098:13;20095:2;;;20114:18;;:::i;:::-;-1:-1:-1;20150:9:1;;20085:80::o;20170:217::-;20210:1;20236;20226:2;;-1:-1:-1;;;20261:31:1;;20315:4;20312:1;20305:15;20343:4;20268:1;20333:15;20226:2;-1:-1:-1;20372:9:1;;20216:171::o;20392:422::-;20481:1;20524:5;20481:1;20538:270;20559:7;20549:8;20546:21;20538:270;;;20618:4;20614:1;20610:6;20606:17;20600:4;20597:27;20594:2;;;20627:18;;:::i;:::-;20677:7;20667:8;20663:22;20660:2;;;20697:16;;;;20660:2;20776:22;;;;20736:15;;;;20538:270;;;20542:3;20456:358;;;;;:::o;20819:140::-;20877:5;20906:47;20947:4;20937:8;20933:19;20927:4;21013:5;21043:8;21033:2;;-1:-1:-1;21084:1:1;21098:5;;21033:2;21132:4;21122:2;;-1:-1:-1;21169:1:1;21183:5;;21122:2;21214:4;21232:1;21227:59;;;;21300:1;21295:130;;;;21207:218;;21227:59;21257:1;21248:10;;21271:5;;;21295:130;21332:3;21322:8;21319:17;21316:2;;;21339:18;;:::i;:::-;-1:-1:-1;;21395:1:1;21381:16;;21410:5;;21207:218;;21509:2;21499:8;21496:16;21490:3;21484:4;21481:13;21477:36;21471:2;21461:8;21458:16;21453:2;21447:4;21444:12;21440:35;21437:77;21434:2;;;-1:-1:-1;21546:19:1;;;21578:5;;21434:2;21625:34;21650:8;21644:4;21625:34;:::i;:::-;21695:6;21691:1;21687:6;21683:19;21674:7;21671:32;21668:2;;;21706:18;;:::i;:::-;21744:20;;21023:747;-1:-1:-1;;;21023:747:1:o;21775:168::-;21815:7;21881:1;21877;21873:6;21869:14;21866:1;21863:21;21858:1;21851:9;21844:17;21840:45;21837:2;;;21888:18;;:::i;:::-;-1:-1:-1;21928:9:1;;21827:116::o;21948:125::-;21988:4;22016:1;22013;22010:8;22007:2;;;22021:18;;:::i;:::-;-1:-1:-1;22058:9:1;;21997:76::o;22078:380::-;22157:1;22153:12;;;;22200;;;22221:2;;22275:4;22267:6;22263:17;22253:27;;22221:2;22328;22320:6;22317:14;22297:18;22294:38;22291:2;;;22374:10;22369:3;22365:20;22362:1;22355:31;22409:4;22406:1;22399:15;22437:4;22434:1;22427:15;22291:2;;22133:325;;;:::o;22463:135::-;22502:3;-1:-1:-1;;22523:17:1;;22520:2;;;22543:18;;:::i;:::-;-1:-1:-1;22590:1:1;22579:13;;22510:88::o;22603:127::-;22664:10;22659:3;22655:20;22652:1;22645:31;22695:4;22692:1;22685:15;22719:4;22716:1;22709:15;22735:131;-1:-1:-1;;;;;22810:31:1;;22800:42;;22790:2;;22856:1;22853;22846:12;22790:2;22780:86;:::o;22871:118::-;22957:5;22950:13;22943:21;22936:5;22933:32;22923:2;;22979:1;22976;22969:12
Swarm Source
ipfs://8eea7d4742c72379d9ec889bba6e4628756a7cc4f97f1a547047bc7b87f12fe5
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.