Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 TREAT
Holders
85
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GoodDoge
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-09 */ // 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 ); function decimals() external view returns (uint8); } 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; } function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } function unlock() public virtual { require( _previousOwner == msg.sender, "You don't have permission to unlock" ); require(block.timestamp > _lockTime, "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } pragma solidity >=0.5.0; interface IUniswapV2FactoryV5 { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function globalPause() external view returns (bool); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function createPair( address tokenA, address tokenB, uint256 fee ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function toggleGlobalPause() external; } pragma solidity >=0.5.0; interface IUniswapV2PairV5 { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } pragma solidity ^0.8.0; interface IFraxswapPair is IUniswapV2PairV5 { // TWAMM event LongTermSwap0To1( address indexed addr, uint256 orderId, uint256 amount0In, uint256 numberOfTimeIntervals ); event LongTermSwap1To0( address indexed addr, uint256 orderId, uint256 amount1In, uint256 numberOfTimeIntervals ); event CancelLongTermOrder( address indexed addr, uint256 orderId, address sellToken, uint256 unsoldAmount, address buyToken, uint256 purchasedAmount ); event WithdrawProceedsFromLongTermOrder( address indexed addr, uint256 orderId, address indexed proceedToken, uint256 proceeds, bool orderExpired ); function fee() external view returns (uint256); function longTermSwapFrom0To1( uint256 amount0In, uint256 numberOfTimeIntervals ) external returns (uint256 orderId); function longTermSwapFrom1To0( uint256 amount1In, uint256 numberOfTimeIntervals ) external returns (uint256 orderId); function cancelLongTermSwap(uint256 orderId) external; function withdrawProceedsFromLongTermSwap(uint256 orderId) external returns ( bool is_expired, address rewardTkn, uint256 totalReward ); function executeVirtualOrders(uint256 blockTimestamp) external; function getAmountOut(uint256 amountIn, address tokenIn) external view returns (uint256); function getAmountIn(uint256 amountOut, address tokenOut) external view returns (uint256); function orderTimeInterval() external returns (uint256); function getTWAPHistoryLength() external view returns (uint256); function getTwammReserves() external view returns ( uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast, uint112 _twammReserve0, uint112 _twammReserve1, uint256 _fee ); function getReserveAfterTwamm(uint256 blockTimestamp) external view returns ( uint112 _reserve0, uint112 _reserve1, uint256 lastVirtualOrderTimestamp, uint112 _twammReserve0, uint112 _twammReserve1 ); function getNextOrderID() external view returns (uint256); function getOrderIDsForUser(address user) external view returns (uint256[] memory); function getOrderIDsForUserLength(address user) external view returns (uint256); // function getDetailedOrdersForUser(address user, uint256 offset, uint256 limit) external view returns (LongTermOrdersLib.Order[] memory detailed_orders); function twammUpToDate() external view returns (bool); function getTwammState() external view returns ( uint256 token0Rate, uint256 token1Rate, uint256 lastVirtualOrderTimestamp, uint256 orderTimeInterval_rtn, uint256 rewardFactorPool0, uint256 rewardFactorPool1 ); function getTwammSalesRateEnding(uint256 _blockTimestamp) external view returns ( uint256 orderPool0SalesRateEnding, uint256 orderPool1SalesRateEnding ); function getTwammRewardFactor(uint256 _blockTimestamp) external view returns ( uint256 rewardFactorPool0AtTimestamp, uint256 rewardFactorPool1AtTimestamp ); function getTwammOrder(uint256 orderId) external view returns ( uint256 id, uint256 creationTimestamp, uint256 expirationTimestamp, uint256 saleRate, address owner, address sellTokenAddr, address buyTokenAddr ); function getTwammOrderProceedsView(uint256 orderId, uint256 blockTimestamp) external view returns (bool orderExpired, uint256 totalReward); function getTwammOrderProceeds(uint256 orderId) external returns (bool orderExpired, uint256 totalReward); function togglePauseNewSwaps() external; } pragma solidity >=0.6.2; interface IUniswapV2Router01V5 { function factory() external view returns (address); function WETH() external view returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } pragma solidity >=0.6.2; interface IUniswapV2Router02V5 is IUniswapV2Router01V5 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract GoodDoge is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address payable public charityAddress = payable(0x2931560Bb81E0eDce55969c1502EA7190a60E67A); // Charity address address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100 * 10**6 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Good Doge"; string private _symbol = "TREAT"; uint8 private _decimals = 9; uint256 public _taxFee = 6; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 2; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _maxTxAmount = 2 * 10**5 * 10**9; uint256 public _maxWalletToken = 2 * 10**6 * (10**9); uint256 private minimumTokensBeforeSwap = 1 * (10**9); IUniswapV2Router02V5 public immutable uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public buyBackEnabled = false; bool private swapping; bool public _pausing = false; // Anyswap bridge address public underlying; // set of minters, can be this bridge or other bridges mapping(address => bool) public isMinter; mapping (address => bool) public automatedMarketMakerPairs; mapping (address => bool) public _isExcludedMaxTransactionAmount; event RewardLiquidityProviders(uint256 tokenAmount); // event BuyBackEnabledUpdated(bool enabled); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapETHForTokens(uint256 amountIn, address[] path); event SwapTokensForETH(uint256 amountIn, address[] path); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02V5 _uniswapV2Router = IUniswapV2Router02V5( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Pair = IUniswapV2FactoryV5(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; excludeFromMaxTransaction(address(_uniswapV2Router), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[charityAddress] = true; excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); underlying = address(0); emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view override 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, "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, "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 minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } 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 { require(!_isExcluded[account], "Account's already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account], "Account's 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), "Approve from addres(0)"); require(spender != address(0), "Approve to addres(0)"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(!_pausing, "Contract paused"); require(from != address(0), "Transfer from address(0)"); require(to != address(0), "Transfer to address(0)"); require(amount > 0, "Transfer amount < zero"); if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= _maxTxAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= _maxWalletToken, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= _maxTxAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= _maxWalletToken, "Max wallet exceeded"); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= minimumTokensBeforeSwap; if ( !swapping && !inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair && from != charityAddress && to != charityAddress && canSwap ) { swapping = true; uint256 totalTokenSwapFee = contractTokenBalance; if(totalTokenSwapFee > minimumTokensBeforeSwap * 100000){ totalTokenSwapFee = minimumTokensBeforeSwap * 100000; } uint256 liquidTokens = calculateLiquidityFee(totalTokenSwapFee); swapAndLiquify(liquidTokens); uint256 tokenForCharity = totalTokenSwapFee.sub(liquidTokens); swapTokens(tokenForCharity); swapping = false; } bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 tokens) private lockTheSwap { // split the contract balance into halves uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokens(uint256 tokens) private lockTheSwap { uint256 initialBalance = address(this).balance; swapTokensForEth(tokens); uint256 transferredBalance = address(this).balance.sub(initialBalance); //Send to Charity address transferToAddressETH(charityAddress, transferredBalance); } 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 swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: amount }( 0, // accept any amount of Tokens path, deadAddress, // Burn address block.timestamp.add(300) ); emit SwapETHForTokens(amount, 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 { if (!takeFee) removeAllFee(); 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) restoreAllFee(); } 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); _takeTaxFee(tFee); _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); _takeTaxFee(tFee); _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); _takeTaxFee(tFee); _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); _takeTaxFee(tFee); _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 _takeTaxFee(uint256 tFee) private { uint256 currentRate = _getRate(); uint256 rFee = tFee.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rFee); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(rFee); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner { _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner { _liquidityFee = liquidityFee; } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner { _maxTxAmount = maxTxAmount; } function setMaxWalletToken(uint256 maxWalletToken) external onlyOwner { _maxWalletToken = maxWalletToken; } function setNumTokensToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner { minimumTokensBeforeSwap = _minimumTokensBeforeSwap; } function setcharityAddress(address _charityAddress) external onlyOwner { charityAddress = payable(_charityAddress); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } function setPausedContract(bool pause) public onlyOwner { _pausing = pause; } function getETHBalance(address account) public view returns (uint256) { return address(account).balance; } function getContractBalance() public view returns (uint256) { return balanceOf(address(this)); } // Anyswap modifier onlyAuth() { require(isMinter[msg.sender], "AW: FORBIDDEN"); _; } function setMinter(address _auth, bool _enable) public onlyOwner { require(_auth != address(0), "AW: address(0)"); isMinter[_auth] = _enable; excludeFromMaxTransaction(_auth, _enable); } // // No time delay revoke minter emergency function function revokeMinter(address _auth) public onlyOwner { isMinter[_auth] = false; excludeFromMaxTransaction(_auth, false); } // // No time delay revoke minter emergency function function setBridgerAddress(address _underlying) public onlyOwner { underlying = _underlying; excludeFromMaxTransaction(underlying, true); } function mint(address to, uint256 amount) external onlyAuth returns (bool) { require(to != address(0), "Mint to address(0)"); uint256 balance = balanceOf(underlying); require(balance >= amount, "Not enough token to bridge"); _tokenTransfer(address(underlying), to, amount, false); return true; } function burn(address from, uint256 amount) external onlyAuth returns (bool) { require(from != address(0), "Burn address(0)"); uint256 balance = balanceOf(from); require(balance >= amount, "Exceeds balance"); _tokenTransfer(from, address(underlying), amount, false); return true; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } //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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pausing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_underlying","type":"address"}],"name":"setBridgerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"pause","type":"bool"}],"name":"setPausedContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_charityAddress","type":"address"}],"name":"setcharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02V5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600380546001600160a01b031916732931560bb81e0edce55969c1502ea7190a60e67a1790556ddead00000000000000000000000060805267016345785d8a0000600a8190556200005890600019620006a5565b620000669060001962000642565b600b5560408051808201909152600980825268476f6f6420446f676560b81b60209092019182526200009b91600d916200056a565b5060408051808201909152600580825264151491505560da1b6020909201918252620000ca91600e916200056a565b50600f805460ff19166009179055600660108190556011556002601281905560135565b5e620f4800060145566071afd498d0000601555633b9aca006016556017805463ff00ffff60a81b1916600160a81b1790553480156200012c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b543360009081526004602081815260409283902093909355815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a0155938181019391829003018186803b158015620001ce57600080fd5b505afa158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000209919062000610565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025257600080fd5b505afa15801562000267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028d919062000610565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002d657600080fd5b505af1158015620002eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000311919062000610565b601780546001600160a01b0319166001600160a01b0392909216919091179055606081901b6001600160601b03191660a052620003508160016200048c565b6200035d3060016200048c565b60175462000376906001600160a01b031660016200048c565b6017546200038f906001600160a01b0316600162000516565b600160076000620003a86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260079093528183208054851660019081179091556003549091168352912080549092161790556200041e620004166000546001600160a01b031690565b60016200048c565b6200042b3060016200048c565b6200043a61dead60016200048c565b601880546001600160a01b0319169055600a5460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350620006c8565b6000546001600160a01b03163314620004eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b828054620005789062000668565b90600052602060002090601f0160209004810192826200059c5760008555620005e7565b82601f10620005b757805160ff1916838001178555620005e7565b82800160010185558215620005e7579182015b82811115620005e7578251825591602001919060010190620005ca565b50620005f5929150620005f9565b5090565b5b80821115620005f55760008155600101620005fa565b6000602082840312156200062357600080fd5b81516001600160a01b03811681146200063b57600080fd5b9392505050565b6000828210156200066357634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200067d57607f821691505b602082108114156200069f57634e487b7160e01b600052602260045260246000fd5b50919050565b600082620006c357634e487b7160e01b600052601260045260246000fd5b500690565b60805160601c60a05160601c6133e062000717600039600081816104a501528181612a7801528181612b4001528181612b7c01528181612c2f0152612c560152600061052601526133e06000f3fe60806040526004361061037a5760003560e01c80636f9fb98a116101d1578063a457c2d711610102578063cf456ae7116100a0578063e640e3211161006f578063e640e32114610aab578063ea2f0b3714610acb578063ec28438a14610aeb578063f2fde38b14610b0b57600080fd5b8063cf456ae714610a05578063cfbd488514610a25578063dd46706414610a45578063dd62ed3e14610a6557600080fd5b8063aa271e1a116100dc578063aa271e1a14610965578063afcf2fc414610995578063b62496f5146109b5578063c49b9a80146109e557600080fd5b8063a457c2d714610910578063a69df4b514610930578063a9059cbb1461094557600080fd5b80638da5cb5b1161016f57806395d89b411161014957806395d89b41146108a65780639a7a23d6146108bb5780639dc29fac146108db578063a073d37f146108fb57600080fd5b80638da5cb5b146108485780638ee88c531461086657806391d55f411461088657600080fd5b80637571336a116101ab5780637571336a146107c357806378109e54146107e35780637d1db4a5146107f957806388f820201461080f57600080fd5b80636f9fb98a1461077957806370a082311461078e578063715018a6146107ae57600080fd5b806339509351116102ab57806349bd5a5e116102495780635342acb4116102235780635342acb4146106e95780636053a0e3146107225780636bc87c3a146107435780636f307dc31461075957600080fd5b806349bd5a5e146106885780634a74bb02146106a857806352390c02146106c957600080fd5b80633bb66a7b116102855780633bb66a7b146106005780633c4f0d6b1461062857806340c10f1914610648578063437823ec1461066857600080fd5b806339509351146105aa5780633aea7920146105ca5780633b124fe7146105ea57600080fd5b80631694505e1161031857806327c8f835116102f257806327c8f835146105145780632d83811914610548578063313ce567146105685780633685d4191461058a57600080fd5b80631694505e1461049357806318160ddd146104df57806323b872dd146104f457600080fd5b80630843fd16116103545780630843fd16146103f3578063095ea7b31461042457806310d5de531461044457806313114a9d1461047457600080fd5b8063061c82d01461038657806306fdde03146103a8578063081fdcc7146103d357600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a13660046130da565b610b2b565b005b3480156103b457600080fd5b506103bd610b63565b6040516103ca9190613165565b60405180910390f35b3480156103df57600080fd5b506103a66103ee366004612faa565b610bf5565b3480156103ff57600080fd5b5060175461041490600160c01b900460ff1681565b60405190151581526020016103ca565b34801561043057600080fd5b5061041461043f366004613093565b610c41565b34801561045057600080fd5b5061041461045f366004612faa565b601b6020526000908152604090205460ff1681565b34801561048057600080fd5b50600c545b6040519081526020016103ca565b34801561049f57600080fd5b506104c77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ca565b3480156104eb57600080fd5b50600a54610485565b34801561050057600080fd5b5061041461050f36600461301d565b610c58565b34801561052057600080fd5b506104c77f000000000000000000000000000000000000000000000000000000000000000081565b34801561055457600080fd5b506104856105633660046130da565b610cc1565b34801561057457600080fd5b50600f5460405160ff90911681526020016103ca565b34801561059657600080fd5b506103a66105a5366004612faa565b610d45565b3480156105b657600080fd5b506104146105c5366004613093565b610efc565b3480156105d657600080fd5b506103a66105e53660046130bf565b610f32565b3480156105f657600080fd5b5061048560105481565b34801561060c57600080fd5b5061048561061b366004612faa565b6001600160a01b03163190565b34801561063457600080fd5b506103a6610643366004612faa565b610f7a565b34801561065457600080fd5b50610414610663366004613093565b610fd0565b34801561067457600080fd5b506103a6610683366004612faa565b6110ed565b34801561069457600080fd5b506017546104c7906001600160a01b031681565b3480156106b457600080fd5b5060175461041490600160a81b900460ff1681565b3480156106d557600080fd5b506103a66106e4366004612faa565b61113b565b3480156106f557600080fd5b50610414610704366004612faa565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561072e57600080fd5b5060175461041490600160b01b900460ff1681565b34801561074f57600080fd5b5061048560125481565b34801561076557600080fd5b506018546104c7906001600160a01b031681565b34801561078557600080fd5b5061048561128e565b34801561079a57600080fd5b506104856107a9366004612faa565b61129e565b3480156107ba57600080fd5b506103a66112fd565b3480156107cf57600080fd5b506103a66107de36600461305e565b61135f565b3480156107ef57600080fd5b5061048560155481565b34801561080557600080fd5b5061048560145481565b34801561081b57600080fd5b5061041461082a366004612faa565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561085457600080fd5b506000546001600160a01b03166104c7565b34801561087257600080fd5b506103a66108813660046130da565b6113b4565b34801561089257600080fd5b506103a66108a13660046130da565b6113e3565b3480156108b257600080fd5b506103bd611412565b3480156108c757600080fd5b506103a66108d636600461305e565b611421565b3480156108e757600080fd5b506104146108f6366004613093565b6114d9565b34801561090757600080fd5b50601654610485565b34801561091c57600080fd5b5061041461092b366004613093565b6115d9565b34801561093c57600080fd5b506103a6611656565b34801561095157600080fd5b50610414610960366004613093565b61175c565b34801561097157600080fd5b50610414610980366004612faa565b60196020526000908152604090205460ff1681565b3480156109a157600080fd5b506003546104c7906001600160a01b031681565b3480156109c157600080fd5b506104146109d0366004612faa565b601a6020526000908152604090205460ff1681565b3480156109f157600080fd5b506103a6610a003660046130bf565b611769565b348015610a1157600080fd5b506103a6610a2036600461305e565b6117eb565b348015610a3157600080fd5b506103a6610a40366004612faa565b61188a565b348015610a5157600080fd5b506103a6610a603660046130da565b6118df565b348015610a7157600080fd5b50610485610a80366004612fe4565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610ab757600080fd5b506103a6610ac63660046130da565b611964565b348015610ad757600080fd5b506103a6610ae6366004612faa565b611993565b348015610af757600080fd5b506103a6610b063660046130da565b6119de565b348015610b1757600080fd5b506103a6610b26366004612faa565b611a0d565b6000546001600160a01b03163314610b5e5760405162461bcd60e51b8152600401610b55906131ba565b60405180910390fd5b601055565b6060600d8054610b72906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9e906132bc565b8015610beb5780601f10610bc057610100808354040283529160200191610beb565b820191906000526020600020905b815481529060010190602001808311610bce57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610c1f5760405162461bcd60e51b8152600401610b55906131ba565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c4e338484611ae5565b5060015b92915050565b6000610c65848484611be2565b610cb78433610cb28560405180606001604052806021815260200161336a602191396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612159565b611ae5565b5060019392505050565b6000600b54821115610d285760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b55565b6000610d32612193565b9050610d3e83826121b6565b9392505050565b6000546001600160a01b03163314610d6f5760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03811660009081526008602052604090205460ff16610dd75760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74277320616c7265616479206578636c756465640000000000006044820152606401610b55565b60005b600954811015610ef857816001600160a01b031660098281548110610e0157610e0161333e565b6000918252602090912001546001600160a01b03161415610ee65760098054610e2c906001906132a5565b81548110610e3c57610e3c61333e565b600091825260209091200154600980546001600160a01b039092169183908110610e6857610e6861333e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610ec057610ec0613328565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ef0816132f7565b915050610dda565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610c4e918590610cb290866121f8565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610b55906131ba565b60178054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b03163314610fa45760405162461bcd60e51b8152600401610b55906131ba565b601880546001600160a01b0319166001600160a01b038316908117909155610fcd90600161135f565b50565b3360009081526019602052604081205460ff1661101f5760405162461bcd60e51b815260206004820152600d60248201526c20ab9d102327a92124a22222a760991b6044820152606401610b55565b6001600160a01b03831661106a5760405162461bcd60e51b81526020600482015260126024820152714d696e7420746f206164647265737328302960701b6044820152606401610b55565b601854600090611082906001600160a01b031661129e565b9050828110156110d45760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f75676820746f6b656e20746f206272696467650000000000006044820152606401610b55565b601854610cb7906001600160a01b031685856000612257565b6000546001600160a01b031633146111175760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146111655760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03811660009081526008602052604090205460ff16156111ce5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74277320616c7265616479206578636c756465640000000000006044820152606401610b55565b6001600160a01b03811660009081526004602052604090205415611228576001600160a01b03811660009081526004602052604090205461120e90610cc1565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b60006112993061129e565b905090565b6001600160a01b03811660009081526008602052604081205460ff16156112db57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610c5290610cc1565b6000546001600160a01b031633146113275760405162461bcd60e51b8152600401610b55906131ba565b600080546040516001600160a01b039091169060008051602061338b833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113de5760405162461bcd60e51b8152600401610b55906131ba565b601255565b6000546001600160a01b0316331461140d5760405162461bcd60e51b8152600401610b55906131ba565b601555565b6060600e8054610b72906132bc565b6000546001600160a01b0316331461144b5760405162461bcd60e51b8152600401610b55906131ba565b6017546001600160a01b03838116911614156114cf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b55565b610ef88282612382565b3360009081526019602052604081205460ff166115285760405162461bcd60e51b815260206004820152600d60248201526c20ab9d102327a92124a22222a760991b6044820152606401610b55565b6001600160a01b0383166115705760405162461bcd60e51b815260206004820152600f60248201526e4275726e206164647265737328302960881b6044820152606401610b55565b600061157b8461129e565b9050828110156115bf5760405162461bcd60e51b815260206004820152600f60248201526e457863656564732062616c616e636560881b6044820152606401610b55565b601854610cb79085906001600160a01b0316856000612257565b6000610c4e3384610cb2856040518060400160405280601e81526020017f44656372656173656420616c6c6f77616e63652062656c6f77207a65726f0000815250600660006116253390565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612159565b6001546001600160a01b031633146116bc5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b55565b600254421161170d5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b55565b600154600080546040516001600160a01b03938416939091169160008051602061338b83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c4e338484611be2565b6000546001600160a01b031633146117935760405162461bcd60e51b8152600401610b55906131ba565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117e090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118155760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03821661185c5760405162461bcd60e51b815260206004820152600e60248201526d41573a206164647265737328302960901b6044820152606401610b55565b6001600160a01b0382166000908152601960205260409020805460ff1916821515179055610ef8828261135f565b6000546001600160a01b031633146118b45760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b0381166000908152601960205260408120805460ff19169055610fcd90829061135f565b6000546001600160a01b031633146119095760405162461bcd60e51b8152600401610b55906131ba565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611938814261324c565b600255600080546040516001600160a01b039091169060008051602061338b833981519152908390a350565b6000546001600160a01b0316331461198e5760405162461bcd60e51b8152600401610b55906131ba565b601655565b6000546001600160a01b031633146119bd5760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314611a085760405162461bcd60e51b8152600401610b55906131ba565b601455565b6000546001600160a01b03163314611a375760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b038116611a9c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b55565b600080546040516001600160a01b038085169392169160008051602061338b83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b345760405162461bcd60e51b8152602060048201526016602482015275417070726f76652066726f6d2061646472657328302960501b6044820152606401610b55565b6001600160a01b038216611b815760405162461bcd60e51b8152602060048201526014602482015273417070726f766520746f2061646472657328302960601b6044820152606401610b55565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601754600160c01b900460ff1615611c2e5760405162461bcd60e51b815260206004820152600f60248201526e10dbdb9d1c9858dd081c185d5cd959608a1b6044820152606401610b55565b6001600160a01b038316611c845760405162461bcd60e51b815260206004820152601860248201527f5472616e736665722066726f6d206164647265737328302900000000000000006044820152606401610b55565b6001600160a01b038216611cd35760405162461bcd60e51b81526020600482015260166024820152755472616e7366657220746f206164647265737328302960501b6044820152606401610b55565b60008111611d1c5760405162461bcd60e51b81526020600482015260166024820152755472616e7366657220616d6f756e74203c207a65726f60501b6044820152606401610b55565b6000546001600160a01b03848116911614801590611d4857506000546001600160a01b03838116911614155b8015611d5c57506001600160a01b03821615155b8015611d7357506001600160a01b03821661dead14155b8015611d895750601754600160b81b900460ff16155b15611fd4576001600160a01b0383166000908152601a602052604090205460ff168015611dcf57506001600160a01b0382166000908152601b602052604090205460ff16155b15611ea357601454811115611e445760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b55565b601554611e508361129e565b611e5a908361324c565b1115611e9e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b55565b611fd4565b6001600160a01b0382166000908152601a602052604090205460ff168015611ee457506001600160a01b0383166000908152601b602052604090205460ff16155b15611f5a57601454811115611e9e5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b55565b6001600160a01b0382166000908152601b602052604090205460ff16611fd457601554611f868361129e565b611f90908361324c565b1115611fd45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b55565b6000611fdf3061129e565b60165460175491925082101590600160b81b900460ff1615801561200d5750601754600160a01b900460ff16155b80156120225750601754600160a81b900460ff165b801561203b57506017546001600160a01b038581169116145b801561205557506003546001600160a01b03868116911614155b801561206f57506003546001600160a01b03858116911614155b80156120785750805b156120fa576017805460ff60b81b1916600160b81b17905560165482906120a290620186a0613286565b8111156120bc576016546120b990620186a0613286565b90505b60006120c7826123d6565b90506120d2816123f8565b60006120de838361249f565b90506120e9816124e1565b50506017805460ff60b81b19169055505b6001600160a01b03851660009081526007602052604090205460019060ff168061213c57506001600160a01b03851660009081526007602052604090205460ff165b15612145575060005b61215186868684612257565b505050505050565b6000818484111561217d5760405162461bcd60e51b8152600401610b559190613165565b50600061218a84866132a5565b95945050505050565b60008060006121a0612535565b90925090506121af82826121b6565b9250505090565b6000610d3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126b7565b600080612205838561324c565b905083811015610d3e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b55565b80612264576122646126e5565b6001600160a01b03841660009081526008602052604090205460ff1680156122a557506001600160a01b03831660009081526008602052604090205460ff16155b156122ba576122b5848484612713565b612366565b6001600160a01b03841660009081526008602052604090205460ff161580156122fb57506001600160a01b03831660009081526008602052604090205460ff165b1561230b576122b5848484612842565b6001600160a01b03841660009081526008602052604090205460ff16801561234b57506001600160a01b03831660009081526008602052604090205460ff165b1561235b576122b58484846128eb565b61236684848461295e565b8061237c5761237c601154601055601354601255565b50505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000610c5260646123f2601254856129a290919063ffffffff16565b906121b6565b6017805460ff60a01b1916600160a01b17905560006124188260026121b6565b90506000612426838361249f565b90504761243283612a21565b600061243e478361249f565b905061244a8382612c29565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506017805460ff60a01b19169055505050565b6000610d3e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612159565b6017805460ff60a01b1916600160a01b179055476124fe82612a21565b600061250a478361249f565b600354909150612523906001600160a01b031682612d3e565b50506017805460ff60a01b1916905550565b600b54600a546000918291825b600954811015612687578260046000600984815481106125645761256461333e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806125cf57508160056000600984815481106125a8576125a861333e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156125e557600b54600a54945094505050509091565b61262b60046000600984815481106125ff576125ff61333e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061249f565b925061267360056000600984815481106126475761264761333e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061249f565b91508061267f816132f7565b915050612542565b50600a54600b54612697916121b6565b8210156126ae57600b54600a549350935050509091565b90939092509050565b600081836126d85760405162461bcd60e51b8152600401610b559190613165565b50600061218a8486613264565b6010541580156126f55750601254155b156126fc57565b601080546011556012805460135560009182905555565b60008060008060008061272587612d79565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612757908861249f565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612786908761249f565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546127b590866121f8565b6001600160a01b0389166000908152600460205260409020556127d781612dc8565b6127e082612e50565b6127ea8483612ec3565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161282f91815260200190565b60405180910390a3505050505050505050565b60008060008060008061285487612d79565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612886908761249f565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546128bc90846121f8565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546127b590866121f8565b6000806000806000806128fd87612d79565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061292f908861249f565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612886908761249f565b60008060008060008061297087612d79565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612786908761249f565b6000826129b157506000610c52565b60006129bd8385613286565b9050826129ca8583613264565b14610d3e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b55565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a5657612a5661333e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612acf57600080fd5b505afa158015612ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b079190612fc7565b81600181518110612b1a57612b1a61333e565b60200260200101906001600160a01b031690816001600160a01b031681525050612b65307f000000000000000000000000000000000000000000000000000000000000000084611ae5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612bba908590600090869030904290600401613210565b600060405180830381600087803b158015612bd457600080fd5b505af1158015612be8573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612c1d9291906131ef565b60405180910390a15050565b612c54307f000000000000000000000000000000000000000000000000000000000000000084611ae5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080612c9b6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612cfe57600080fd5b505af1158015612d12573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d3791906130f3565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612d74573d6000803e3d6000fd5b505050565b6000806000806000806000806000612d908a612ee7565b9250925092506000806000612dae8d8686612da9612193565b612f29565b919f909e50909c50959a5093985091965092945050505050565b6000612dd2612193565b90506000612de083836129a2565b30600090815260046020526040902054909150612dfd90826121f8565b3060009081526004602090815260408083209390935560089052205460ff1615612d745730600090815260056020526040902054612e3b90846121f8565b30600090815260056020526040902055505050565b6000612e5a612193565b90506000612e6883836129a2565b30600090815260046020526040902054909150612e8590826121f8565b3060009081526004602090815260408083209390935560089052205460ff1615612d745730600090815260056020526040902054612e3b90826121f8565b600b54612ed0908361249f565b600b55600c54612ee090826121f8565b600c555050565b600080600080612ef685612f79565b90506000612f03866123d6565b90506000612f1b82612f15898661249f565b9061249f565b979296509094509092505050565b6000808080612f3888866129a2565b90506000612f4688876129a2565b90506000612f5488886129a2565b90506000612f6682612f15868661249f565b939b939a50919850919650505050505050565b6000610c5260646123f2601054856129a290919063ffffffff16565b80358015158114612fa557600080fd5b919050565b600060208284031215612fbc57600080fd5b8135610d3e81613354565b600060208284031215612fd957600080fd5b8151610d3e81613354565b60008060408385031215612ff757600080fd5b823561300281613354565b9150602083013561301281613354565b809150509250929050565b60008060006060848603121561303257600080fd5b833561303d81613354565b9250602084013561304d81613354565b929592945050506040919091013590565b6000806040838503121561307157600080fd5b823561307c81613354565b915061308a60208401612f95565b90509250929050565b600080604083850312156130a657600080fd5b82356130b181613354565b946020939093013593505050565b6000602082840312156130d157600080fd5b610d3e82612f95565b6000602082840312156130ec57600080fd5b5035919050565b60008060006060848603121561310857600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b8381101561315a5781516001600160a01b031687529582019590820190600101613135565b509495945050505050565b600060208083528351808285015260005b8181101561319257858101830151858201604001528201613176565b818111156131a4576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006132086040830184613121565b949350505050565b85815284602082015260a06040820152600061322f60a0830186613121565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561325f5761325f613312565b500190565b60008261328157634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156132a0576132a0613312565b500290565b6000828210156132b7576132b7613312565b500390565b600181811c908216806132d057607f821691505b602082108114156132f157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561330b5761330b613312565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610fcd57600080fdfe7472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212207c88aa75ae29bc1147a587b30d162622f943f05edaed0ea66758b8dafc4fd7e964736f6c63430008070033
Deployed Bytecode
0x60806040526004361061037a5760003560e01c80636f9fb98a116101d1578063a457c2d711610102578063cf456ae7116100a0578063e640e3211161006f578063e640e32114610aab578063ea2f0b3714610acb578063ec28438a14610aeb578063f2fde38b14610b0b57600080fd5b8063cf456ae714610a05578063cfbd488514610a25578063dd46706414610a45578063dd62ed3e14610a6557600080fd5b8063aa271e1a116100dc578063aa271e1a14610965578063afcf2fc414610995578063b62496f5146109b5578063c49b9a80146109e557600080fd5b8063a457c2d714610910578063a69df4b514610930578063a9059cbb1461094557600080fd5b80638da5cb5b1161016f57806395d89b411161014957806395d89b41146108a65780639a7a23d6146108bb5780639dc29fac146108db578063a073d37f146108fb57600080fd5b80638da5cb5b146108485780638ee88c531461086657806391d55f411461088657600080fd5b80637571336a116101ab5780637571336a146107c357806378109e54146107e35780637d1db4a5146107f957806388f820201461080f57600080fd5b80636f9fb98a1461077957806370a082311461078e578063715018a6146107ae57600080fd5b806339509351116102ab57806349bd5a5e116102495780635342acb4116102235780635342acb4146106e95780636053a0e3146107225780636bc87c3a146107435780636f307dc31461075957600080fd5b806349bd5a5e146106885780634a74bb02146106a857806352390c02146106c957600080fd5b80633bb66a7b116102855780633bb66a7b146106005780633c4f0d6b1461062857806340c10f1914610648578063437823ec1461066857600080fd5b806339509351146105aa5780633aea7920146105ca5780633b124fe7146105ea57600080fd5b80631694505e1161031857806327c8f835116102f257806327c8f835146105145780632d83811914610548578063313ce567146105685780633685d4191461058a57600080fd5b80631694505e1461049357806318160ddd146104df57806323b872dd146104f457600080fd5b80630843fd16116103545780630843fd16146103f3578063095ea7b31461042457806310d5de531461044457806313114a9d1461047457600080fd5b8063061c82d01461038657806306fdde03146103a8578063081fdcc7146103d357600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a13660046130da565b610b2b565b005b3480156103b457600080fd5b506103bd610b63565b6040516103ca9190613165565b60405180910390f35b3480156103df57600080fd5b506103a66103ee366004612faa565b610bf5565b3480156103ff57600080fd5b5060175461041490600160c01b900460ff1681565b60405190151581526020016103ca565b34801561043057600080fd5b5061041461043f366004613093565b610c41565b34801561045057600080fd5b5061041461045f366004612faa565b601b6020526000908152604090205460ff1681565b34801561048057600080fd5b50600c545b6040519081526020016103ca565b34801561049f57600080fd5b506104c77f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ca565b3480156104eb57600080fd5b50600a54610485565b34801561050057600080fd5b5061041461050f36600461301d565b610c58565b34801561052057600080fd5b506104c77f000000000000000000000000000000000000000000000000000000000000dead81565b34801561055457600080fd5b506104856105633660046130da565b610cc1565b34801561057457600080fd5b50600f5460405160ff90911681526020016103ca565b34801561059657600080fd5b506103a66105a5366004612faa565b610d45565b3480156105b657600080fd5b506104146105c5366004613093565b610efc565b3480156105d657600080fd5b506103a66105e53660046130bf565b610f32565b3480156105f657600080fd5b5061048560105481565b34801561060c57600080fd5b5061048561061b366004612faa565b6001600160a01b03163190565b34801561063457600080fd5b506103a6610643366004612faa565b610f7a565b34801561065457600080fd5b50610414610663366004613093565b610fd0565b34801561067457600080fd5b506103a6610683366004612faa565b6110ed565b34801561069457600080fd5b506017546104c7906001600160a01b031681565b3480156106b457600080fd5b5060175461041490600160a81b900460ff1681565b3480156106d557600080fd5b506103a66106e4366004612faa565b61113b565b3480156106f557600080fd5b50610414610704366004612faa565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561072e57600080fd5b5060175461041490600160b01b900460ff1681565b34801561074f57600080fd5b5061048560125481565b34801561076557600080fd5b506018546104c7906001600160a01b031681565b34801561078557600080fd5b5061048561128e565b34801561079a57600080fd5b506104856107a9366004612faa565b61129e565b3480156107ba57600080fd5b506103a66112fd565b3480156107cf57600080fd5b506103a66107de36600461305e565b61135f565b3480156107ef57600080fd5b5061048560155481565b34801561080557600080fd5b5061048560145481565b34801561081b57600080fd5b5061041461082a366004612faa565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561085457600080fd5b506000546001600160a01b03166104c7565b34801561087257600080fd5b506103a66108813660046130da565b6113b4565b34801561089257600080fd5b506103a66108a13660046130da565b6113e3565b3480156108b257600080fd5b506103bd611412565b3480156108c757600080fd5b506103a66108d636600461305e565b611421565b3480156108e757600080fd5b506104146108f6366004613093565b6114d9565b34801561090757600080fd5b50601654610485565b34801561091c57600080fd5b5061041461092b366004613093565b6115d9565b34801561093c57600080fd5b506103a6611656565b34801561095157600080fd5b50610414610960366004613093565b61175c565b34801561097157600080fd5b50610414610980366004612faa565b60196020526000908152604090205460ff1681565b3480156109a157600080fd5b506003546104c7906001600160a01b031681565b3480156109c157600080fd5b506104146109d0366004612faa565b601a6020526000908152604090205460ff1681565b3480156109f157600080fd5b506103a6610a003660046130bf565b611769565b348015610a1157600080fd5b506103a6610a2036600461305e565b6117eb565b348015610a3157600080fd5b506103a6610a40366004612faa565b61188a565b348015610a5157600080fd5b506103a6610a603660046130da565b6118df565b348015610a7157600080fd5b50610485610a80366004612fe4565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610ab757600080fd5b506103a6610ac63660046130da565b611964565b348015610ad757600080fd5b506103a6610ae6366004612faa565b611993565b348015610af757600080fd5b506103a6610b063660046130da565b6119de565b348015610b1757600080fd5b506103a6610b26366004612faa565b611a0d565b6000546001600160a01b03163314610b5e5760405162461bcd60e51b8152600401610b55906131ba565b60405180910390fd5b601055565b6060600d8054610b72906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9e906132bc565b8015610beb5780601f10610bc057610100808354040283529160200191610beb565b820191906000526020600020905b815481529060010190602001808311610bce57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610c1f5760405162461bcd60e51b8152600401610b55906131ba565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c4e338484611ae5565b5060015b92915050565b6000610c65848484611be2565b610cb78433610cb28560405180606001604052806021815260200161336a602191396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612159565b611ae5565b5060019392505050565b6000600b54821115610d285760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b55565b6000610d32612193565b9050610d3e83826121b6565b9392505050565b6000546001600160a01b03163314610d6f5760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03811660009081526008602052604090205460ff16610dd75760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74277320616c7265616479206578636c756465640000000000006044820152606401610b55565b60005b600954811015610ef857816001600160a01b031660098281548110610e0157610e0161333e565b6000918252602090912001546001600160a01b03161415610ee65760098054610e2c906001906132a5565b81548110610e3c57610e3c61333e565b600091825260209091200154600980546001600160a01b039092169183908110610e6857610e6861333e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610ec057610ec0613328565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ef0816132f7565b915050610dda565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610c4e918590610cb290866121f8565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610b55906131ba565b60178054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b03163314610fa45760405162461bcd60e51b8152600401610b55906131ba565b601880546001600160a01b0319166001600160a01b038316908117909155610fcd90600161135f565b50565b3360009081526019602052604081205460ff1661101f5760405162461bcd60e51b815260206004820152600d60248201526c20ab9d102327a92124a22222a760991b6044820152606401610b55565b6001600160a01b03831661106a5760405162461bcd60e51b81526020600482015260126024820152714d696e7420746f206164647265737328302960701b6044820152606401610b55565b601854600090611082906001600160a01b031661129e565b9050828110156110d45760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f75676820746f6b656e20746f206272696467650000000000006044820152606401610b55565b601854610cb7906001600160a01b031685856000612257565b6000546001600160a01b031633146111175760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146111655760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03811660009081526008602052604090205460ff16156111ce5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74277320616c7265616479206578636c756465640000000000006044820152606401610b55565b6001600160a01b03811660009081526004602052604090205415611228576001600160a01b03811660009081526004602052604090205461120e90610cc1565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b60006112993061129e565b905090565b6001600160a01b03811660009081526008602052604081205460ff16156112db57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610c5290610cc1565b6000546001600160a01b031633146113275760405162461bcd60e51b8152600401610b55906131ba565b600080546040516001600160a01b039091169060008051602061338b833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113de5760405162461bcd60e51b8152600401610b55906131ba565b601255565b6000546001600160a01b0316331461140d5760405162461bcd60e51b8152600401610b55906131ba565b601555565b6060600e8054610b72906132bc565b6000546001600160a01b0316331461144b5760405162461bcd60e51b8152600401610b55906131ba565b6017546001600160a01b03838116911614156114cf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b55565b610ef88282612382565b3360009081526019602052604081205460ff166115285760405162461bcd60e51b815260206004820152600d60248201526c20ab9d102327a92124a22222a760991b6044820152606401610b55565b6001600160a01b0383166115705760405162461bcd60e51b815260206004820152600f60248201526e4275726e206164647265737328302960881b6044820152606401610b55565b600061157b8461129e565b9050828110156115bf5760405162461bcd60e51b815260206004820152600f60248201526e457863656564732062616c616e636560881b6044820152606401610b55565b601854610cb79085906001600160a01b0316856000612257565b6000610c4e3384610cb2856040518060400160405280601e81526020017f44656372656173656420616c6c6f77616e63652062656c6f77207a65726f0000815250600660006116253390565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612159565b6001546001600160a01b031633146116bc5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b55565b600254421161170d5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b55565b600154600080546040516001600160a01b03938416939091169160008051602061338b83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c4e338484611be2565b6000546001600160a01b031633146117935760405162461bcd60e51b8152600401610b55906131ba565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117e090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118155760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03821661185c5760405162461bcd60e51b815260206004820152600e60248201526d41573a206164647265737328302960901b6044820152606401610b55565b6001600160a01b0382166000908152601960205260409020805460ff1916821515179055610ef8828261135f565b6000546001600160a01b031633146118b45760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b0381166000908152601960205260408120805460ff19169055610fcd90829061135f565b6000546001600160a01b031633146119095760405162461bcd60e51b8152600401610b55906131ba565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611938814261324c565b600255600080546040516001600160a01b039091169060008051602061338b833981519152908390a350565b6000546001600160a01b0316331461198e5760405162461bcd60e51b8152600401610b55906131ba565b601655565b6000546001600160a01b031633146119bd5760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314611a085760405162461bcd60e51b8152600401610b55906131ba565b601455565b6000546001600160a01b03163314611a375760405162461bcd60e51b8152600401610b55906131ba565b6001600160a01b038116611a9c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b55565b600080546040516001600160a01b038085169392169160008051602061338b83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b345760405162461bcd60e51b8152602060048201526016602482015275417070726f76652066726f6d2061646472657328302960501b6044820152606401610b55565b6001600160a01b038216611b815760405162461bcd60e51b8152602060048201526014602482015273417070726f766520746f2061646472657328302960601b6044820152606401610b55565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601754600160c01b900460ff1615611c2e5760405162461bcd60e51b815260206004820152600f60248201526e10dbdb9d1c9858dd081c185d5cd959608a1b6044820152606401610b55565b6001600160a01b038316611c845760405162461bcd60e51b815260206004820152601860248201527f5472616e736665722066726f6d206164647265737328302900000000000000006044820152606401610b55565b6001600160a01b038216611cd35760405162461bcd60e51b81526020600482015260166024820152755472616e7366657220746f206164647265737328302960501b6044820152606401610b55565b60008111611d1c5760405162461bcd60e51b81526020600482015260166024820152755472616e7366657220616d6f756e74203c207a65726f60501b6044820152606401610b55565b6000546001600160a01b03848116911614801590611d4857506000546001600160a01b03838116911614155b8015611d5c57506001600160a01b03821615155b8015611d7357506001600160a01b03821661dead14155b8015611d895750601754600160b81b900460ff16155b15611fd4576001600160a01b0383166000908152601a602052604090205460ff168015611dcf57506001600160a01b0382166000908152601b602052604090205460ff16155b15611ea357601454811115611e445760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b55565b601554611e508361129e565b611e5a908361324c565b1115611e9e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b55565b611fd4565b6001600160a01b0382166000908152601a602052604090205460ff168015611ee457506001600160a01b0383166000908152601b602052604090205460ff16155b15611f5a57601454811115611e9e5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b55565b6001600160a01b0382166000908152601b602052604090205460ff16611fd457601554611f868361129e565b611f90908361324c565b1115611fd45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b55565b6000611fdf3061129e565b60165460175491925082101590600160b81b900460ff1615801561200d5750601754600160a01b900460ff16155b80156120225750601754600160a81b900460ff165b801561203b57506017546001600160a01b038581169116145b801561205557506003546001600160a01b03868116911614155b801561206f57506003546001600160a01b03858116911614155b80156120785750805b156120fa576017805460ff60b81b1916600160b81b17905560165482906120a290620186a0613286565b8111156120bc576016546120b990620186a0613286565b90505b60006120c7826123d6565b90506120d2816123f8565b60006120de838361249f565b90506120e9816124e1565b50506017805460ff60b81b19169055505b6001600160a01b03851660009081526007602052604090205460019060ff168061213c57506001600160a01b03851660009081526007602052604090205460ff165b15612145575060005b61215186868684612257565b505050505050565b6000818484111561217d5760405162461bcd60e51b8152600401610b559190613165565b50600061218a84866132a5565b95945050505050565b60008060006121a0612535565b90925090506121af82826121b6565b9250505090565b6000610d3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126b7565b600080612205838561324c565b905083811015610d3e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b55565b80612264576122646126e5565b6001600160a01b03841660009081526008602052604090205460ff1680156122a557506001600160a01b03831660009081526008602052604090205460ff16155b156122ba576122b5848484612713565b612366565b6001600160a01b03841660009081526008602052604090205460ff161580156122fb57506001600160a01b03831660009081526008602052604090205460ff165b1561230b576122b5848484612842565b6001600160a01b03841660009081526008602052604090205460ff16801561234b57506001600160a01b03831660009081526008602052604090205460ff165b1561235b576122b58484846128eb565b61236684848461295e565b8061237c5761237c601154601055601354601255565b50505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000610c5260646123f2601254856129a290919063ffffffff16565b906121b6565b6017805460ff60a01b1916600160a01b17905560006124188260026121b6565b90506000612426838361249f565b90504761243283612a21565b600061243e478361249f565b905061244a8382612c29565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506017805460ff60a01b19169055505050565b6000610d3e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612159565b6017805460ff60a01b1916600160a01b179055476124fe82612a21565b600061250a478361249f565b600354909150612523906001600160a01b031682612d3e565b50506017805460ff60a01b1916905550565b600b54600a546000918291825b600954811015612687578260046000600984815481106125645761256461333e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806125cf57508160056000600984815481106125a8576125a861333e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156125e557600b54600a54945094505050509091565b61262b60046000600984815481106125ff576125ff61333e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061249f565b925061267360056000600984815481106126475761264761333e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061249f565b91508061267f816132f7565b915050612542565b50600a54600b54612697916121b6565b8210156126ae57600b54600a549350935050509091565b90939092509050565b600081836126d85760405162461bcd60e51b8152600401610b559190613165565b50600061218a8486613264565b6010541580156126f55750601254155b156126fc57565b601080546011556012805460135560009182905555565b60008060008060008061272587612d79565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612757908861249f565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612786908761249f565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546127b590866121f8565b6001600160a01b0389166000908152600460205260409020556127d781612dc8565b6127e082612e50565b6127ea8483612ec3565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161282f91815260200190565b60405180910390a3505050505050505050565b60008060008060008061285487612d79565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612886908761249f565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546128bc90846121f8565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546127b590866121f8565b6000806000806000806128fd87612d79565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061292f908861249f565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612886908761249f565b60008060008060008061297087612d79565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612786908761249f565b6000826129b157506000610c52565b60006129bd8385613286565b9050826129ca8583613264565b14610d3e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b55565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a5657612a5661333e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612acf57600080fd5b505afa158015612ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b079190612fc7565b81600181518110612b1a57612b1a61333e565b60200260200101906001600160a01b031690816001600160a01b031681525050612b65307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ae5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612bba908590600090869030904290600401613210565b600060405180830381600087803b158015612bd457600080fd5b505af1158015612be8573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612c1d9291906131ef565b60405180910390a15050565b612c54307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ae5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719823085600080612c9b6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612cfe57600080fd5b505af1158015612d12573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d3791906130f3565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612d74573d6000803e3d6000fd5b505050565b6000806000806000806000806000612d908a612ee7565b9250925092506000806000612dae8d8686612da9612193565b612f29565b919f909e50909c50959a5093985091965092945050505050565b6000612dd2612193565b90506000612de083836129a2565b30600090815260046020526040902054909150612dfd90826121f8565b3060009081526004602090815260408083209390935560089052205460ff1615612d745730600090815260056020526040902054612e3b90846121f8565b30600090815260056020526040902055505050565b6000612e5a612193565b90506000612e6883836129a2565b30600090815260046020526040902054909150612e8590826121f8565b3060009081526004602090815260408083209390935560089052205460ff1615612d745730600090815260056020526040902054612e3b90826121f8565b600b54612ed0908361249f565b600b55600c54612ee090826121f8565b600c555050565b600080600080612ef685612f79565b90506000612f03866123d6565b90506000612f1b82612f15898661249f565b9061249f565b979296509094509092505050565b6000808080612f3888866129a2565b90506000612f4688876129a2565b90506000612f5488886129a2565b90506000612f6682612f15868661249f565b939b939a50919850919650505050505050565b6000610c5260646123f2601054856129a290919063ffffffff16565b80358015158114612fa557600080fd5b919050565b600060208284031215612fbc57600080fd5b8135610d3e81613354565b600060208284031215612fd957600080fd5b8151610d3e81613354565b60008060408385031215612ff757600080fd5b823561300281613354565b9150602083013561301281613354565b809150509250929050565b60008060006060848603121561303257600080fd5b833561303d81613354565b9250602084013561304d81613354565b929592945050506040919091013590565b6000806040838503121561307157600080fd5b823561307c81613354565b915061308a60208401612f95565b90509250929050565b600080604083850312156130a657600080fd5b82356130b181613354565b946020939093013593505050565b6000602082840312156130d157600080fd5b610d3e82612f95565b6000602082840312156130ec57600080fd5b5035919050565b60008060006060848603121561310857600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b8381101561315a5781516001600160a01b031687529582019590820190600101613135565b509495945050505050565b600060208083528351808285015260005b8181101561319257858101830151858201604001528201613176565b818111156131a4576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006132086040830184613121565b949350505050565b85815284602082015260a06040820152600061322f60a0830186613121565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561325f5761325f613312565b500190565b60008261328157634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156132a0576132a0613312565b500290565b6000828210156132b7576132b7613312565b500390565b600181811c908216806132d057607f821691505b602082108114156132f157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561330b5761330b613312565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610fcd57600080fdfe7472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212207c88aa75ae29bc1147a587b30d162622f943f05edaed0ea66758b8dafc4fd7e964736f6c63430008070033
Deployed Bytecode Sourcemap
21995:25175:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43479:96;;;;;;;;;;-1:-1:-1;43479:96:0;;;;;:::i;:::-;;:::i;:::-;;25616:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44152:131;;;;;;;;;;-1:-1:-1;44152:131:0;;;;;:::i;:::-;;:::i;23569:28::-;;;;;;;;;;-1:-1:-1;23569:28:0;;;;-1:-1:-1;;;23569:28:0;;;;;;;;;4537:14:1;;4530:22;4512:41;;4500:2;4485:18;23569:28:0;4372:187:1;26610:193:0;;;;;;;;;;-1:-1:-1;26610:193:0;;;;;:::i;:::-;;:::i;23837:64::-;;;;;;;;;;-1:-1:-1;23837:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28095:87;;;;;;;;;;-1:-1:-1;28164:10:0;;28095:87;;;14398:25:1;;;14386:2;14371:18;28095:87:0;14252:177:1;23328:53:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3492:32:1;;;3474:51;;3462:2;3447:18;23328:53:0;3328:203:1;25902:95:0;;;;;;;;;;-1:-1:-1;25982:7:0;;25902:95;;26811:439;;;;;;;;;;-1:-1:-1;26811:439:0;;;;;:::i;:::-;;:::i;22243:90::-;;;;;;;;;;;;;;;28318:322;;;;;;;;;;-1:-1:-1;28318:322:0;;;;;:::i;:::-;;:::i;25802:92::-;;;;;;;;;;-1:-1:-1;25877:9:0;;25802:92;;25877:9;;;;15824:36:1;;15812:2;15797:18;25802:92:0;15682:184:1;28987:476:0;;;;;;;;;;-1:-1:-1;28987:476:0;;;;;:::i;:::-;;:::i;27258:300::-;;;;;;;;;;-1:-1:-1;27258:300:0;;;;;:::i;:::-;;:::i;44618:91::-;;;;;;;;;;-1:-1:-1;44618:91:0;;;;;:::i;:::-;;:::i;22969:26::-;;;;;;;;;;;;;;;;44717:120;;;;;;;;;;-1:-1:-1;44717:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;44805:24:0;;;44717:120;45580:162;;;;;;;;;;-1:-1:-1;45580:162:0;;;;;:::i;:::-;;:::i;45750:349::-;;;;;;;;;;-1:-1:-1;45750:349:0;;;;;:::i;:::-;;:::i;43242:111::-;;;;;;;;;;-1:-1:-1;43242:111:0;;;;;:::i;:::-;;:::i;23388:28::-;;;;;;;;;;-1:-1:-1;23388:28:0;;;;-1:-1:-1;;;;;23388:28:0;;;23453:40;;;;;;;;;;-1:-1:-1;23453:40:0;;;;-1:-1:-1;;;23453:40:0;;;;;;28648:331;;;;;;;;;;-1:-1:-1;28648:331:0;;;;;:::i;:::-;;:::i;43110:124::-;;;;;;;;;;-1:-1:-1;43110:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;43199:27:0;43175:4;43199:27;;;:18;:27;;;;;;;;;43110:124;23500:34;;;;;;;;;;-1:-1:-1;23500:34:0;;;;-1:-1:-1;;;23500:34:0;;;;;;23052:32;;;;;;;;;;;;;;;;23629:25;;;;;;;;;;-1:-1:-1;23629:25:0;;;;-1:-1:-1;;;;;23629:25:0;;;44845:110;;;;;;;;;;;;;:::i;26005:198::-;;;;;;;;;;-1:-1:-1;26005:198:0;;;;;:::i;:::-;;:::i;6724:148::-;;;;;;;;;;;;;:::i;46930:144::-;;;;;;;;;;-1:-1:-1;46930:144:0;;;;;:::i;:::-;;:::i;23207:52::-;;;;;;;;;;;;;;;;23153:47;;;;;;;;;;;;;;;;27967:120;;;;;;;;;;-1:-1:-1;27967:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;28059:20:0;28035:4;28059:20;;;:11;:20;;;;;;;;;27967:120;6510:79;;;;;;;;;;-1:-1:-1;6548:7:0;6575:6;-1:-1:-1;;;;;6575:6:0;6510:79;;43583:120;;;;;;;;;;-1:-1:-1;43583:120:0;;;;;:::i;:::-;;:::i;43828:121::-;;;;;;;;;;-1:-1:-1;43828:121:0;;;;;:::i;:::-;;:::i;25707:87::-;;;;;;;;;;;;;:::i;46482:244::-;;;;;;;;;;-1:-1:-1;46482:244:0;;;;;:::i;:::-;;:::i;46107:367::-;;;;;;;;;;-1:-1:-1;46107:367:0;;;;;:::i;:::-;;:::i;28190:120::-;;;;;;;;;;-1:-1:-1;28279:23:0;;28190:120;;27566:393;;;;;;;;;;-1:-1:-1;27566:393:0;;;;;:::i;:::-;;:::i;7403:341::-;;;;;;;;;;;;;:::i;26211:199::-;;;;;;;;;;-1:-1:-1;26211:199:0;;;;;:::i;:::-;;:::i;23723:40::-;;;;;;;;;;-1:-1:-1;23723:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22115:100;;;;;;;;;;-1:-1:-1;22115:100:0;;;;-1:-1:-1;;;;;22115:100:0;;;23772:58;;;;;;;;;;-1:-1:-1;23772:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44291:171;;;;;;;;;;-1:-1:-1;44291:171:0;;;;;:::i;:::-;;:::i;45084:218::-;;;;;;;;;;-1:-1:-1;45084:218:0;;;;;:::i;:::-;;:::i;45368:146::-;;;;;;;;;;-1:-1:-1;45368:146:0;;;;;:::i;:::-;;:::i;7169:226::-;;;;;;;;;;-1:-1:-1;7169:226:0;;;;;:::i;:::-;;:::i;26418:184::-;;;;;;;;;;-1:-1:-1;26418:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;26567:18:0;;;26535:7;26567:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26418:184;43961:183;;;;;;;;;;-1:-1:-1;43961:183:0;;;;;:::i;:::-;;:::i;43361:110::-;;;;;;;;;;-1:-1:-1;43361:110:0;;;;;:::i;:::-;;:::i;43711:109::-;;;;;;;;;;-1:-1:-1;43711:109:0;;;;;:::i;:::-;;:::i;6880:281::-;;;;;;;;;;-1:-1:-1;6880:281:0;;;;;:::i;:::-;;:::i;43479:96::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;;;;;;;;;43551:7:::1;:16:::0;43479:96::o;25616:83::-;25653:13;25686:5;25679:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25616:83;:::o;44152:131::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;44234:14:::1;:41:::0;;-1:-1:-1;;;;;;44234:41:0::1;-1:-1:-1::0;;;;;44234:41:0;;;::::1;::::0;;;::::1;::::0;;44152:131::o;26610:193::-;26712:4;26734:39;191:10;26757:7;26766:6;26734:8;:39::i;:::-;-1:-1:-1;26791:4:0;26610:193;;;;;:::o;26811:439::-;26943:4;26960:36;26970:6;26978:9;26989:6;26960:9;:36::i;:::-;27007:213;27030:6;191:10;27078:131;27134:6;27078:131;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27078:19:0;;;;;;:11;:19;;;;;;;;191:10;27078:33;;;;;;;;;;:37;:131::i;:::-;27007:8;:213::i;:::-;-1:-1:-1;27238:4:0;26811:439;;;;;:::o;28318:322::-;28412:7;28470;;28459;:18;;28437:110;;;;-1:-1:-1;;;28437:110:0;;5956:2:1;28437:110:0;;;5938:21:1;5995:2;5975:18;;;5968:30;6034:34;6014:18;;;6007:62;-1:-1:-1;;;6085:18:1;;;6078:40;6135:19;;28437:110:0;5754:406:1;28437:110:0;28558:19;28580:10;:8;:10::i;:::-;28558:32;-1:-1:-1;28608:24:0;:7;28558:32;28608:11;:24::i;:::-;28601:31;28318:322;-1:-1:-1;;;28318:322:0:o;28987:476::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29067:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29059:59;;;::::0;-1:-1:-1;;;29059:59:0;;12999:2:1;29059:59:0::1;::::0;::::1;12981:21:1::0;13038:2;13018:18;;;13011:30;13077:28;13057:18;;;13050:56;13123:18;;29059:59:0::1;12797:350:1::0;29059:59:0::1;29134:9;29129:327;29153:9;:16:::0;29149:20;::::1;29129:327;;;29211:7;-1:-1:-1::0;;;;;29195:23:0::1;:9;29205:1;29195:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;29195:12:0::1;:23;29191:254;;;29254:9;29264:16:::0;;:20:::1;::::0;29283:1:::1;::::0;29264:20:::1;:::i;:::-;29254:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;29239:9:::1;:12:::0;;-1:-1:-1;;;;;29254:31:0;;::::1;::::0;29249:1;;29239:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;29239:46:0::1;-1:-1:-1::0;;;;;29239:46:0;;::::1;;::::0;;29304:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;29343:11:::1;:20:::0;;;;:28;;-1:-1:-1;;29343:28:0::1;::::0;;29390:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29390:15:0;;;;;-1:-1:-1;;;;;;29390:15:0::1;::::0;;;;;29129:327:::1;28987:476:::0;:::o;29191:254::-:1;29171:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29129:327;;;;28987:476:::0;:::o;27258:300::-;191:10;27373:4;27467:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27467:34:0;;;;;;;;;;27373:4;;27395:133;;27445:7;;27467:50;;27506:10;27467:38;:50::i;44618:91::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;44685:8:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;44685:16:0::1;-1:-1:-1::0;;;;44685:16:0;;::::1;::::0;;;::::1;::::0;;44618:91::o;45580:162::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;45656:10:::1;:24:::0;;-1:-1:-1;;;;;;45656:24:0::1;-1:-1:-1::0;;;;;45656:24:0;::::1;::::0;;::::1;::::0;;;45691:43:::1;::::0;-1:-1:-1;45691:25:0::1;:43::i;:::-;45580:162:::0;:::o;45750:349::-;45027:10;45819:4;45018:20;;;:8;:20;;;;;;;;45010:46;;;;-1:-1:-1;;;45010:46:0;;11237:2:1;45010:46:0;;;11219:21:1;11276:2;11256:18;;;11249:30;-1:-1:-1;;;11295:18:1;;;11288:43;11348:18;;45010:46:0;11035:337:1;45010:46:0;-1:-1:-1;;;;;45844:16:0;::::1;45836:47;;;::::0;-1:-1:-1;;;45836:47:0;;13354:2:1;45836:47:0::1;::::0;::::1;13336:21:1::0;13393:2;13373:18;;;13366:30;-1:-1:-1;;;13412:18:1;;;13405:48;13470:18;;45836:47:0::1;13152:342:1::0;45836:47:0::1;45924:10;::::0;45896:15:::1;::::0;45914:21:::1;::::0;-1:-1:-1;;;;;45924:10:0::1;45914:9;:21::i;:::-;45896:39;;45965:6;45954:7;:17;;45946:56;;;::::0;-1:-1:-1;;;45946:56:0;;9714:2:1;45946:56:0::1;::::0;::::1;9696:21:1::0;9753:2;9733:18;;;9726:30;9792:28;9772:18;;;9765:56;9838:18;;45946:56:0::1;9512:350:1::0;45946:56:0::1;46038:10;::::0;46015:54:::1;::::0;-1:-1:-1;;;;;46038:10:0::1;46051:2:::0;46055:6;46038:10:::1;46015:14;:54::i;43242:111::-:0;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43311:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;43311:34:0::1;43341:4;43311:34;::::0;;43242:111::o;28648:331::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28729:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28728:21;28720:60;;;::::0;-1:-1:-1;;;28720:60:0;;12999:2:1;28720:60:0::1;::::0;::::1;12981:21:1::0;13038:2;13018:18;;;13011:30;13077:28;13057:18;;;13050:56;13123:18;;28720:60:0::1;12797:350:1::0;28720:60:0::1;-1:-1:-1::0;;;;;28795:16:0;::::1;28814:1;28795:16:::0;;;:7:::1;:16;::::0;;;;;:20;28791:109:::1;;-1:-1:-1::0;;;;;28871:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;28851:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;28832:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;28791:109:::1;-1:-1:-1::0;;;;;28910:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28910:27:0::1;28933:4;28910:27:::0;;::::1;::::0;;;28948:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;28948:23:0::1;::::0;;::::1;::::0;;28648:331::o;44845:110::-;44896:7;44923:24;44941:4;44923:9;:24::i;:::-;44916:31;;44845:110;:::o;26005:198::-;-1:-1:-1;;;;;26095:20:0;;26071:7;26095:20;;;:11;:20;;;;;;;;26091:49;;;-1:-1:-1;;;;;;26124:16:0;;;;;:7;:16;;;;;;;26005:198::o;26091:49::-;-1:-1:-1;;;;;26178:16:0;;;;;;:7;:16;;;;;;26158:37;;:19;:37::i;6724:148::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;6831:1:::1;6815:6:::0;;6794:40:::1;::::0;-1:-1:-1;;;;;6815:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6794:40:0;6831:1;;6794:40:::1;6862:1;6845:19:::0;;-1:-1:-1;;;;;;6845:19:0::1;::::0;;6724:148::o;46930:144::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47020:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;47020:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46930:144::o;43583:120::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;43667:13:::1;:28:::0;43583:120::o;43828:121::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;43909:15:::1;:32:::0;43828:121::o;25707:87::-;25746:13;25779:7;25772:14;;;;;:::i;46482:244::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;46589:13:::1;::::0;-1:-1:-1;;;;;46581:21:0;;::::1;46589:13:::0;::::1;46581:21;;46573:91;;;::::0;-1:-1:-1;;;46573:91:0;;8170:2:1;46573:91:0::1;::::0;::::1;8152:21:1::0;8209:2;8189:18;;;8182:30;8248:34;8228:18;;;8221:62;8319:27;8299:18;;;8292:55;8364:19;;46573:91:0::1;7968:421:1::0;46573:91:0::1;46677:41;46706:4;46712:5;46677:28;:41::i;46107:367::-:0;45027:10;46205:4;45018:20;;;:8;:20;;;;;;;;45010:46;;;;-1:-1:-1;;;45010:46:0;;11237:2:1;45010:46:0;;;11219:21:1;11276:2;11256:18;;;11249:30;-1:-1:-1;;;11295:18:1;;;11288:43;11348:18;;45010:46:0;11035:337:1;45010:46:0;-1:-1:-1;;;;;46235:18:0;::::1;46227:46;;;::::0;-1:-1:-1;;;46227:46:0;;10491:2:1;46227:46:0::1;::::0;::::1;10473:21:1::0;10530:2;10510:18;;;10503:30;-1:-1:-1;;;10549:18:1;;;10542:45;10604:18;;46227:46:0::1;10289:339:1::0;46227:46:0::1;46286:15;46304;46314:4;46304:9;:15::i;:::-;46286:33;;46349:6;46338:7;:17;;46330:45;;;::::0;-1:-1:-1;;;46330:45:0;;8596:2:1;46330:45:0::1;::::0;::::1;8578:21:1::0;8635:2;8615:18;;;8608:30;-1:-1:-1;;;8654:18:1;;;8647:45;8709:18;;46330:45:0::1;8394:339:1::0;46330:45:0::1;46417:10;::::0;46388:56:::1;::::0;46403:4;;-1:-1:-1;;;;;46417:10:0::1;46430:6:::0;46417:10:::1;46388:14;:56::i;27566:393::-:0;27686:4;27708:221;191:10;27758:7;27780:138;27837:15;27780:138;;;;;;;;;;;;;;;;;:11;:25;27792:12;191:10;;95:115;27792:12;-1:-1:-1;;;;;27780:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;27780:25:0;;;:34;;;;;;;;;;;:138;:38;:138::i;7403:341::-;7469:14;;-1:-1:-1;;;;;7469:14:0;7487:10;7469:28;7447:113;;;;-1:-1:-1;;;7447:113:0;;13701:2:1;7447:113:0;;;13683:21:1;13740:2;13720:18;;;13713:30;13779:34;13759:18;;;13752:62;-1:-1:-1;;;13830:18:1;;;13823:33;13873:19;;7447:113:0;13499:399:1;7447:113:0;7597:9;;7579:15;:27;7571:71;;;;-1:-1:-1;;;7571:71:0;;12639:2:1;7571:71:0;;;12621:21:1;12678:2;12658:18;;;12651:30;12717:33;12697:18;;;12690:61;12768:18;;7571:71:0;12437:355:1;7571:71:0;7687:14;;;7679:6;;7658:44;;-1:-1:-1;;;;;7687:14:0;;;;7679:6;;;;-1:-1:-1;;;;;;;;;;;7658:44:0;;7722:14;;;7713:23;;-1:-1:-1;;;;;;7713:23:0;-1:-1:-1;;;;;7722:14:0;;;7713:23;;;;;;7403:341::o;26211:199::-;26316:4;26338:42;191:10;26362:9;26373:6;26338:9;:42::i;44291:171::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;44368:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;44368:32:0::1;-1:-1:-1::0;;;;44368:32:0;;::::1;;::::0;;44416:38:::1;::::0;::::1;::::0;::::1;::::0;44392:8;4537:14:1;4530:22;4512:41;;4500:2;4485:18;;4372:187;44416:38:0::1;;;;;;;;44291:171:::0;:::o;45084:218::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45168:19:0;::::1;45160:46;;;::::0;-1:-1:-1;;;45160:46:0;;7471:2:1;45160:46:0::1;::::0;::::1;7453:21:1::0;7510:2;7490:18;;;7483:30;-1:-1:-1;;;7529:18:1;;;7522:44;7583:18;;45160:46:0::1;7269:338:1::0;45160:46:0::1;-1:-1:-1::0;;;;;45217:15:0;::::1;;::::0;;;:8:::1;:15;::::0;;;;:25;;-1:-1:-1;;45217:25:0::1;::::0;::::1;;;::::0;;45253:41:::1;45217:15:::0;:25;45253::::1;:41::i;45368:146::-:0;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45433:15:0;::::1;45451:5;45433:15:::0;;;:8:::1;:15;::::0;;;;:23;;-1:-1:-1;;45433:23:0::1;::::0;;45467:39:::1;::::0;45442:5;;45467:25:::1;:39::i;7169:226::-:0;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;7250:6:::1;::::0;;;7233:23;;-1:-1:-1;;;;;;7233:23:0;;::::1;-1:-1:-1::0;;;;;7250:6:0;::::1;7233:23;::::0;;;7267:19:::1;::::0;;7309:22:::1;7327:4:::0;7309:15:::1;:22;:::i;:::-;7297:9;:34:::0;7384:1:::1;7368:6:::0;;7347:40:::1;::::0;-1:-1:-1;;;;;7368:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7347:40:0;7384:1;;7347:40:::1;7169:226:::0;:::o;43961:183::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;44086:23:::1;:50:::0;43961:183::o;43361:110::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43428:27:0::1;43458:5;43428:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;43428:35:0::1;::::0;;43361:110::o;43711:109::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;43786:12:::1;:26:::0;43711:109::o;6880:281::-;6637:6;;-1:-1:-1;;;;;6637:6:0;191:10;6637:22;6629:67;;;;-1:-1:-1;;;6629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6983:22:0;::::1;6961:110;;;::::0;-1:-1:-1;;;6961:110:0;;6367:2:1;6961:110:0::1;::::0;::::1;6349:21:1::0;6406:2;6386:18;;;6379:30;6445:34;6425:18;;;6418:62;-1:-1:-1;;;6496:18:1;;;6489:36;6542:19;;6961:110:0::1;6165:402:1::0;6961:110:0::1;7108:6;::::0;;7087:38:::1;::::0;-1:-1:-1;;;;;7087:38:0;;::::1;::::0;7108:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;7087:38:0;::::1;7136:6;:17:::0;;-1:-1:-1;;;;;;7136:17:0::1;-1:-1:-1::0;;;;;7136:17:0;;;::::1;::::0;;;::::1;::::0;;6880:281::o;29471:343::-;-1:-1:-1;;;;;29598:19:0;;29590:54;;;;-1:-1:-1;;;29590:54:0;;11940:2:1;29590:54:0;;;11922:21:1;11979:2;11959:18;;;11952:30;-1:-1:-1;;;11998:18:1;;;11991:52;12060:18;;29590:54:0;11738:346:1;29590:54:0;-1:-1:-1;;;;;29663:21:0;;29655:54;;;;-1:-1:-1;;;29655:54:0;;14105:2:1;29655:54:0;;;14087:21:1;14144:2;14124:18;;;14117:30;-1:-1:-1;;;14163:18:1;;;14156:50;14223:18;;29655:54:0;13903:344:1;29655:54:0;-1:-1:-1;;;;;29722:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29774:32;;14398:25:1;;;29774:32:0;;14371:18:1;29774:32:0;;;;;;;29471:343;;;:::o;29822:2510::-;29945:8;;-1:-1:-1;;;29945:8:0;;;;29944:9;29936:37;;;;-1:-1:-1;;;29936:37:0;;7127:2:1;29936:37:0;;;7109:21:1;7166:2;7146:18;;;7139:30;-1:-1:-1;;;7185:18:1;;;7178:45;7240:18;;29936:37:0;6925:339:1;29936:37:0;-1:-1:-1;;;;;29992:18:0;;29984:55;;;;-1:-1:-1;;;29984:55:0;;6774:2:1;29984:55:0;;;6756:21:1;6813:2;6793:18;;;6786:30;6852:26;6832:18;;;6825:54;6896:18;;29984:55:0;6572:348:1;29984:55:0;-1:-1:-1;;;;;30058:16:0;;30050:51;;;;-1:-1:-1;;;30050:51:0;;5605:2:1;30050:51:0;;;5587:21:1;5644:2;5624:18;;;5617:30;-1:-1:-1;;;5663:18:1;;;5656:52;5725:18;;30050:51:0;5403:346:1;30050:51:0;30129:1;30120:6;:10;30112:45;;;;-1:-1:-1;;;30112:45:0;;8940:2:1;30112:45:0;;;8922:21:1;8979:2;8959:18;;;8952:30;-1:-1:-1;;;8998:18:1;;;8991:52;9060:18;;30112:45:0;8738:346:1;30112:45:0;6548:7;6575:6;-1:-1:-1;;;;;30186:15:0;;;6575:6;;30186:15;;;;:45;;-1:-1:-1;6548:7:0;6575:6;-1:-1:-1;;;;;30218:13:0;;;6575:6;;30218:13;;30186:45;:78;;;;-1:-1:-1;;;;;;30248:16:0;;;;30186:78;:116;;;;-1:-1:-1;;;;;;30281:21:0;;30295:6;30281:21;;30186:116;:142;;;;-1:-1:-1;30320:8:0;;-1:-1:-1;;;30320:8:0;;;;30319:9;30186:142;30168:939;;;-1:-1:-1;;;;;30382:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;30418:35:0;;;;;;:31;:35;;;;;;;;30417:36;30382:71;30378:718;;;30492:12;;30482:6;:22;;30474:88;;;;-1:-1:-1;;;30474:88:0;;10069:2:1;30474:88:0;;;10051:21:1;10108:2;10088:18;;;10081:30;10147:34;10127:18;;;10120:62;-1:-1:-1;;;10198:18:1;;;10191:51;10259:19;;30474:88:0;9867:417:1;30474:88:0;30615:15;;30598:13;30608:2;30598:9;:13::i;:::-;30589:22;;:6;:22;:::i;:::-;:41;;30581:73;;;;-1:-1:-1;;;30581:73:0;;12291:2:1;30581:73:0;;;12273:21:1;12330:2;12310:18;;;12303:30;-1:-1:-1;;;12349:18:1;;;12342:49;12408:18;;30581:73:0;12089:343:1;30581:73:0;30378:718;;;-1:-1:-1;;;;;30732:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;30766:37:0;;;;;;:31;:37;;;;;;;;30765:38;30732:71;30728:368;;;30842:12;;30832:6;:22;;30824:89;;;;-1:-1:-1;;;30824:89:0;;9291:2:1;30824:89:0;;;9273:21:1;9330:2;9310:18;;;9303:30;9369:34;9349:18;;;9342:62;-1:-1:-1;;;9420:18:1;;;9413:52;9482:19;;30824:89:0;9089:418:1;30728:368:0;-1:-1:-1;;;;;30952:35:0;;;;;;:31;:35;;;;;;;;30948:148;;31041:15;;31024:13;31034:2;31024:9;:13::i;:::-;31015:22;;:6;:22;:::i;:::-;:41;;31007:73;;;;-1:-1:-1;;;31007:73:0;;12291:2:1;31007:73:0;;;12273:21:1;12330:2;12310:18;;;12303:30;-1:-1:-1;;;12349:18:1;;;12342:49;12408:18;;31007:73:0;12089:343:1;31007:73:0;31119:28;31150:24;31168:4;31150:9;:24::i;:::-;31224:23;;31279:8;;31119:55;;-1:-1:-1;31200:47:0;;;;-1:-1:-1;;;31279:8:0;;;;31278:9;:43;;;;-1:-1:-1;31305:16:0;;-1:-1:-1;;;31305:16:0;;;;31304:17;31278:43;:81;;;;-1:-1:-1;31338:21:0;;-1:-1:-1;;;31338:21:0;;;;31278:81;:117;;;;-1:-1:-1;31382:13:0;;-1:-1:-1;;;;;31376:19:0;;;31382:13;;31376:19;31278:117;:156;;;;-1:-1:-1;31420:14:0;;-1:-1:-1;;;;;31412:22:0;;;31420:14;;31412:22;;31278:156;:193;;;;-1:-1:-1;31457:14:0;;-1:-1:-1;;;;;31451:20:0;;;31457:14;;31451:20;;31278:193;:217;;;;;31488:7;31278:217;31260:785;;;31522:8;:15;;-1:-1:-1;;;;31522:15:0;-1:-1:-1;;;31522:15:0;;;31640:23;;31582:20;;31640:32;;31666:6;31640:32;:::i;:::-;31620:17;:52;31617:143;;;31712:23;;:32;;31738:6;31712:32;:::i;:::-;31692:52;;31617:143;31776:20;31799:40;31821:17;31799:21;:40::i;:::-;31776:63;;31854:28;31869:12;31854:14;:28::i;:::-;31899:23;31925:35;:17;31947:12;31925:21;:35::i;:::-;31899:61;;31975:27;31986:15;31975:10;:27::i;:::-;-1:-1:-1;;32017:8:0;:16;;-1:-1:-1;;;;32017:16:0;;;-1:-1:-1;31260:785:0;-1:-1:-1;;;;;32177:24:0;;32057:12;32177:24;;;:18;:24;;;;;;32072:4;;32177:24;;;:50;;-1:-1:-1;;;;;;32205:22:0;;;;;;:18;:22;;;;;;;;32177:50;32173:98;;;-1:-1:-1;32254:5:0;32173:98;32283:41;32298:4;32304:2;32308:6;32316:7;32283:14;:41::i;:::-;29925:2407;;;29822:2510;;;:::o;1675:226::-;1795:7;1831:12;1823:6;;;;1815:29;;;;-1:-1:-1;;;1815:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1855:9:0;1867:5;1871:1;1867;:5;:::i;:::-;1855:17;1675:226;-1:-1:-1;;;;;1675:226:0:o;40936:164::-;40978:7;40999:15;41016;41035:19;:17;:19::i;:::-;40998:56;;-1:-1:-1;40998:56:0;-1:-1:-1;41072:20:0;40998:56;;41072:11;:20::i;:::-;41065:27;;;;40936:164;:::o;2167:132::-;2225:7;2252:39;2256:1;2259;2252:39;;;;;;;;;;;;;;;;;:3;:39::i;1342:181::-;1400:7;;1432:5;1436:1;1432;:5;:::i;:::-;1420:17;;1461:1;1456;:6;;1448:46;;;;-1:-1:-1;;;1448:46:0;;7814:2:1;1448:46:0;;;7796:21:1;7853:2;7833:18;;;7826:30;7892:29;7872:18;;;7865:57;7939:18;;1448:46:0;7612:351:1;35423:708:0;35579:7;35574:28;;35588:14;:12;:14::i;:::-;-1:-1:-1;;;;;35619:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;35643:22:0;;;;;;:11;:22;;;;;;;;35642:23;35619:46;35615:467;;;35682:48;35704:6;35712:9;35723:6;35682:21;:48::i;:::-;35615:467;;;-1:-1:-1;;;;;35753:19:0;;;;;;:11;:19;;;;;;;;35752:20;:46;;;;-1:-1:-1;;;;;;35776:22:0;;;;;;:11;:22;;;;;;;;35752:46;35748:334;;;35815:46;35835:6;35843:9;35854:6;35815:19;:46::i;35748:334::-;-1:-1:-1;;;;;35883:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;35906:22:0;;;;;;:11;:22;;;;;;;;35883:45;35879:203;;;35945:48;35967:6;35975:9;35986:6;35945:21;:48::i;35879:203::-;36026:44;36044:6;36052:9;36063:6;36026:17;:44::i;:::-;36099:7;36094:29;;36108:15;43031;;43021:7;:25;43073:21;;43057:13;:37;42977:125;36108:15;35423:708;;;;:::o;46734:188::-;-1:-1:-1;;;;;46817:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;46817:39:0;;;;;;;;;;46874:40;;46817:39;;:31;46874:40;;;46734:188;;:::o;42552:174::-;42649:7;42681:37;42712:5;42681:26;42693:13;;42681:7;:11;;:26;;;;:::i;:::-;:30;;:37::i;32340:935::-;24453:16;:23;;-1:-1:-1;;;;24453:23:0;-1:-1:-1;;;24453:23:0;;;;32477:13:::1;:6:::0;32488:1:::1;32477:10;:13::i;:::-;32462:28:::0;-1:-1:-1;32501:17:0::1;32521:16;:6:::0;32462:28;32521:10:::1;:16::i;:::-;32501:36:::0;-1:-1:-1;32840:21:0::1;32906:22;32923:4:::0;32906:16:::1;:22::i;:::-;33059:18;33080:41;:21;33106:14:::0;33080:25:::1;:41::i;:::-;33059:62;;33171:35;33184:9;33195:10;33171:12;:35::i;:::-;33224:43;::::0;;15560:25:1;;;15616:2;15601:18;;15594:34;;;15644:18;;;15637:34;;;33224:43:0::1;::::0;15548:2:1;15533:18;33224:43:0::1;;;;;;;-1:-1:-1::0;;24499:16:0;:24;;-1:-1:-1;;;;24499:24:0;;;-1:-1:-1;;;32340:935:0:o;1531:136::-;1589:7;1616:43;1620:1;1623;1616:43;;;;;;;;;;;;;;;;;:3;:43::i;33283:341::-;24453:16;:23;;-1:-1:-1;;;;24453:23:0;-1:-1:-1;;;24453:23:0;;;33375:21:::1;33407:24;33424:6:::0;33407:16:::1;:24::i;:::-;33442:26;33471:41;:21;33497:14:::0;33471:25:::1;:41::i;:::-;33581:14;::::0;33442:70;;-1:-1:-1;33560:56:0::1;::::0;-1:-1:-1;;;;;33581:14:0::1;33442:70:::0;33560:20:::1;:56::i;:::-;-1:-1:-1::0;;24499:16:0;:24;;-1:-1:-1;;;;24499:24:0;;;-1:-1:-1;33283:341:0:o;41108:605::-;41206:7;;41242;;41159;;;;;41260:338;41284:9;:16;41280:20;;41260:338;;;41368:7;41344;:21;41352:9;41362:1;41352:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41352:12:0;41344:21;;;;;;;;;;;;;:31;;:83;;;41420:7;41396;:21;41404:9;41414:1;41404:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41404:12:0;41396:21;;;;;;;;;;;;;:31;41344:83;41322:146;;;41451:7;;41460;;41443:25;;;;;;;41108:605;;:::o;41322:146::-;41493:34;41505:7;:21;41513:9;41523:1;41513:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41513:12:0;41505:21;;;;;;;;;;;;;41493:7;;:11;:34::i;:::-;41483:44;;41552:34;41564:7;:21;41572:9;41582:1;41572:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41572:12:0;41564:21;;;;;;;;;;;;;41552:7;;:11;:34::i;:::-;41542:44;-1:-1:-1;41302:3:0;;;;:::i;:::-;;;;41260:338;;;-1:-1:-1;41634:7:0;;41622;;:20;;:11;:20::i;:::-;41612:7;:30;41608:61;;;41652:7;;41661;;41644:25;;;;;;41108:605;;:::o;41608:61::-;41688:7;;41697;;-1:-1:-1;41108:605:0;-1:-1:-1;41108:605:0:o;2307:312::-;2427:7;2462:12;2455:5;2447:28;;;;-1:-1:-1;;;2447:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2486:9:0;2498:5;2502:1;2498;:5;:::i;42734:235::-;42781:7;;:12;:34;;;;-1:-1:-1;42797:13:0;;:18;42781:34;42777:47;;;42734:235::o;42777:47::-;42854:7;;;42836:15;:25;42896:13;;;42872:21;:37;-1:-1:-1;42922:11:0;;;;42944:17;42734:235::o;37534:714::-;37685:15;37715:23;37753:12;37780:23;37818:12;37845:18;37877:19;37888:7;37877:10;:19::i;:::-;-1:-1:-1;;;;;37925:15:0;;;;;;:7;:15;;;;;;37670:226;;-1:-1:-1;37670:226:0;;-1:-1:-1;37670:226:0;;-1:-1:-1;37670:226:0;-1:-1:-1;37670:226:0;-1:-1:-1;37670:226:0;-1:-1:-1;37925:28:0;;37945:7;37925:19;:28::i;:::-;-1:-1:-1;;;;;37907:15:0;;;;;;:7;:15;;;;;;;;:46;;;;37982:7;:15;;;;:28;;38002:7;37982:19;:28::i;:::-;-1:-1:-1;;;;;37964:15:0;;;;;;;:7;:15;;;;;;:46;;;;38042:18;;;;;;;:39;;38065:15;38042:22;:39::i;:::-;-1:-1:-1;;;;;38021:18:0;;;;;;:7;:18;;;;;:60;38092:26;38107:10;38092:14;:26::i;:::-;38129:17;38141:4;38129:11;:17::i;:::-;38157:23;38169:4;38175;38157:11;:23::i;:::-;38213:9;-1:-1:-1;;;;;38196:44:0;38205:6;-1:-1:-1;;;;;38196:44:0;;38224:15;38196:44;;;;14398:25:1;;14386:2;14371:18;;14252:177;38196:44:0;;;;;;;;37659:589;;;;;;37534:714;;;:::o;36800:726::-;36949:15;36979:23;37017:12;37044:23;37082:12;37109:18;37141:19;37152:7;37141:10;:19::i;:::-;-1:-1:-1;;;;;37189:15:0;;;;;;:7;:15;;;;;;36934:226;;-1:-1:-1;36934:226:0;;-1:-1:-1;36934:226:0;;-1:-1:-1;36934:226:0;-1:-1:-1;36934:226:0;-1:-1:-1;36934:226:0;-1:-1:-1;37189:28:0;;36934:226;37189:19;:28::i;:::-;-1:-1:-1;;;;;37171:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;37249:18;;;;;:7;:18;;;;;:39;;37272:15;37249:22;:39::i;:::-;-1:-1:-1;;;;;37228:18:0;;;;;;:7;:18;;;;;;;;:60;;;;37320:7;:18;;;;:39;;37343:15;37320:22;:39::i;38256:785::-;38407:15;38437:23;38475:12;38502:23;38540:12;38567:18;38599:19;38610:7;38599:10;:19::i;:::-;-1:-1:-1;;;;;38647:15:0;;;;;;:7;:15;;;;;;38392:226;;-1:-1:-1;38392:226:0;;-1:-1:-1;38392:226:0;;-1:-1:-1;38392:226:0;-1:-1:-1;38392:226:0;-1:-1:-1;38392:226:0;-1:-1:-1;38647:28:0;;38667:7;38647:19;:28::i;:::-;-1:-1:-1;;;;;38629:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38704:7;:15;;;;:28;;38724:7;38704:19;:28::i;36139:653::-;36286:15;36316:23;36354:12;36381:23;36419:12;36446:18;36478:19;36489:7;36478:10;:19::i;:::-;-1:-1:-1;;;;;36526:15:0;;;;;;:7;:15;;;;;;36271:226;;-1:-1:-1;36271:226:0;;-1:-1:-1;36271:226:0;;-1:-1:-1;36271:226:0;-1:-1:-1;36271:226:0;-1:-1:-1;36271:226:0;-1:-1:-1;36526:28:0;;36271:226;36526:19;:28::i;1909:250::-;1967:7;1991:6;1987:47;;-1:-1:-1;2021:1:0;2014:8;;1987:47;2046:9;2058:5;2062:1;2058;:5;:::i;:::-;2046:17;-1:-1:-1;2091:1:0;2082:5;2086:1;2046:17;2082:5;:::i;:::-;:10;2074:56;;;;-1:-1:-1;;;2074:56:0;;10835:2:1;2074:56:0;;;10817:21:1;10874:2;10854:18;;;10847:30;10913:34;10893:18;;;10886:62;-1:-1:-1;;;10964:18:1;;;10957:31;11005:19;;2074:56:0;10633:397:1;33632:658:0;33782:16;;;33796:1;33782:16;;;;;;;;33758:21;;33782:16;;;;;;;;;;-1:-1:-1;33782:16:0;33758:40;;33827:4;33809;33814:1;33809:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;33809:23:0;;;-1:-1:-1;;;;;33809:23:0;;;;;33853:15;-1:-1:-1;;;;;33853:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33843:4;33848:1;33843:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;33843:32:0;;;-1:-1:-1;;;;;33843:32:0;;;;;33888:62;33905:4;33920:15;33938:11;33888:8;:62::i;:::-;33989:240;;-1:-1:-1;;;33989:240:0;;-1:-1:-1;;;;;33989:15:0;:66;;;;:240;;34070:11;;34096:1;;34140:4;;34167;;34203:15;;33989:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34247:35;34264:11;34277:4;34247:35;;;;;;;:::i;:::-;;;;;;;;33687:603;33632:658;:::o;34902:513::-;35050:62;35067:4;35082:15;35100:11;35050:8;:62::i;:::-;35155:15;-1:-1:-1;;;;;35155:31:0;;35194:9;35227:4;35247:11;35273:1;35316;35359:7;6548;6575:6;-1:-1:-1;;;;;6575:6:0;;6510:79;35359:7;35155:252;;;;;;-1:-1:-1;;;;;;35155:252:0;;;-1:-1:-1;;;;;4119:15:1;;;35155:252:0;;;4101:34:1;4151:18;;;4144:34;;;;4194:18;;;4187:34;;;;4237:18;;;4230:34;4301:15;;;4280:19;;;4273:44;35381:15:0;4333:19:1;;;4326:35;4035:19;;35155:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34902:513;;:::o;44470:140::-;44576:26;;-1:-1:-1;;;;;44576:18:0;;;:26;;;;;44595:6;;44576:26;;;;44595:6;44576:18;:26;;;;;;;;;;;;;;;;;;;;;44470:140;;:::o;39204:742::-;39304:7;39326;39348;39370;39392;39414;39464:23;39502:12;39529:18;39561:20;39573:7;39561:11;:20::i;:::-;39449:132;;;;;;39593:15;39610:23;39635:12;39651:113;39677:7;39699:4;39718:10;39743;:8;:10::i;:::-;39651:11;:113::i;:::-;39592:172;;;;-1:-1:-1;39592:172:0;;-1:-1:-1;39868:15:0;;-1:-1:-1;39898:4:0;;-1:-1:-1;39917:10:0;;-1:-1:-1;39204:742:0;;-1:-1:-1;;;;;39204:742:0:o;41721:355::-;41784:19;41806:10;:8;:10::i;:::-;41784:32;-1:-1:-1;41827:18:0;41848:27;:10;41784:32;41848:14;:27::i;:::-;41927:4;41911:22;;;;:7;:22;;;;;;41827:48;;-1:-1:-1;41911:38:0;;41827:48;41911:26;:38::i;:::-;41902:4;41886:22;;;;:7;:22;;;;;;;;:63;;;;41964:11;:26;;;;;;41960:108;;;42046:4;42030:22;;;;:7;:22;;;;;;:38;;42057:10;42030:26;:38::i;:::-;42021:4;42005:22;;;;:7;:22;;;;;:63;41773:303;;41721:355;:::o;42084:322::-;42138:19;42160:10;:8;:10::i;:::-;42138:32;-1:-1:-1;42181:12:0;42196:21;:4;42138:32;42196:8;:21::i;:::-;42269:4;42253:22;;;;:7;:22;;;;;;42181:36;;-1:-1:-1;42253:32:0;;42181:36;42253:26;:32::i;:::-;42244:4;42228:22;;;;:7;:22;;;;;;;;:57;;;;42300:11;:26;;;;;;42296:102;;;42382:4;42366:22;;;;:7;:22;;;;;;:32;;42393:4;42366:26;:32::i;39049:147::-;39127:7;;:17;;39139:4;39127:11;:17::i;:::-;39117:7;:27;39168:10;;:20;;39183:4;39168:14;:20::i;:::-;39155:10;:33;-1:-1:-1;;39049:147:0:o;39954:412::-;40055:7;40077;40099;40134:12;40149:24;40165:7;40149:15;:24::i;:::-;40134:39;;40184:18;40205:30;40227:7;40205:21;:30::i;:::-;40184:51;-1:-1:-1;40246:23:0;40272:33;40184:51;40272:17;:7;40284:4;40272:11;:17::i;:::-;:21;;:33::i;:::-;40246:59;40341:4;;-1:-1:-1;40347:10:0;;-1:-1:-1;39954:412:0;;-1:-1:-1;;;39954:412:0:o;40374:554::-;40573:7;;;;40670:24;:7;40682:11;40670;:24::i;:::-;40652:42;-1:-1:-1;40705:12:0;40720:21;:4;40729:11;40720:8;:21::i;:::-;40705:36;-1:-1:-1;40752:18:0;40773:27;:10;40788:11;40773:14;:27::i;:::-;40752:48;-1:-1:-1;40811:23:0;40837:33;40752:48;40837:17;:7;40849:4;40837:11;:17::i;:33::-;40889:7;;;;-1:-1:-1;40915:4:0;;-1:-1:-1;40374:554:0;;-1:-1:-1;;;;;;;40374:554:0:o;42414:130::-;42478:7;42505:31;42530:5;42505:20;42517:7;;42505;:11;;:20;;;;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1606:6;1614;1667:2;1655:9;1646:7;1642:23;1638:32;1635:52;;;1683:1;1680;1673:12;1635:52;1722:9;1709:23;1741:31;1766:5;1741:31;:::i;:::-;1791:5;-1:-1:-1;1815:35:1;1846:2;1831:18;;1815:35;:::i;:::-;1805:45;;1541:315;;;;;:::o;1861:::-;1929:6;1937;1990:2;1978:9;1969:7;1965:23;1961:32;1958:52;;;2006:1;2003;1996:12;1958:52;2045:9;2032:23;2064:31;2089:5;2064:31;:::i;:::-;2114:5;2166:2;2151:18;;;;2138:32;;-1:-1:-1;;;1861:315:1:o;2181:180::-;2237:6;2290:2;2278:9;2269:7;2265:23;2261:32;2258:52;;;2306:1;2303;2296:12;2258:52;2329:26;2345:9;2329:26;:::i;2366:180::-;2425:6;2478:2;2466:9;2457:7;2453:23;2449:32;2446:52;;;2494:1;2491;2484:12;2446:52;-1:-1:-1;2517:23:1;;2366:180;-1:-1:-1;2366:180:1:o;2551:306::-;2639:6;2647;2655;2708:2;2696:9;2687:7;2683:23;2679:32;2676:52;;;2724:1;2721;2714:12;2676:52;2753:9;2747:16;2737:26;;2803:2;2792:9;2788:18;2782:25;2772:35;;2847:2;2836:9;2832:18;2826:25;2816:35;;2551:306;;;;;:::o;2862:461::-;2915:3;2953:5;2947:12;2980:6;2975:3;2968:19;3006:4;3035:2;3030:3;3026:12;3019:19;;3072:2;3065:5;3061:14;3093:1;3103:195;3117:6;3114:1;3111:13;3103:195;;;3182:13;;-1:-1:-1;;;;;3178:39:1;3166:52;;3238:12;;;;3273:15;;;;3214:1;3132:9;3103:195;;;-1:-1:-1;3314:3:1;;2862:461;-1:-1:-1;;;;;2862:461:1:o;4801:597::-;4913:4;4942:2;4971;4960:9;4953:21;5003:6;4997:13;5046:6;5041:2;5030:9;5026:18;5019:34;5071:1;5081:140;5095:6;5092:1;5089:13;5081:140;;;5190:14;;;5186:23;;5180:30;5156:17;;;5175:2;5152:26;5145:66;5110:10;;5081:140;;;5239:6;5236:1;5233:13;5230:91;;;5309:1;5304:2;5295:6;5284:9;5280:22;5276:31;5269:42;5230:91;-1:-1:-1;5382:2:1;5361:15;-1:-1:-1;;5357:29:1;5342:45;;;;5389:2;5338:54;;4801:597;-1:-1:-1;;;4801:597:1:o;11377:356::-;11579:2;11561:21;;;11598:18;;;11591:30;11657:34;11652:2;11637:18;;11630:62;11724:2;11709:18;;11377:356::o;14434:332::-;14641:6;14630:9;14623:25;14684:2;14679;14668:9;14664:18;14657:30;14604:4;14704:56;14756:2;14745:9;14741:18;14733:6;14704:56;:::i;:::-;14696:64;14434:332;-1:-1:-1;;;;14434:332:1:o;14771:582::-;15070:6;15059:9;15052:25;15113:6;15108:2;15097:9;15093:18;15086:34;15156:3;15151:2;15140:9;15136:18;15129:31;15033:4;15177:57;15229:3;15218:9;15214:19;15206:6;15177:57;:::i;:::-;-1:-1:-1;;;;;15270:32:1;;;;15265:2;15250:18;;15243:60;-1:-1:-1;15334:3:1;15319:19;15312:35;15169:65;14771:582;-1:-1:-1;;;14771:582:1:o;15871:128::-;15911:3;15942:1;15938:6;15935:1;15932:13;15929:39;;;15948:18;;:::i;:::-;-1:-1:-1;15984:9:1;;15871:128::o;16004:217::-;16044:1;16070;16060:132;;16114:10;16109:3;16105:20;16102:1;16095:31;16149:4;16146:1;16139:15;16177:4;16174:1;16167:15;16060:132;-1:-1:-1;16206:9:1;;16004:217::o;16226:168::-;16266:7;16332:1;16328;16324:6;16320:14;16317:1;16314:21;16309:1;16302:9;16295:17;16291:45;16288:71;;;16339:18;;:::i;:::-;-1:-1:-1;16379:9:1;;16226:168::o;16399:125::-;16439:4;16467:1;16464;16461:8;16458:34;;;16472:18;;:::i;:::-;-1:-1:-1;16509:9:1;;16399:125::o;16529:380::-;16608:1;16604:12;;;;16651;;;16672:61;;16726:4;16718:6;16714:17;16704:27;;16672:61;16779:2;16771:6;16768:14;16748:18;16745:38;16742:161;;;16825:10;16820:3;16816:20;16813:1;16806:31;16860:4;16857:1;16850:15;16888:4;16885:1;16878:15;16742:161;;16529:380;;;:::o;16914:135::-;16953:3;-1:-1:-1;;16974:17:1;;16971:43;;;16994:18;;:::i;:::-;-1:-1:-1;17041:1:1;17030:13;;16914:135::o;17054:127::-;17115:10;17110:3;17106:20;17103:1;17096:31;17146:4;17143:1;17136:15;17170:4;17167:1;17160:15;17186:127;17247:10;17242:3;17238:20;17235:1;17228:31;17278:4;17275:1;17268:15;17302:4;17299:1;17292:15;17318:127;17379:10;17374:3;17370:20;17367:1;17360:31;17410:4;17407:1;17400:15;17434:4;17431:1;17424:15;17582:131;-1:-1:-1;;;;;17657:31:1;;17647:42;;17637:70;;17703:1;17700;17693:12
Swarm Source
ipfs://7c88aa75ae29bc1147a587b30d162622f943f05edaed0ea66758b8dafc4fd7e9
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.