Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000 WHISKEY
Holders
37
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
6,846.643463764 WHISKEYValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WHISKEY
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.18; /** * Abstract contract to easily change things when deploying new projects. Saves me having to find it everywhere. */ abstract contract Project { address public marketingWallet = 0x3dC930C7C71A37747369DfDBa00209e0f8A9cF2b; address public devWallet = 0xD943502d9D7aD18b7ABb502Ae1cd7DcDBB8469bc; string constant _name = "WHISKEY"; string constant _symbol = "WHISKEY"; uint8 constant _decimals = 9; uint256 _totalSupply = 1 * 10**6 * 10**_decimals; uint256 public _maxTxAmount = (_totalSupply * 20) / 1000; // (_totalSupply * 10) / 1000 [this equals 1%] uint256 public _maxWalletToken = (_totalSupply * 20) / 1000; // uint256 public buyFee = 5; uint256 public buyTotalFee = buyFee; uint256 public swapLpFee = 1; uint256 public swapMarketing = 3; uint256 public swapTreasuryFee = 1; uint256 public swapTotalFee = swapMarketing + swapLpFee + swapTreasuryFee; uint256 public transFee = 5; uint256 public feeDenominator = 100; } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Context { //function _msgSender() internal view virtual returns (address payable) { function _msgSender() internal view virtual returns (address) { return 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; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ 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 geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds 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; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /** * MainContract */ contract WHISKEY is Project, IERC20, Ownable { using SafeMath for uint256; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) isFeeExempt; mapping (address => bool) isTxLimitExempt; mapping (address => bool) isMaxExempt; mapping (address => bool) isTimelockExempt; address public autoLiquidityReceiver; uint256 targetLiquidity = 20; uint256 targetLiquidityDenominator = 100; IUniswapV2Router02 public immutable contractRouter; address public immutable uniswapV2Pair; bool public tradingOpen = false; bool public buyCooldownEnabled = true; uint8 public cooldownTimerInterval = 10; mapping (address => uint) private cooldownTimer; bool public swapEnabled = true; uint256 public swapThreshold = _totalSupply * 30 / 10000; uint256 public swapAmount = _totalSupply * 30 / 10000; uint256 public percentForLPBurn = 50; // 30 / 10000 * 100 = 0.3% to burn bool public lpBurnEnabled = true; uint256 public lpBurnFrequency = 600 seconds; uint256 public lastLpBurnTime; uint256 launchedAt; uint256 public percentDividor = 10000; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } event AutoWHISKEYLP(); constructor () { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables contractRouter = _uniswapV2Router; _allowances[address(this)][address(contractRouter)] = type(uint256).max; isFeeExempt[msg.sender] = true; isTxLimitExempt[msg.sender] = true; isMaxExempt[msg.sender] = true; isTimelockExempt[msg.sender] = true; isTimelockExempt[DEAD] = true; isTimelockExempt[address(this)] = true; isFeeExempt[marketingWallet] = true; isMaxExempt[marketingWallet] = true; isTxLimitExempt[marketingWallet] = true; autoLiquidityReceiver = msg.sender; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } receive() external payable { } function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure override returns (uint8) { return _decimals; } function symbol() external pure override returns (string memory) { return _symbol; } function name() external pure override returns (string memory) { return _name; } function getOwner() external view override returns (address) { return owner(); } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, type(uint256).max); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != type(uint256).max){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance"); } return _transferFrom(sender, recipient, amount); } function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() { _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000; } function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() { _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000; } function setTxLimit(uint256 amount) external onlyOwner() { _maxTxAmount = amount; } // *** // Functions for the burning mechanism // *** /** * Burn an amount of tokens for the current wallet (if they have enough) */ function burnTokens(uint256 amount) external { // does this user have enough tokens to perform the burn if(_balances[msg.sender] > amount) { _basicTransfer(msg.sender, DEAD, amount); } } // *** // End functions for the burning mechanism // *** function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { if(inSwap){ return _basicTransfer(sender, recipient, amount); } if(sender != owner() && recipient != owner()){ require(tradingOpen,"Trading not open yet"); } bool inSell = (recipient == uniswapV2Pair); bool inTransfer = (recipient != uniswapV2Pair && sender != uniswapV2Pair); if (recipient != address(this) && recipient != address(DEAD) && recipient != uniswapV2Pair && recipient != marketingWallet && recipient != devWallet && recipient != autoLiquidityReceiver ){ uint256 heldTokens = balanceOf(recipient); if(!isMaxExempt[recipient]) { require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much."); } } if (sender == uniswapV2Pair && buyCooldownEnabled && !isTimelockExempt[recipient] ){ require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys"); cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval; } // Checks max transaction limit // but no point if the recipient is exempt // this check ensures that someone that is buying and is txnExempt then they are able to buy any amount if(!isTxLimitExempt[recipient]) { checkTxLimit(sender, amount); } //Exchange tokens _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 amountReceived = amount; if (lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !isFeeExempt[sender] ) { autoBurnLiquidityPairTokens(); } // Do NOT take a fee if sender AND recipient are NOT the contract // i.e. you are doing a transfer if(inTransfer) { if(transFee > 0) { amountReceived = takeTransferFee(sender, amount); } } else { amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount; if(shouldSwapBack()){ swapBack(); } } _balances[recipient] = _balances[recipient].add(amountReceived); emit Transfer(sender, recipient, amountReceived); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function checkTxLimit(address sender, uint256 amount) internal view { require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); } function shouldTakeFee(address sender) internal view returns (bool) { return !isFeeExempt[sender]; } // *** // Handle Fees // *** function takeTransferFee(address sender, uint256 amount) internal returns (uint256) { uint256 feeToTake = transFee; uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) { uint256 feeToTake = isSell ? swapTotalFee : buyTotalFee; uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } // *** // End Handle Fees // *** function shouldSwapBack() internal view returns (bool) { return msg.sender != uniswapV2Pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } function clearStuckBalance(uint256 amountPercentage) external onlyOwner() { uint256 amountETH = address(this).balance; payable(marketingWallet).transfer(amountETH * amountPercentage / 100); } function clearStuckBalance_sender(uint256 amountPercentage) external onlyOwner() { uint256 amountETH = address(this).balance; payable(msg.sender).transfer(amountETH * amountPercentage / 100); } // switch Trading function tradingStatus(bool _status) public onlyOwner { tradingOpen = _status; lastLpBurnTime = block.timestamp; launchedAt = block.number; } // enable cooldown between trades function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner { buyCooldownEnabled = _status; cooldownTimerInterval = _interval; } function swapBack() internal swapping { uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : swapLpFee; uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(swapTotalFee).div(2); uint256 amountToSwap = swapAmount.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = contractRouter.WETH(); uint256 balanceBefore = address(this).balance; contractRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance.sub(balanceBefore); uint256 totalETHFee = swapTotalFee.sub(dynamicLiquidityFee.div(2)); uint256 amountETHLiquidity = amountETH.mul(swapLpFee).div(totalETHFee).div(2); uint256 amountETHMarketing = amountETH.mul(swapMarketing).div(totalETHFee); uint256 amountETHTreasury = amountETH.mul(swapTreasuryFee).div(totalETHFee); (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}(""); (tmpSuccess,) = payable(devWallet).call{value: amountETHTreasury, gas: 30000}(""); // Supress warning msg tmpSuccess = false; if(amountToLiquify > 0){ contractRouter.addLiquidityETH{value: amountETHLiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(amountETHLiquidity, amountToLiquify); } } // *** // Various exempt functions // *** function setIsFeeExempt(address holder, bool exempt) external onlyOwner() { isFeeExempt[holder] = exempt; } function setIsMaxExempt(address holder, bool exempt) external onlyOwner() { isMaxExempt[holder] = exempt; } function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner() { isTxLimitExempt[holder] = exempt; } function setIsTimelockExempt(address holder, bool exempt) external onlyOwner() { isTimelockExempt[holder] = exempt; } // *** // End various exempt functions // *** // *** // Start fee things // *** function setTransFee(uint256 fee) external onlyOwner() { transFee = fee; } function setSwapFees(uint256 _newSwapLpFee, uint256 _newSwapMarketingFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() { swapLpFee = _newSwapLpFee; swapMarketing = _newSwapMarketingFee; swapTreasuryFee = _newSwapTreasuryFee; swapTotalFee = _newSwapLpFee.add(_newSwapMarketingFee).add(_newSwapTreasuryFee); feeDenominator = _feeDenominator; require(swapTotalFee < 90, "Fees cannot be that high"); } function setBuyFees(uint256 buyTax) external onlyOwner() { buyTotalFee = buyTax; } // *** // end fee stuff§2e sw. // *** function setTreasuryFeeReceiver(address _newWallet) external onlyOwner() { isFeeExempt[devWallet] = false; isFeeExempt[_newWallet] = true; devWallet = _newWallet; } function setMarketingWallet(address _newWallet) external onlyOwner() { isFeeExempt[marketingWallet] = false; isFeeExempt[_newWallet] = true; isMaxExempt[_newWallet] = true; marketingWallet = _newWallet; } function setFeeReceivers(address _autoLiquidityReceiver, address _newMarketingWallet, address _newdevWallet ) external onlyOwner() { isFeeExempt[devWallet] = false; isFeeExempt[_newdevWallet] = true; isFeeExempt[marketingWallet] = false; isFeeExempt[_newMarketingWallet] = true; isMaxExempt[_newMarketingWallet] = true; autoLiquidityReceiver = _autoLiquidityReceiver; marketingWallet = _newMarketingWallet; devWallet = _newdevWallet; } // *** // Swap settings // *** function setSwapThresholdAmount(uint256 _amount) external onlyOwner() { swapThreshold = _amount; } function setSwapAmount(uint256 _amount) external onlyOwner() { if(_amount > swapThreshold) { swapAmount = swapThreshold; } else { swapAmount = _amount; } } // *** // End Swap settings // *** function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner() { targetLiquidity = _target; targetLiquidityDenominator = _denominator; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { return accuracy.mul(balanceOf(uniswapV2Pair).mul(2)).div(getCirculatingSupply()); } function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidityBacking(accuracy) > target; } event AutoLiquify(uint256 amountETH, uint256 amountBOG); function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _enabled) external onlyOwner { require(_frequencyInSeconds >= 600, "Cannot burn more often than every 10 minutes"); require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%"); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _enabled; } function autoBurnLiquidityPairTokens() internal returns (bool){ lastLpBurnTime = block.timestamp; uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(percentDividor); if (amountToBurn > 0){ _transferFrom(uniswapV2Pair, address(0xdead), amountToBurn); } IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit AutoWHISKEYLP(); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoWHISKEYLP","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_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":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentDividor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newdevWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setTreasuryFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600080546001600160a01b0319908116733dc930c7c71a37747369dfdba00209e0f8a9cf2b179091556001805490911673d943502d9d7ad18b7abb502ae1cd7dcdbb8469bc1790556200005a6009600a620005a4565b6200006990620f4240620005bc565b6002556103e86002546014620000809190620005bc565b6200008c9190620005d6565b6003556103e86002546014620000a39190620005bc565b620000af9190620005d6565b600455600580805560065560016007819055600360088190556009829055620000da908290620005f9565b620000e69190620005f9565b600a556005600b556064600c8190556010805461dead6001600160a01b0319918216179091556011805490911690556014601955601a55601b805462ffffff1916620a0100179055601d805460ff19166001179055600254612710906200014f90601e620005bc565b6200015b9190620005d6565b601e55612710600254601e620001729190620005bc565b6200017e9190620005d6565b601f5560326020556021805460ff19166001179055610258602255612710602555348015620001ac57600080fd5b50600d80546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026e91906200060f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e291906200060f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035691906200060f565b6001600160a01b0390811660a052818116608081905230600081815260136020908152604080832094835293815283822060001990553380835260148083528584208054600160ff19918216811790925560158086528887208054831684179055601680875289882080548416851790556017875289882080548416851790556010548b1688528988208054841685179055978752888720805483168417905586548a168752928552878620805482168317905585548916865295845286852080548716821790558454909716845282528483208054909416909517909255601880546001600160a01b03191685179055600254848252601283528382208190559251928352917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200063a565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004e6578160001904821115620004ca57620004ca6200048f565b80851615620004d857918102915b93841c9390800290620004aa565b509250929050565b600082620004ff575060016200059e565b816200050e575060006200059e565b8160018114620005275760028114620005325762000552565b60019150506200059e565b60ff8411156200054657620005466200048f565b50506001821b6200059e565b5060208310610133831016604e8410600b841016171562000577575081810a6200059e565b620005838383620004a5565b80600019048211156200059a576200059a6200048f565b0290505b92915050565b6000620005b560ff841683620004ee565b9392505050565b80820281158282048414176200059e576200059e6200048f565b600082620005f457634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200059e576200059e6200048f565b6000602082840312156200062257600080fd5b81516001600160a01b0381168114620005b557600080fd5b60805160a051612ca0620006b460003960008181610724015281816115a601528181611a2601528181611a6001528181611ac701528181611c000152818161206c0152818161210e0152818161213c015261234301526000818161082f015281816124690152818161252301526127260152612ca06000f3fe6080604052600436106103f35760003560e01c806367ac77b411610208578063a9059cbb11610118578063dd467064116100ab578063ee9ef29e1161007a578063ee9ef29e14610b91578063f2fde38b14610bb1578063f53fd58414610bd1578063f84ba65d14610be7578063ffb54a9914610c0757600080fd5b8063dd46706414610af5578063dd62ed3e14610b15578063e53c30b014610b5b578063e632313c14610b7157600080fd5b8063d51ed1c8116100e7578063d51ed1c814610a75578063d7c0103214610a95578063dcf7aef314610ab5578063dd395c6314610ad557600080fd5b8063a9059cbb14610a00578063b6c5232414610a20578063bd9ab53714610a35578063ca33e64c14610a5557600080fd5b806378109e541161019b5780638da5cb5b1161016a5780638da5cb5b146109975780638ea5220f146109b557806395d89b411461043e578063a4c82a00146109d5578063a69df4b5146109eb57600080fd5b806378109e54146109365780637d1db4a51461094c5780638038cbd314610962578063893d20e81461098257600080fd5b8063715018a6116101d7578063715018a6146108c1578063722b62ad146108d6578063730c1888146108f657806375f0a8741461091657600080fd5b806367ac77b41461081d5780636d1b229d146108515780636ddd17131461087157806370a082311461088b57600080fd5b80632c3e486c1161030357806346e421a211610296578063571ac8b011610265578063571ac8b01461077e5780635c85974f1461079e5780635d098b38146107be578063617fe0ed146107de578063658d4b7f146107fd57600080fd5b806346e421a2146106e657806347062402146106fc57806349bd5a5e1461071257806350db71fb1461075e57600080fd5b8063313ce567116102d2578063313ce567146106785780633705b3921461069a57806344a33fd2146106b057806344a37752146106d057600080fd5b80632c3e486c146106125780632d594567146106285780632e82f1a0146106485780632e8fa8211461066257600080fd5b806318160ddd116103865780631e25dc54116103555780631e25dc5414610587578063201e79911461059d57806323b872dd146105bd57806329e04b4a146105dd5780632b112e49146105fd57600080fd5b806318160ddd1461051c578063199ffc72146105315780631ad017b9146105475780631da1db5e1461056757600080fd5b8063095ea7b3116103c2578063095ea7b3146104965780630d295980146104c65780631161ae39146104e6578063180b0d7e1461050657600080fd5b8063026f7d15146103ff5780630445b6671461042857806306fdde031461043e57806309302dc61461047457600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b5061041560085481565b6040519081526020015b60405180910390f35b34801561043457600080fd5b50610415601e5481565b34801561044a57600080fd5b506040805180820182526007815266574849534b455960c81b6020820152905161041f91906127eb565b34801561048057600080fd5b5061049461048f366004612839565b610c21565b005b3480156104a257600080fd5b506104b66104b1366004612867565b610c75565b604051901515815260200161041f565b3480156104d257600080fd5b506104946104e13660046128a8565b610ce2565b3480156104f257600080fd5b506104b66105013660046128c3565b610d27565b34801561051257600080fd5b50610415600c5481565b34801561052857600080fd5b50600254610415565b34801561053d57600080fd5b5061041560205481565b34801561055357600080fd5b506104946105623660046128e5565b610d3b565b34801561057357600080fd5b50610494610582366004612839565b610db5565b34801561059357600080fd5b50610415600b5481565b3480156105a957600080fd5b506104946105b83660046128c3565b610e33565b3480156105c957600080fd5b506104b66105d8366004612902565b610e68565b3480156105e957600080fd5b506104946105f8366004612839565b610f2a565b34801561060957600080fd5b50610415610f59565b34801561061e57600080fd5b5061041560225481565b34801561063457600080fd5b50610494610643366004612943565b610fab565b34801561065457600080fd5b506021546104b69060ff1681565b34801561066e57600080fd5b50610415601f5481565b34801561068457600080fd5b5060095b60405160ff909116815260200161041f565b3480156106a657600080fd5b5061041560065481565b3480156106bc57600080fd5b506104946106cb366004612839565b611006565b3480156106dc57600080fd5b5061041560255481565b3480156106f257600080fd5b5061041560075481565b34801561070857600080fd5b5061041560055481565b34801561071e57600080fd5b506107467f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161041f565b34801561076a57600080fd5b50610494610779366004612980565b611041565b34801561078a57600080fd5b506104b66107993660046128e5565b611096565b3480156107aa57600080fd5b506104946107b9366004612839565b6110a4565b3480156107ca57600080fd5b506104946107d93660046128e5565b6110d3565b3480156107ea57600080fd5b50601b546104b690610100900460ff1681565b34801561080957600080fd5b50610494610818366004612980565b61115f565b34801561082957600080fd5b506107467f000000000000000000000000000000000000000000000000000000000000000081565b34801561085d57600080fd5b5061049461086c366004612839565b6111b4565b34801561087d57600080fd5b50601d546104b69060ff1681565b34801561089757600080fd5b506104156108a63660046128e5565b6001600160a01b031660009081526012602052604090205490565b3480156108cd57600080fd5b506104946111e8565b3480156108e257600080fd5b50601b546106889062010000900460ff1681565b34801561090257600080fd5b506104946109113660046129b5565b61124a565b34801561092257600080fd5b50600054610746906001600160a01b031681565b34801561094257600080fd5b5061041560045481565b34801561095857600080fd5b5061041560035481565b34801561096e57600080fd5b5061049461097d3660046129ea565b61136c565b34801561098e57600080fd5b50610746611418565b3480156109a357600080fd5b50600d546001600160a01b0316610746565b3480156109c157600080fd5b50600154610746906001600160a01b031681565b3480156109e157600080fd5b5061041560235481565b3480156109f757600080fd5b5061049461142c565b348015610a0c57600080fd5b506104b6610a1b366004612867565b611534565b348015610a2c57600080fd5b50600f54610415565b348015610a4157600080fd5b50610494610a50366004612839565b611541565b348015610a6157600080fd5b50601854610746906001600160a01b031681565b348015610a8157600080fd5b50610415610a90366004612839565b61158c565b348015610aa157600080fd5b50610494610ab0366004612a1c565b6115f3565b348015610ac157600080fd5b50610494610ad0366004612839565b6116b6565b348015610ae157600080fd5b50610494610af0366004612980565b6116e5565b348015610b0157600080fd5b50610494610b10366004612839565b61173a565b348015610b2157600080fd5b50610415610b30366004612a67565b6001600160a01b03918216600090815260136020908152604080832093909416825291909152205490565b348015610b6757600080fd5b50610415600a5481565b348015610b7d57600080fd5b50610494610b8c366004612839565b6117bf565b348015610b9d57600080fd5b50610494610bac366004612839565b611801565b348015610bbd57600080fd5b50610494610bcc3660046128e5565b611830565b348015610bdd57600080fd5b5061041560095481565b348015610bf357600080fd5b50610494610c02366004612980565b611909565b348015610c1357600080fd5b50601b546104b69060ff1681565b600d546001600160a01b03163314610c545760405162461bcd60e51b8152600401610c4b90612a95565b60405180910390fd5b6103e881600254610c659190612ae0565b610c6f9190612af7565b60045550565b3360008181526013602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610cd09086815260200190565b60405180910390a35060015b92915050565b600d546001600160a01b03163314610d0c5760405162461bcd60e51b8152600401610c4b90612a95565b601b805460ff19169115159190911790554260235543602455565b600082610d338361158c565b119392505050565b600d546001600160a01b03163314610d655760405162461bcd60e51b8152600401610c4b90612a95565b600180546001600160a01b03908116600090815260146020526040808220805460ff19908116909155949092168082529190208054909316821790925580546001600160a01b0319169091179055565b600d546001600160a01b03163314610ddf5760405162461bcd60e51b8152600401610c4b90612a95565b60005447906001600160a01b03166108fc6064610dfc8585612ae0565b610e069190612af7565b6040518115909202916000818181858888f19350505050158015610e2e573d6000803e3d6000fd5b505050565b600d546001600160a01b03163314610e5d5760405162461bcd60e51b8152600401610c4b90612a95565b601991909155601a55565b6001600160a01b038316600090815260136020908152604080832033845290915281205460001914610f15576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601382528381203382529091529190912054610ef091849061195e565b6001600160a01b03851660009081526013602090815260408083203384529091529020555b610f2084848461198a565b90505b9392505050565b600d546001600160a01b03163314610f545760405162461bcd60e51b8152600401610c4b90612a95565b601e55565b6011546001600160a01b0316600090815260126020526040812054610fa6906010546001600160a01b0316600090815260126020526040902054610fa09060025490611ee4565b90611ee4565b905090565b600d546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610c4b90612a95565b601b805462ffff0019166101009315159390930262ff00001916929092176201000060ff9290921691909102179055565b600d546001600160a01b031633146110305760405162461bcd60e51b8152600401610c4b90612a95565b47336108fc6064610dfc8585612ae0565b600d546001600160a01b0316331461106b5760405162461bcd60e51b8152600401610c4b90612a95565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000610cdc82600019610c75565b600d546001600160a01b031633146110ce5760405162461bcd60e51b8152600401610c4b90612a95565b600355565b600d546001600160a01b031633146110fd5760405162461bcd60e51b8152600401610c4b90612a95565b600080546001600160a01b039081168252601460209081526040808420805460ff1990811690915594909216808452828420805486166001908117909155601690925291832080549094161790925580546001600160a01b0319169091179055565b600d546001600160a01b031633146111895760405162461bcd60e51b8152600401610c4b90612a95565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b336000908152601260205260409020548110156111e5576010546111e39033906001600160a01b031683611ef0565b505b50565b600d546001600160a01b031633146112125760405162461bcd60e51b8152600401610c4b90612a95565b600d546040516000916001600160a01b031690600080516020612c2b833981519152908390a3600d80546001600160a01b0319169055565b600d546001600160a01b031633146112745760405162461bcd60e51b8152600401610c4b90612a95565b6102588310156112db5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f74206275726e206d6f7265206f6674656e207468616e206576657260448201526b79203130206d696e7574657360a01b6064820152608401610c4b565b6103e882111580156112eb575060015b6113505760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610c4b565b6022929092556020556021805460ff1916911515919091179055565b600d546001600160a01b031633146113965760405162461bcd60e51b8152600401610c4b90612a95565b6007849055600883905560098290556113b9826113b38686611fc4565b90611fc4565b600a819055600c829055605a116114125760405162461bcd60e51b815260206004820152601860248201527f466565732063616e6e6f742062652074686174206869676800000000000000006044820152606401610c4b565b50505050565b6000610fa6600d546001600160a01b031690565b600e546001600160a01b031633146114925760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c4b565b600f5442116114e35760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610c4b565b600e54600d546040516001600160a01b039283169290911690600080516020612c2b83398151915290600090a3600e54600d80546001600160a01b0319166001600160a01b03909216919091179055565b6000610f2333848461198a565b600d546001600160a01b0316331461156b5760405162461bcd60e51b8152600401610c4b90612a95565b6103e88160025461157c9190612ae0565b6115869190612af7565b60035550565b6000610cdc611599610f59565b6115ed6115e660026115e07f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526012602052604090205490565b90611fd0565b8590611fd0565b90611fdc565b600d546001600160a01b0316331461161d5760405162461bcd60e51b8152600401610c4b90612a95565b600180546001600160a01b039081166000908152601460209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601690925282208054909516841790945560188054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b600d546001600160a01b031633146116e05760405162461bcd60e51b8152600401610c4b90612a95565b600655565b600d546001600160a01b0316331461170f5760405162461bcd60e51b8152600401610c4b90612a95565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b600d546001600160a01b031633146117645760405162461bcd60e51b8152600401610c4b90612a95565b600d8054600e80546001600160a01b03199081166001600160a01b038416179091551690556117938142612b19565b600f55600d546040516000916001600160a01b031690600080516020612c2b833981519152908390a350565b600d546001600160a01b031633146117e95760405162461bcd60e51b8152600401610c4b90612a95565b601e548111156117fc57601e54601f5550565b601f55565b600d546001600160a01b0316331461182b5760405162461bcd60e51b8152600401610c4b90612a95565b600b55565b600d546001600160a01b0316331461185a5760405162461bcd60e51b8152600401610c4b90612a95565b6001600160a01b0381166118bf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c4b565b600d546040516001600160a01b03808416921690600080516020612c2b83398151915290600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b031633146119335760405162461bcd60e51b8152600401610c4b90612a95565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b600081848411156119825760405162461bcd60e51b8152600401610c4b91906127eb565b505050900390565b60265460009060ff16156119aa576119a3848484611ef0565b9050610f23565b600d546001600160a01b038581169116148015906119d65750600d546001600160a01b03848116911614155b15611a2457601b5460ff16611a245760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c4b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416146000811582611a9557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611abe57506010546001600160a01b03868116911614155b8015611afc57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611b1657506000546001600160a01b03868116911614155b8015611b3057506001546001600160a01b03868116911614155b8015611b4a57506018546001600160a01b03868116911614155b15611bfe576001600160a01b03851660009081526012602090815260408083205460169092529091205460ff16611bfc57600454611b888683612b19565b1115611bfc5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610c4b565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316148015611c465750601b54610100900460ff165b8015611c6b57506001600160a01b03851660009081526017602052604090205460ff16155b15611d15576001600160a01b0385166000908152601c60205260409020544211611ce55760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610c4b565b601b54611cfb9062010000900460ff1642612b19565b6001600160a01b0386166000908152601c60205260409020555b6001600160a01b03851660009081526015602052604090205460ff16611d3f57611d3f8685611fe8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260129091529190912054611d9191869061195e565b6001600160a01b038716600090815260126020526040902055602154849060ff168015611dcd5750602254602354611dc99190612b19565b4210155b8015611df257506001600160a01b03871660009081526014602052604090205460ff16155b15611e0157611dff612051565b505b8115611e2157600b5415611e1c57611e1987866121e3565b90505b611e6a565b6001600160a01b03871660009081526014602052604090205460ff1615611e485784611e53565b611e53878685612285565b9050611e5d612336565b15611e6a57611e6a6123a2565b6001600160a01b038616600090815260126020526040902054611e8d9082611fc4565b6001600160a01b038088166000818152601260205260409081902093909355915190891690600080516020612c4b83398151915290611ecf9085815260200190565b60405180910390a35060019695505050505050565b6000610f238284612b2c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152601290915291822054611f4191849061195e565b6001600160a01b038086166000908152601260205260408082209390935590851681522054611f709083611fc4565b6001600160a01b038085166000818152601260205260409081902093909355915190861690600080516020612c4b83398151915290611fb29086815260200190565b60405180910390a35060019392505050565b6000610f238284612b19565b6000610f238284612ae0565b6000610f238284612af7565b6003548111158061201157506001600160a01b03821660009081526015602052604090205460ff165b6111e35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c4b565b426023556040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819030906370a0823190602401602060405180830381865afa1580156120be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e29190612b3f565b905060006121016025546115ed60205485611fd090919063ffffffff16565b90508015612138576121367f000000000000000000000000000000000000000000000000000000000000000061dead8361198a565b505b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561219857600080fd5b505af11580156121ac573d6000803e3d6000fd5b50506040517f369bbe90a14ed88a02d5d4c1a3b57fbc571fb5871ab9992049da256d622e09df925060009150a16001935050505090565b600080600b549050600061220e600c5460646121ff9190612ae0565b6115ed60646115e08887611fd0565b3060009081526012602052604090205490915061222b9082611fc4565b30600081815260126020526040908190209290925590516001600160a01b03871690600080516020612c4b8339815191529061226a9085815260200190565b60405180910390a361227c8482611ee4565b95945050505050565b6000808261229557600654612299565b600a545b905060006122be600c5460646122af9190612ae0565b6115ed60646115e08987611fd0565b306000908152601260205260409020549091506122db9082611fc4565b30600081815260126020526040908190209290925590516001600160a01b03881690600080516020612c4b8339815191529061231a9085815260200190565b60405180910390a361232c8582611ee4565b9695505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590612374575060265460ff16155b80156123825750601d5460ff165b8015610fa6575050601e5430600090815260126020526040902054101590565b6026805460ff19166001179055601954601a546000916123c191610d27565b6123cd576007546123d0565b60005b905060006123f460026115ed600a546115ed86601f54611fd090919063ffffffff16565b9050600061240d82601f54611ee490919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061244757612447612b58565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e99190612b6e565b816001815181106124fc576124fc612b58565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612561908690600090879030904290600401612b8b565b600060405180830381600087803b15801561257b57600080fd5b505af115801561258f573d6000803e3d6000fd5b5050505060006125a88247611ee490919063ffffffff16565b905060006125c36125ba886002611fdc565b600a5490611ee4565b905060006125e560026115ed846115ed60075488611fd090919063ffffffff16565b90506000612602836115ed60085487611fd090919063ffffffff16565b9050600061261f846115ed60095488611fd090919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612676576040519150601f19603f3d011682016040523d82523d6000602084013e61267b565b606091505b50506001546040519192506001600160a01b0316906175309084906000818181858888f193505050503d80600081146126d0576040519150601f19603f3d011682016040523d82523d6000602084013e6126d5565b606091505b5060009250508a1590506127d45760185460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990869060c40160606040518083038185885af1158015612772573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127979190612bfc565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506026805460ff19169055505050505050505050565b600060208083528351808285015260005b81811015612818578581018301518582016040015282016127fc565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561284b57600080fd5b5035919050565b6001600160a01b03811681146111e557600080fd5b6000806040838503121561287a57600080fd5b823561288581612852565b946020939093013593505050565b803580151581146128a357600080fd5b919050565b6000602082840312156128ba57600080fd5b610f2382612893565b600080604083850312156128d657600080fd5b50508035926020909101359150565b6000602082840312156128f757600080fd5b8135610f2381612852565b60008060006060848603121561291757600080fd5b833561292281612852565b9250602084013561293281612852565b929592945050506040919091013590565b6000806040838503121561295657600080fd5b61295f83612893565b9150602083013560ff8116811461297557600080fd5b809150509250929050565b6000806040838503121561299357600080fd5b823561299e81612852565b91506129ac60208401612893565b90509250929050565b6000806000606084860312156129ca57600080fd5b83359250602084013591506129e160408501612893565b90509250925092565b60008060008060808587031215612a0057600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612a3157600080fd5b8335612a3c81612852565b92506020840135612a4c81612852565b91506040840135612a5c81612852565b809150509250925092565b60008060408385031215612a7a57600080fd5b8235612a8581612852565b9150602083013561297581612852565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cdc57610cdc612aca565b600082612b1457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cdc57610cdc612aca565b81810381811115610cdc57610cdc612aca565b600060208284031215612b5157600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612b8057600080fd5b8151610f2381612852565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612bdb5784516001600160a01b031683529383019391830191600101612bb6565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612c1157600080fd5b835192506020840151915060408401519050925092509256fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b1c1b6cb97bc9c2e73f65933d5e224bd6753f47cc47e4ab67cfdb1535e6d8b864736f6c63430008120033
Deployed Bytecode
0x6080604052600436106103f35760003560e01c806367ac77b411610208578063a9059cbb11610118578063dd467064116100ab578063ee9ef29e1161007a578063ee9ef29e14610b91578063f2fde38b14610bb1578063f53fd58414610bd1578063f84ba65d14610be7578063ffb54a9914610c0757600080fd5b8063dd46706414610af5578063dd62ed3e14610b15578063e53c30b014610b5b578063e632313c14610b7157600080fd5b8063d51ed1c8116100e7578063d51ed1c814610a75578063d7c0103214610a95578063dcf7aef314610ab5578063dd395c6314610ad557600080fd5b8063a9059cbb14610a00578063b6c5232414610a20578063bd9ab53714610a35578063ca33e64c14610a5557600080fd5b806378109e541161019b5780638da5cb5b1161016a5780638da5cb5b146109975780638ea5220f146109b557806395d89b411461043e578063a4c82a00146109d5578063a69df4b5146109eb57600080fd5b806378109e54146109365780637d1db4a51461094c5780638038cbd314610962578063893d20e81461098257600080fd5b8063715018a6116101d7578063715018a6146108c1578063722b62ad146108d6578063730c1888146108f657806375f0a8741461091657600080fd5b806367ac77b41461081d5780636d1b229d146108515780636ddd17131461087157806370a082311461088b57600080fd5b80632c3e486c1161030357806346e421a211610296578063571ac8b011610265578063571ac8b01461077e5780635c85974f1461079e5780635d098b38146107be578063617fe0ed146107de578063658d4b7f146107fd57600080fd5b806346e421a2146106e657806347062402146106fc57806349bd5a5e1461071257806350db71fb1461075e57600080fd5b8063313ce567116102d2578063313ce567146106785780633705b3921461069a57806344a33fd2146106b057806344a37752146106d057600080fd5b80632c3e486c146106125780632d594567146106285780632e82f1a0146106485780632e8fa8211461066257600080fd5b806318160ddd116103865780631e25dc54116103555780631e25dc5414610587578063201e79911461059d57806323b872dd146105bd57806329e04b4a146105dd5780632b112e49146105fd57600080fd5b806318160ddd1461051c578063199ffc72146105315780631ad017b9146105475780631da1db5e1461056757600080fd5b8063095ea7b3116103c2578063095ea7b3146104965780630d295980146104c65780631161ae39146104e6578063180b0d7e1461050657600080fd5b8063026f7d15146103ff5780630445b6671461042857806306fdde031461043e57806309302dc61461047457600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b5061041560085481565b6040519081526020015b60405180910390f35b34801561043457600080fd5b50610415601e5481565b34801561044a57600080fd5b506040805180820182526007815266574849534b455960c81b6020820152905161041f91906127eb565b34801561048057600080fd5b5061049461048f366004612839565b610c21565b005b3480156104a257600080fd5b506104b66104b1366004612867565b610c75565b604051901515815260200161041f565b3480156104d257600080fd5b506104946104e13660046128a8565b610ce2565b3480156104f257600080fd5b506104b66105013660046128c3565b610d27565b34801561051257600080fd5b50610415600c5481565b34801561052857600080fd5b50600254610415565b34801561053d57600080fd5b5061041560205481565b34801561055357600080fd5b506104946105623660046128e5565b610d3b565b34801561057357600080fd5b50610494610582366004612839565b610db5565b34801561059357600080fd5b50610415600b5481565b3480156105a957600080fd5b506104946105b83660046128c3565b610e33565b3480156105c957600080fd5b506104b66105d8366004612902565b610e68565b3480156105e957600080fd5b506104946105f8366004612839565b610f2a565b34801561060957600080fd5b50610415610f59565b34801561061e57600080fd5b5061041560225481565b34801561063457600080fd5b50610494610643366004612943565b610fab565b34801561065457600080fd5b506021546104b69060ff1681565b34801561066e57600080fd5b50610415601f5481565b34801561068457600080fd5b5060095b60405160ff909116815260200161041f565b3480156106a657600080fd5b5061041560065481565b3480156106bc57600080fd5b506104946106cb366004612839565b611006565b3480156106dc57600080fd5b5061041560255481565b3480156106f257600080fd5b5061041560075481565b34801561070857600080fd5b5061041560055481565b34801561071e57600080fd5b506107467f000000000000000000000000e5fc1a2ab430711cac0d4e06267c9411f94822f281565b6040516001600160a01b03909116815260200161041f565b34801561076a57600080fd5b50610494610779366004612980565b611041565b34801561078a57600080fd5b506104b66107993660046128e5565b611096565b3480156107aa57600080fd5b506104946107b9366004612839565b6110a4565b3480156107ca57600080fd5b506104946107d93660046128e5565b6110d3565b3480156107ea57600080fd5b50601b546104b690610100900460ff1681565b34801561080957600080fd5b50610494610818366004612980565b61115f565b34801561082957600080fd5b506107467f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561085d57600080fd5b5061049461086c366004612839565b6111b4565b34801561087d57600080fd5b50601d546104b69060ff1681565b34801561089757600080fd5b506104156108a63660046128e5565b6001600160a01b031660009081526012602052604090205490565b3480156108cd57600080fd5b506104946111e8565b3480156108e257600080fd5b50601b546106889062010000900460ff1681565b34801561090257600080fd5b506104946109113660046129b5565b61124a565b34801561092257600080fd5b50600054610746906001600160a01b031681565b34801561094257600080fd5b5061041560045481565b34801561095857600080fd5b5061041560035481565b34801561096e57600080fd5b5061049461097d3660046129ea565b61136c565b34801561098e57600080fd5b50610746611418565b3480156109a357600080fd5b50600d546001600160a01b0316610746565b3480156109c157600080fd5b50600154610746906001600160a01b031681565b3480156109e157600080fd5b5061041560235481565b3480156109f757600080fd5b5061049461142c565b348015610a0c57600080fd5b506104b6610a1b366004612867565b611534565b348015610a2c57600080fd5b50600f54610415565b348015610a4157600080fd5b50610494610a50366004612839565b611541565b348015610a6157600080fd5b50601854610746906001600160a01b031681565b348015610a8157600080fd5b50610415610a90366004612839565b61158c565b348015610aa157600080fd5b50610494610ab0366004612a1c565b6115f3565b348015610ac157600080fd5b50610494610ad0366004612839565b6116b6565b348015610ae157600080fd5b50610494610af0366004612980565b6116e5565b348015610b0157600080fd5b50610494610b10366004612839565b61173a565b348015610b2157600080fd5b50610415610b30366004612a67565b6001600160a01b03918216600090815260136020908152604080832093909416825291909152205490565b348015610b6757600080fd5b50610415600a5481565b348015610b7d57600080fd5b50610494610b8c366004612839565b6117bf565b348015610b9d57600080fd5b50610494610bac366004612839565b611801565b348015610bbd57600080fd5b50610494610bcc3660046128e5565b611830565b348015610bdd57600080fd5b5061041560095481565b348015610bf357600080fd5b50610494610c02366004612980565b611909565b348015610c1357600080fd5b50601b546104b69060ff1681565b600d546001600160a01b03163314610c545760405162461bcd60e51b8152600401610c4b90612a95565b60405180910390fd5b6103e881600254610c659190612ae0565b610c6f9190612af7565b60045550565b3360008181526013602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610cd09086815260200190565b60405180910390a35060015b92915050565b600d546001600160a01b03163314610d0c5760405162461bcd60e51b8152600401610c4b90612a95565b601b805460ff19169115159190911790554260235543602455565b600082610d338361158c565b119392505050565b600d546001600160a01b03163314610d655760405162461bcd60e51b8152600401610c4b90612a95565b600180546001600160a01b03908116600090815260146020526040808220805460ff19908116909155949092168082529190208054909316821790925580546001600160a01b0319169091179055565b600d546001600160a01b03163314610ddf5760405162461bcd60e51b8152600401610c4b90612a95565b60005447906001600160a01b03166108fc6064610dfc8585612ae0565b610e069190612af7565b6040518115909202916000818181858888f19350505050158015610e2e573d6000803e3d6000fd5b505050565b600d546001600160a01b03163314610e5d5760405162461bcd60e51b8152600401610c4b90612a95565b601991909155601a55565b6001600160a01b038316600090815260136020908152604080832033845290915281205460001914610f15576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601382528381203382529091529190912054610ef091849061195e565b6001600160a01b03851660009081526013602090815260408083203384529091529020555b610f2084848461198a565b90505b9392505050565b600d546001600160a01b03163314610f545760405162461bcd60e51b8152600401610c4b90612a95565b601e55565b6011546001600160a01b0316600090815260126020526040812054610fa6906010546001600160a01b0316600090815260126020526040902054610fa09060025490611ee4565b90611ee4565b905090565b600d546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610c4b90612a95565b601b805462ffff0019166101009315159390930262ff00001916929092176201000060ff9290921691909102179055565b600d546001600160a01b031633146110305760405162461bcd60e51b8152600401610c4b90612a95565b47336108fc6064610dfc8585612ae0565b600d546001600160a01b0316331461106b5760405162461bcd60e51b8152600401610c4b90612a95565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000610cdc82600019610c75565b600d546001600160a01b031633146110ce5760405162461bcd60e51b8152600401610c4b90612a95565b600355565b600d546001600160a01b031633146110fd5760405162461bcd60e51b8152600401610c4b90612a95565b600080546001600160a01b039081168252601460209081526040808420805460ff1990811690915594909216808452828420805486166001908117909155601690925291832080549094161790925580546001600160a01b0319169091179055565b600d546001600160a01b031633146111895760405162461bcd60e51b8152600401610c4b90612a95565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b336000908152601260205260409020548110156111e5576010546111e39033906001600160a01b031683611ef0565b505b50565b600d546001600160a01b031633146112125760405162461bcd60e51b8152600401610c4b90612a95565b600d546040516000916001600160a01b031690600080516020612c2b833981519152908390a3600d80546001600160a01b0319169055565b600d546001600160a01b031633146112745760405162461bcd60e51b8152600401610c4b90612a95565b6102588310156112db5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f74206275726e206d6f7265206f6674656e207468616e206576657260448201526b79203130206d696e7574657360a01b6064820152608401610c4b565b6103e882111580156112eb575060015b6113505760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610c4b565b6022929092556020556021805460ff1916911515919091179055565b600d546001600160a01b031633146113965760405162461bcd60e51b8152600401610c4b90612a95565b6007849055600883905560098290556113b9826113b38686611fc4565b90611fc4565b600a819055600c829055605a116114125760405162461bcd60e51b815260206004820152601860248201527f466565732063616e6e6f742062652074686174206869676800000000000000006044820152606401610c4b565b50505050565b6000610fa6600d546001600160a01b031690565b600e546001600160a01b031633146114925760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c4b565b600f5442116114e35760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610c4b565b600e54600d546040516001600160a01b039283169290911690600080516020612c2b83398151915290600090a3600e54600d80546001600160a01b0319166001600160a01b03909216919091179055565b6000610f2333848461198a565b600d546001600160a01b0316331461156b5760405162461bcd60e51b8152600401610c4b90612a95565b6103e88160025461157c9190612ae0565b6115869190612af7565b60035550565b6000610cdc611599610f59565b6115ed6115e660026115e07f000000000000000000000000e5fc1a2ab430711cac0d4e06267c9411f94822f26001600160a01b031660009081526012602052604090205490565b90611fd0565b8590611fd0565b90611fdc565b600d546001600160a01b0316331461161d5760405162461bcd60e51b8152600401610c4b90612a95565b600180546001600160a01b039081166000908152601460209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601690925282208054909516841790945560188054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b600d546001600160a01b031633146116e05760405162461bcd60e51b8152600401610c4b90612a95565b600655565b600d546001600160a01b0316331461170f5760405162461bcd60e51b8152600401610c4b90612a95565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b600d546001600160a01b031633146117645760405162461bcd60e51b8152600401610c4b90612a95565b600d8054600e80546001600160a01b03199081166001600160a01b038416179091551690556117938142612b19565b600f55600d546040516000916001600160a01b031690600080516020612c2b833981519152908390a350565b600d546001600160a01b031633146117e95760405162461bcd60e51b8152600401610c4b90612a95565b601e548111156117fc57601e54601f5550565b601f55565b600d546001600160a01b0316331461182b5760405162461bcd60e51b8152600401610c4b90612a95565b600b55565b600d546001600160a01b0316331461185a5760405162461bcd60e51b8152600401610c4b90612a95565b6001600160a01b0381166118bf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c4b565b600d546040516001600160a01b03808416921690600080516020612c2b83398151915290600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b031633146119335760405162461bcd60e51b8152600401610c4b90612a95565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b600081848411156119825760405162461bcd60e51b8152600401610c4b91906127eb565b505050900390565b60265460009060ff16156119aa576119a3848484611ef0565b9050610f23565b600d546001600160a01b038581169116148015906119d65750600d546001600160a01b03848116911614155b15611a2457601b5460ff16611a245760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c4b565b7f000000000000000000000000e5fc1a2ab430711cac0d4e06267c9411f94822f26001600160a01b03908116908416146000811582611a9557507f000000000000000000000000e5fc1a2ab430711cac0d4e06267c9411f94822f26001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611abe57506010546001600160a01b03868116911614155b8015611afc57507f000000000000000000000000e5fc1a2ab430711cac0d4e06267c9411f94822f26001600160a01b0316856001600160a01b031614155b8015611b1657506000546001600160a01b03868116911614155b8015611b3057506001546001600160a01b03868116911614155b8015611b4a57506018546001600160a01b03868116911614155b15611bfe576001600160a01b03851660009081526012602090815260408083205460169092529091205460ff16611bfc57600454611b888683612b19565b1115611bfc5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610c4b565b505b7f000000000000000000000000e5fc1a2ab430711cac0d4e06267c9411f94822f26001600160a01b0316866001600160a01b0316148015611c465750601b54610100900460ff165b8015611c6b57506001600160a01b03851660009081526017602052604090205460ff16155b15611d15576001600160a01b0385166000908152601c60205260409020544211611ce55760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610c4b565b601b54611cfb9062010000900460ff1642612b19565b6001600160a01b0386166000908152601c60205260409020555b6001600160a01b03851660009081526015602052604090205460ff16611d3f57611d3f8685611fe8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260129091529190912054611d9191869061195e565b6001600160a01b038716600090815260126020526040902055602154849060ff168015611dcd5750602254602354611dc99190612b19565b4210155b8015611df257506001600160a01b03871660009081526014602052604090205460ff16155b15611e0157611dff612051565b505b8115611e2157600b5415611e1c57611e1987866121e3565b90505b611e6a565b6001600160a01b03871660009081526014602052604090205460ff1615611e485784611e53565b611e53878685612285565b9050611e5d612336565b15611e6a57611e6a6123a2565b6001600160a01b038616600090815260126020526040902054611e8d9082611fc4565b6001600160a01b038088166000818152601260205260409081902093909355915190891690600080516020612c4b83398151915290611ecf9085815260200190565b60405180910390a35060019695505050505050565b6000610f238284612b2c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152601290915291822054611f4191849061195e565b6001600160a01b038086166000908152601260205260408082209390935590851681522054611f709083611fc4565b6001600160a01b038085166000818152601260205260409081902093909355915190861690600080516020612c4b83398151915290611fb29086815260200190565b60405180910390a35060019392505050565b6000610f238284612b19565b6000610f238284612ae0565b6000610f238284612af7565b6003548111158061201157506001600160a01b03821660009081526015602052604090205460ff165b6111e35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c4b565b426023556040516370a0823160e01b81526001600160a01b037f000000000000000000000000e5fc1a2ab430711cac0d4e06267c9411f94822f2166004820152600090819030906370a0823190602401602060405180830381865afa1580156120be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e29190612b3f565b905060006121016025546115ed60205485611fd090919063ffffffff16565b90508015612138576121367f000000000000000000000000e5fc1a2ab430711cac0d4e06267c9411f94822f261dead8361198a565b505b60007f000000000000000000000000e5fc1a2ab430711cac0d4e06267c9411f94822f29050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561219857600080fd5b505af11580156121ac573d6000803e3d6000fd5b50506040517f369bbe90a14ed88a02d5d4c1a3b57fbc571fb5871ab9992049da256d622e09df925060009150a16001935050505090565b600080600b549050600061220e600c5460646121ff9190612ae0565b6115ed60646115e08887611fd0565b3060009081526012602052604090205490915061222b9082611fc4565b30600081815260126020526040908190209290925590516001600160a01b03871690600080516020612c4b8339815191529061226a9085815260200190565b60405180910390a361227c8482611ee4565b95945050505050565b6000808261229557600654612299565b600a545b905060006122be600c5460646122af9190612ae0565b6115ed60646115e08987611fd0565b306000908152601260205260409020549091506122db9082611fc4565b30600081815260126020526040908190209290925590516001600160a01b03881690600080516020612c4b8339815191529061231a9085815260200190565b60405180910390a361232c8582611ee4565b9695505050505050565b6000336001600160a01b037f000000000000000000000000e5fc1a2ab430711cac0d4e06267c9411f94822f21614801590612374575060265460ff16155b80156123825750601d5460ff165b8015610fa6575050601e5430600090815260126020526040902054101590565b6026805460ff19166001179055601954601a546000916123c191610d27565b6123cd576007546123d0565b60005b905060006123f460026115ed600a546115ed86601f54611fd090919063ffffffff16565b9050600061240d82601f54611ee490919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061244757612447612b58565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e99190612b6e565b816001815181106124fc576124fc612b58565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612561908690600090879030904290600401612b8b565b600060405180830381600087803b15801561257b57600080fd5b505af115801561258f573d6000803e3d6000fd5b5050505060006125a88247611ee490919063ffffffff16565b905060006125c36125ba886002611fdc565b600a5490611ee4565b905060006125e560026115ed846115ed60075488611fd090919063ffffffff16565b90506000612602836115ed60085487611fd090919063ffffffff16565b9050600061261f846115ed60095488611fd090919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612676576040519150601f19603f3d011682016040523d82523d6000602084013e61267b565b606091505b50506001546040519192506001600160a01b0316906175309084906000818181858888f193505050503d80600081146126d0576040519150601f19603f3d011682016040523d82523d6000602084013e6126d5565b606091505b5060009250508a1590506127d45760185460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990869060c40160606040518083038185885af1158015612772573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127979190612bfc565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506026805460ff19169055505050505050505050565b600060208083528351808285015260005b81811015612818578581018301518582016040015282016127fc565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561284b57600080fd5b5035919050565b6001600160a01b03811681146111e557600080fd5b6000806040838503121561287a57600080fd5b823561288581612852565b946020939093013593505050565b803580151581146128a357600080fd5b919050565b6000602082840312156128ba57600080fd5b610f2382612893565b600080604083850312156128d657600080fd5b50508035926020909101359150565b6000602082840312156128f757600080fd5b8135610f2381612852565b60008060006060848603121561291757600080fd5b833561292281612852565b9250602084013561293281612852565b929592945050506040919091013590565b6000806040838503121561295657600080fd5b61295f83612893565b9150602083013560ff8116811461297557600080fd5b809150509250929050565b6000806040838503121561299357600080fd5b823561299e81612852565b91506129ac60208401612893565b90509250929050565b6000806000606084860312156129ca57600080fd5b83359250602084013591506129e160408501612893565b90509250925092565b60008060008060808587031215612a0057600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612a3157600080fd5b8335612a3c81612852565b92506020840135612a4c81612852565b91506040840135612a5c81612852565b809150509250925092565b60008060408385031215612a7a57600080fd5b8235612a8581612852565b9150602083013561297581612852565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cdc57610cdc612aca565b600082612b1457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cdc57610cdc612aca565b81810381811115610cdc57610cdc612aca565b600060208284031215612b5157600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612b8057600080fd5b8151610f2381612852565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612bdb5784516001600160a01b031683529383019391830191600101612bb6565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612c1157600080fd5b835192506020840151915060408401519050925092509256fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b1c1b6cb97bc9c2e73f65933d5e224bd6753f47cc47e4ab67cfdb1535e6d8b864736f6c63430008120033
Deployed Bytecode Sourcemap
18193:16764:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;876:37;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;876:37:0;;;;;;;;19168:56;;;;;;;;;;;;;;;;21100:80;;;;;;;;;;-1:-1:-1;21172:5:0;;;;;;;;;;;-1:-1:-1;;;21172:5:0;;;;21100:80;;;;21172:5;21100:80;:::i;22420:177::-;;;;;;;;;;-1:-1:-1;22420:177:0;;;;;:::i;:::-;;:::i;:::-;;21524:216;;;;;;;;;;-1:-1:-1;21524:216:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;21524:216:0;1390:187:1;28192:173:0;;;;;;;;;;-1:-1:-1;28192:173:0;;;;;:::i;:::-;;:::i;33723:150::-;;;;;;;;;;-1:-1:-1;33723:150:0;;;;;:::i;:::-;;:::i;1098:39::-;;;;;;;;;;;;;;;;20830:88;;;;;;;;;;-1:-1:-1;20903:12:0;;20830:88;;19291:36;;;;;;;;;;;;;;;;31785:196;;;;;;;;;;-1:-1:-1;31785:196:0;;;;;:::i;:::-;;:::i;27723:214::-;;;;;;;;;;-1:-1:-1;27723:214:0;;;;;:::i;:::-;;:::i;1052:37::-;;;;;;;;;;;;;;;;33197:184;;;;;;;;;;-1:-1:-1;33197:184:0;;;;;:::i;:::-;;:::i;22042:370::-;;;;;;;;;;-1:-1:-1;22042:370:0;;;;;:::i;:::-;;:::i;32808:112::-;;;;;;;;;;-1:-1:-1;32808:112:0;;;;;:::i;:::-;;:::i;33389:142::-;;;;;;;;;;;;;:::i;19409:44::-;;;;;;;;;;;;;;;;28412:164;;;;;;;;;;-1:-1:-1;28412:164:0;;;;;:::i;:::-;;:::i;19370:32::-;;;;;;;;;;-1:-1:-1;19370:32:0;;;;;;;;19231:53;;;;;;;;;;;;;;;;20924:80;;;;;;;;;;-1:-1:-1;489:1:0;20924:80;;;3412:4:1;3400:17;;;3382:36;;3370:2;3355:18;20924:80:0;3240:184:1;781:42:0;;;;;;;;;;;;;;;;27945:216;;;;;;;;;;-1:-1:-1;27945:216:0;;;;;:::i;:::-;;:::i;19526:37::-;;;;;;;;;;;;;;;;832;;;;;;;;;;;;;;;;737;;;;;;;;;;;;;;;;18898:38;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3593:32:1;;;3575:51;;3563:2;3548:18;18898:38:0;3429:203:1;30813:131:0;;;;;;;;;;-1:-1:-1;30813:131:0;;;;;:::i;:::-;;:::i;21748:122::-;;;;;;;;;;-1:-1:-1;21748:122:0;;;;;:::i;:::-;;:::i;22783:97::-;;;;;;;;;;-1:-1:-1;22783:97:0;;;;;:::i;:::-;;:::i;31989:249::-;;;;;;;;;;-1:-1:-1;31989:249:0;;;;;:::i;:::-;;:::i;18985:37::-;;;;;;;;;;-1:-1:-1;18985:37:0;;;;;;;;;;;30418:121;;;;;;;;;;-1:-1:-1;30418:121:0;;;;;:::i;:::-;;:::i;18841:50::-;;;;;;;;;;;;;;;23043:231;;;;;;;;;;-1:-1:-1;23043:231:0;;;;;:::i;:::-;;:::i;19131:30::-;;;;;;;;;;-1:-1:-1;19131:30:0;;;;;;;;21272:105;;;;;;;;;;-1:-1:-1;21272:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;21356:18:0;21338:7;21356:18;;;:9;:18;;;;;;;21272:105;8863:148;;;;;;;;;;;;;:::i;19029:39::-;;;;;;;;;;-1:-1:-1;19029:39:0;;;;;;;;;;;33947:440;;;;;;;;;;-1:-1:-1;33947:440:0;;;;;:::i;:::-;;:::i;220:75::-;;;;;;;;;;-1:-1:-1;220:75:0;;;;-1:-1:-1;;;;;220:75:0;;;666:59;;;;;;;;;;;;;;;;556:56;;;;;;;;;;;;;;;;31140:486;;;;;;;;;;-1:-1:-1;31140:486:0;;;;;:::i;:::-;;:::i;21186:80::-;;;;;;;;;;;;;:::i;8220:79::-;;;;;;;;;;-1:-1:-1;8285:6:0;;-1:-1:-1;;;;;8285:6:0;8220:79;;302:69;;;;;;;;;;-1:-1:-1;302:69:0;;;;-1:-1:-1;;;;;302:69:0;;;19460:29;;;;;;;;;;;;;;;;9885:305;;;;;;;;;;;;;:::i;21878:156::-;;;;;;;;;;-1:-1:-1;21878:156:0;;;;;:::i;:::-;;:::i;9418:89::-;;;;;;;;;;-1:-1:-1;9490:9:0;;9418:89;;22603:172;;;;;;;;;;-1:-1:-1;22603:172:0;;;;;:::i;:::-;;:::i;18712:36::-;;;;;;;;;;-1:-1:-1;18712:36:0;;;;-1:-1:-1;;;;;18712:36:0;;;33539:176;;;;;;;;;;-1:-1:-1;33539:176:0;;;;;:::i;:::-;;:::i;32246:518::-;;;;;;;;;;-1:-1:-1;32246:518:0;;;;;:::i;:::-;;:::i;31634:96::-;;;;;;;;;;-1:-1:-1;31634:96:0;;;;;:::i;:::-;;:::i;30547:121::-;;;;;;;;;;-1:-1:-1;30547:121:0;;;;;:::i;:::-;;:::i;9583:226::-;;;;;;;;;;-1:-1:-1;9583:226:0;;;;;:::i;:::-;;:::i;21383:133::-;;;;;;;;;;-1:-1:-1;21383:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;21485:19:0;;;21467:7;21485:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;21383:133;964:79;;;;;;;;;;;;;;;;32928:221;;;;;;;;;;-1:-1:-1;32928:221:0;;;;;:::i;:::-;;:::i;31044:88::-;;;;;;;;;;-1:-1:-1;31044:88:0;;;;;:::i;:::-;;:::i;9166:244::-;;;;;;;;;;-1:-1:-1;9166:244:0;;;;;:::i;:::-;;:::i;920:37::-;;;;;;;;;;;;;;;;30676:129;;;;;;;;;;-1:-1:-1;30676:129:0;;;;;:::i;:::-;;:::i;18945:31::-;;;;;;;;;;-1:-1:-1;18945:31:0;;;;;;;;22420:177;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;;;;;;;;;22585:4:::1;22557:23;22542:12;;:38;;;;:::i;:::-;22541:48;;;;:::i;:::-;22523:15;:66:::0;-1:-1:-1;22420:177:0:o;21524:216::-;21628:10;21599:4;21616:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;21616:32:0;;;;;;;;;;:41;;;21673:37;21599:4;;21616:32;;21673:37;;;;21651:6;160:25:1;;148:2;133:18;;14:177;21673:37:0;;;;;;;;-1:-1:-1;21728:4:0;21524:216;;;;;:::o;28192:173::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;28257:11:::1;:21:::0;;-1:-1:-1;;28257:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28306:15:::1;28289:14;:32:::0;28345:12:::1;28332:10;:25:::0;28192:173::o;33723:150::-;33803:4;33859:6;33827:29;33847:8;33827:19;:29::i;:::-;:38;;33723:150;-1:-1:-1;;;33723:150:0:o;31785:196::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;31881:9:::1;::::0;;-1:-1:-1;;;;;31881:9:0;;::::1;31894:5;31869:22:::0;;;:11:::1;:22;::::0;;;;;:30;;-1:-1:-1;;31869:30:0;;::::1;::::0;;;31910:23;;;::::1;::::0;;;;;;:30;;;;::::1;::::0;::::1;::::0;;;31951:22;;-1:-1:-1;;;;;;31951:22:0::1;::::0;;::::1;::::0;;31785:196::o;27723:214::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;27808:17:::1;27868:15:::0;27828:21:::1;::::0;-1:-1:-1;;;;;27868:15:0::1;27860:69;27925:3;27894:28;27906:16:::0;27828:21;27894:28:::1;:::i;:::-;:34;;;;:::i;:::-;27860:69;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27797:140;27723:214:::0;:::o;33197:184::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;33296:15:::1;:25:::0;;;;33332:26:::1;:41:::0;33197:184::o;22042:370::-;-1:-1:-1;;;;;22162:19:0;;22142:4;22162:19;;;:11;:19;;;;;;;;22182:10;22162:31;;;;;;;;-1:-1:-1;;22162:52:0;22159:186;;22264:69;;;;;;;;;;;-1:-1:-1;;;22264:69:0;;;;;;;;-1:-1:-1;;;;;22264:19:0;;-1:-1:-1;22264:19:0;;;:11;:19;;;;;22284:10;22264:31;;;;;;;;;;:69;;22300:6;;22264:35;:69::i;:::-;-1:-1:-1;;;;;22230:19:0;;;;;;:11;:19;;;;;;;;22250:10;22230:31;;;;;;;:103;22159:186;22364:40;22378:6;22386:9;22397:6;22364:13;:40::i;:::-;22357:47;;22042:370;;;;;;:::o;32808:112::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;32889:13:::1;:23:::0;32808:112::o;33389:142::-;33517:4;;-1:-1:-1;;;;;33517:4:0;33442:7;21356:18;;;:9;:18;;;;;;33469:54;;33496:4;;-1:-1:-1;;;;;33496:4:0;21338:7;21356:18;;;:9;:18;;;;;;33469:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;33462:61;;33389:142;:::o;28412:164::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;28496:18:::1;:28:::0;;-1:-1:-1;;28535:33:0;28496:28:::1;::::0;::::1;;::::0;;;::::1;-1:-1:-1::0;;28535:33:0;;;;;;28496:28:::1;28535:33:::0;;;::::1;::::0;;;::::1;;::::0;;28412:164::o;27945:216::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;28057:21:::1;28097:10;28089:64;28149:3;28118:28;28130:16:::0;28057:21;28118:28:::1;:::i;30813:131::-:0;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30903:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;30903:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30813:131::o;21748:122::-;21803:4;21827:35;21835:7;-1:-1:-1;;21827:7:0;:35::i;22783:97::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;22851:12:::1;:21:::0;22783:97::o;31989:249::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;32100:5:::1;32081:15:::0;;-1:-1:-1;;;;;32081:15:0;;::::1;32069:28:::0;;:11:::1;:28;::::0;;;;;;;:36;;-1:-1:-1;;32069:36:0;;::::1;::::0;;;32116:23;;;::::1;::::0;;;;;;:30;;;::::1;32081:15:::0;32116:30;;::::1;::::0;;;32159:11:::1;:23:::0;;;;;;:30;;;;::::1;;::::0;;;32202:28;;-1:-1:-1;;;;;;32202:28:0::1;::::0;;::::1;::::0;;31989:249::o;30418:121::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30503:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;30503:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30418:121::o;23043:231::-;23178:10;23168:21;;;;:9;:21;;;;;;:30;-1:-1:-1;23165:102:0;;;23242:4;;23215:40;;23230:10;;-1:-1:-1;;;;;23242:4:0;23248:6;23215:14;:40::i;:::-;;23165:102;23043:231;:::o;8863:148::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;8954:6:::1;::::0;8933:40:::1;::::0;8970:1:::1;::::0;-1:-1:-1;;;;;8954:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;8933:40:0;8970:1;;8933:40:::1;8984:6;:19:::0;;-1:-1:-1;;;;;;8984:19:0::1;::::0;;8863:148::o;33947:440::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;34101:3:::1;34078:19;:26;;34070:83;;;::::0;-1:-1:-1;;;34070:83:0;;6920:2:1;34070:83:0::1;::::0;::::1;6902:21:1::0;6959:2;6939:18;;;6932:30;6998:34;6978:18;;;6971:62;-1:-1:-1;;;7049:18:1;;;7042:42;7101:19;;34070:83:0::1;6718:408:1::0;34070:83:0::1;34184:4;34172:8;:16;;:33;;;;-1:-1:-1::0;34192:13:0;34172:33:::1;34164:94;;;::::0;-1:-1:-1;;;34164:94:0;;7333:2:1;34164:94:0::1;::::0;::::1;7315:21:1::0;7372:2;7352:18;;;7345:30;7411:34;7391:18;;;7384:62;-1:-1:-1;;;7462:18:1;;;7455:46;7518:19;;34164:94:0::1;7131:412:1::0;34164:94:0::1;34269:15;:37:::0;;;;34317:16:::1;:27:::0;34355:13:::1;:24:::0;;-1:-1:-1;;34355:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33947:440::o;31140:486::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;31300:9:::1;:25:::0;;;31336:13:::1;:36:::0;;;31383:15:::1;:37:::0;;;31446:64:::1;31401:19:::0;31446:39:::1;31312:13:::0;31352:20;31446:17:::1;:39::i;:::-;:43:::0;::::1;:64::i;:::-;31431:12;:79:::0;;;31521:14:::1;:32:::0;;;31587:2:::1;-1:-1:-1::0;31564:54:0::1;;;::::0;-1:-1:-1;;;31564:54:0;;7750:2:1;31564:54:0::1;::::0;::::1;7732:21:1::0;7789:2;7769:18;;;7762:30;7828:26;7808:18;;;7801:54;7872:18;;31564:54:0::1;7548:348:1::0;31564:54:0::1;31140:486:::0;;;;:::o;21186:80::-;21238:7;21256;8285:6;;-1:-1:-1;;;;;8285:6:0;;8220:79;9885:305;9937:14;;-1:-1:-1;;;;;9937:14:0;9955:10;9937:28;9929:76;;;;-1:-1:-1;;;9929:76:0;;8103:2:1;9929:76:0;;;8085:21:1;8142:2;8122:18;;;8115:30;8181:34;8161:18;;;8154:62;-1:-1:-1;;;8232:18:1;;;8225:33;8275:19;;9929:76:0;7901:399:1;9929:76:0;10042:9;;10024:15;:27;10016:72;;;;-1:-1:-1;;;10016:72:0;;8507:2:1;10016:72:0;;;8489:21:1;8546:2;8526:18;;;8519:30;8585:33;8565:18;;;8558:61;8636:18;;10016:72:0;8305:355:1;10016:72:0;10133:14;;10125:6;;10104:44;;-1:-1:-1;;;;;10133:14:0;;;;10125:6;;;;-1:-1:-1;;;;;;;;;;;10104:44:0;10133:14;;10104:44;10168:14;;10159:6;:23;;-1:-1:-1;;;;;;10159:23:0;-1:-1:-1;;;;;10168:14:0;;;10159:23;;;;;;9885:305::o;21878:156::-;21958:4;21982:44;21996:10;22008:9;22019:6;21982:13;:44::i;22603:172::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;22763:4:::1;22734:24;22719:12;;:39;;;;:::i;:::-;22718:49;;;;:::i;:::-;22703:12;:64:::0;-1:-1:-1;22603:172:0:o;33539:176::-;33607:7;33634:73;33684:22;:20;:22::i;:::-;33634:45;33647:31;33676:1;33647:24;33657:13;-1:-1:-1;;;;;21356:18:0;21338:7;21356:18;;;:9;:18;;;;;;;21272:105;33647:24;:28;;:31::i;:::-;33634:8;;:12;:45::i;:::-;:49;;:73::i;32246:518::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;32402:9:::1;::::0;;-1:-1:-1;;;;;32402:9:0;;::::1;32415:5;32390:22:::0;;;:11:::1;:22;::::0;;;;;;;:30;;-1:-1:-1;;32390:30:0;;::::1;::::0;;;32431:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;32487:15;;;::::1;32475:28:::0;;;;;:36;;;::::1;::::0;;32522:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;32574:11:::1;:32:::0;;;;;:39;;;;::::1;::::0;::::1;::::0;;;32626:21:::1;:46:::0;;;;;::::1;-1:-1:-1::0;;;;;;32626:46:0;;::::1;;::::0;;;32683:37;;;::::1;::::0;;::::1;::::0;;;32731:25;;;;::::1;;::::0;;32246:518::o;31634:96::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;31702:11:::1;:20:::0;31634:96::o;30547:121::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30632:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;30632:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30547:121::o;9583:226::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;9664:6:::1;::::0;;9647:14:::1;:23:::0;;-1:-1:-1;;;;;;9647:23:0;;::::1;-1:-1:-1::0;;;;;9664:6:0;::::1;9647:23;::::0;;;9681:19:::1;::::0;;9723:22:::1;9741:4:::0;9723:15:::1;:22;:::i;:::-;9711:9;:34:::0;9782:6:::1;::::0;9761:40:::1;::::0;9798:1:::1;::::0;-1:-1:-1;;;;;9782:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;9761:40:0;9798:1;;9761:40:::1;9583:226:::0;:::o;32928:221::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;33013:13:::1;;33003:7;:23;33000:134;;;33056:13;::::0;33043:10:::1;:26:::0;23043:231;:::o;33000:134::-:1;33102:10;:20:::0;32928:221::o;31044:88::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;31110:8:::1;:14:::0;31044:88::o;9166:244::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9255:22:0;::::1;9247:73;;;::::0;-1:-1:-1;;;9247:73:0;;8997:2:1;9247:73:0::1;::::0;::::1;8979:21:1::0;9036:2;9016:18;;;9009:30;9075:34;9055:18;;;9048:62;-1:-1:-1;;;9126:18:1;;;9119:36;9172:19;;9247:73:0::1;8795:402:1::0;9247:73:0::1;9357:6;::::0;9336:38:::1;::::0;-1:-1:-1;;;;;9336:38:0;;::::1;::::0;9357:6:::1;::::0;-1:-1:-1;;;;;;;;;;;9336:38:0;9357:6:::1;::::0;9336:38:::1;9385:6;:17:::0;;-1:-1:-1;;;;;;9385:17:0::1;-1:-1:-1::0;;;;;9385:17:0;;;::::1;::::0;;;::::1;::::0;;9166:244::o;30676:129::-;8432:6;;-1:-1:-1;;;;;8432:6:0;6886:10;8432:22;8424:67;;;;-1:-1:-1;;;8424:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30765:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;30765:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30676:129::o;3894:240::-;4014:7;4075:12;4067:6;;;;4059:29;;;;-1:-1:-1;;;4059:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;4110:5:0;;;3894:240::o;23347:2584::-;23459:6;;23439:4;;23459:6;;23456:63;;;23475:41;23490:6;23498:9;23509:6;23475:14;:41::i;:::-;23468:48;;;;23456:63;8285:6;;-1:-1:-1;;;;;23534:17:0;;;8285:6;;23534:17;;;;:41;;-1:-1:-1;8285:6:0;;-1:-1:-1;;;;;23555:20:0;;;8285:6;;23555:20;;23534:41;23531:115;;;23599:11;;;;23591:43;;;;-1:-1:-1;;;23591:43:0;;9404:2:1;23591:43:0;;;9386:21:1;9443:2;9423:18;;;9416:30;-1:-1:-1;;;9462:18:1;;;9455:50;9522:18;;23591:43:0;9202:344:1;23591:43:0;23686:13;-1:-1:-1;;;;;23673:26:0;;;;;;;23658:11;23730:26;;23673;23730:53;;;23770:13;-1:-1:-1;;;;;23760:23:0;:6;-1:-1:-1;;;;;23760:23:0;;;23730:53;23711:73;-1:-1:-1;;;;;;23801:26:0;;23822:4;23801:26;;;;:70;;-1:-1:-1;23866:4:0;;-1:-1:-1;;;;;23845:26:0;;;23866:4;;23845:26;;23801:70;:114;;;;;23902:13;-1:-1:-1;;;;;23889:26:0;:9;-1:-1:-1;;;;;23889:26:0;;;23801:114;:160;;;;-1:-1:-1;23946:15:0;;-1:-1:-1;;;;;23933:28:0;;;23946:15;;23933:28;;23801:160;:200;;;;-1:-1:-1;23992:9:0;;-1:-1:-1;;;;;23979:22:0;;;23992:9;;23979:22;;23801:200;:252;;;;-1:-1:-1;24032:21:0;;-1:-1:-1;;;;;24019:34:0;;;24032:21;;24019:34;;23801:252;23797:526;;;-1:-1:-1;;;;;21356:18:0;;24079;21356;;;:9;:18;;;;;;;;;24139:11;:22;;;;;;;;;24135:177;;24215:15;;24191:19;24204:6;24191:10;:19;:::i;:::-;24190:40;;24182:114;;;;-1:-1:-1;;;24182:114:0;;9753:2:1;24182:114:0;;;9735:21:1;9792:2;9772:18;;;9765:30;9831:34;9811:18;;;9804:62;9902:32;9882:18;;;9875:60;9952:19;;24182:114:0;9551:426:1;24182:114:0;24064:259;23797:526;24349:13;-1:-1:-1;;;;;24339:23:0;:6;-1:-1:-1;;;;;24339:23:0;;:58;;;;-1:-1:-1;24379:18:0;;;;;;;24339:58;:103;;;;-1:-1:-1;;;;;;24415:27:0;;;;;;:16;:27;;;;;;;;24414:28;24339:103;24335:317;;;-1:-1:-1;;;;;24476:24:0;;;;;;:13;:24;;;;;;24503:15;-1:-1:-1;24468:91:0;;;;-1:-1:-1;;;24468:91:0;;10184:2:1;24468:91:0;;;10166:21:1;10223:2;10203:18;;;10196:30;10262:34;10242:18;;;10235:62;-1:-1:-1;;;10313:18:1;;;10306:35;10358:19;;24468:91:0;9982:401:1;24468:91:0;24619:21;;24601:39;;24619:21;;;;;24601:15;:39;:::i;:::-;-1:-1:-1;;;;;24574:24:0;;;;;;:13;:24;;;;;:66;24335:317;-1:-1:-1;;;;;24876:26:0;;;;;;:15;:26;;;;;;;;24872:87;;24919:28;24932:6;24940;24919:12;:28::i;:::-;25018:53;;;;;;;;;;;-1:-1:-1;;;25018:53:0;;;;;;;;-1:-1:-1;;;;;25018:17:0;;-1:-1:-1;25018:17:0;;;:9;:17;;;;;;;;:53;;25040:6;;25018:21;:53::i;:::-;-1:-1:-1;;;;;24998:17:0;;;;;;:9;:17;;;;;:73;25132:13;;25109:6;;25132:13;;:81;;;;;25198:15;;25181:14;;:32;;;;:::i;:::-;25162:15;:51;;25132:81;:118;;;;-1:-1:-1;;;;;;25231:19:0;;;;;;:11;:19;;;;;;;;25230:20;25132:118;25128:190;;;25277:29;:27;:29::i;:::-;;25128:190;25450:10;25447:318;;;25480:8;;:12;25477:100;;25530:31;25546:6;25554;25530:15;:31::i;:::-;25513:48;;25477:100;25447:318;;;-1:-1:-1;;;;;26538:19:0;;26513:4;26538:19;;;:11;:19;;;;;;;;26537:20;25626:64;;25684:6;25626:64;;;25650:31;25658:6;25666;25674;25650:7;:31::i;:::-;25609:81;;25722:16;:14;:16::i;:::-;25719:35;;;25741:10;:8;:10::i;:::-;-1:-1:-1;;;;;25800:20:0;;;;;;:9;:20;;;;;;:40;;25825:14;25800:24;:40::i;:::-;-1:-1:-1;;;;;25777:20:0;;;;;;;:9;:20;;;;;;;:63;;;;25858:43;;;;;;-1:-1:-1;;;;;;;;;;;25858:43:0;;;25886:14;160:25:1;;148:2;133:18;;14:177;25858:43:0;;;;;;;;-1:-1:-1;25919:4:0;;23347:2584;-1:-1:-1;;;;;;23347:2584:0:o;1996:98::-;2054:7;2081:5;2085:1;2081;:5;:::i;25939:330::-;26069:53;;;;;;;;;;;-1:-1:-1;;;26069:53:0;;;;;;;;-1:-1:-1;;;;;26069:17:0;;26032:4;26069:17;;;:9;:17;;;;;;;:53;;26091:6;;26069:21;:53::i;:::-;-1:-1:-1;;;;;26049:17:0;;;;;;;:9;:17;;;;;;:73;;;;26156:20;;;;;;;:32;;26181:6;26156:24;:32::i;:::-;-1:-1:-1;;;;;26133:20:0;;;;;;;:9;:20;;;;;;;:55;;;;26204:35;;;;;;-1:-1:-1;;;;;;;;;;;26204:35:0;;;26232:6;160:25:1;;148:2;133:18;;14:177;26204:35:0;;;;;;;;-1:-1:-1;26257:4:0;25939:330;;;;;:::o;1615:98::-;1673:7;1700:5;1704:1;1700;:5;:::i;2353:98::-;2411:7;2438:5;2442:1;2438;:5;:::i;2752:98::-;2810:7;2837:5;2841:1;2837;:5;:::i;26277:166::-;26374:12;;26364:6;:22;;:49;;;-1:-1:-1;;;;;;26390:23:0;;;;;;:15;:23;;;;;;;;26364:49;26356:79;;;;-1:-1:-1;;;26356:79:0;;10723:2:1;26356:79:0;;;10705:21:1;10762:2;10742:18;;;10735:30;-1:-1:-1;;;10781:18:1;;;10774:47;10838:18;;26356:79:0;10521:341:1;34396:558:0;34486:15;34469:14;:32;34558:29;;-1:-1:-1;;;34558:29:0;;-1:-1:-1;;;;;34573:13:0;3593:32:1;34558:29:0;;;3575:51:1;34453:4:0;;;;34558;;:14;;3548:18:1;;34558:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34527:60;;34601:20;34624:62;34671:14;;34624:42;34649:16;;34624:20;:24;;:42;;;;:::i;:62::-;34601:85;-1:-1:-1;34704:16:0;;34700:107;;34736:59;34750:13;34773:6;34782:12;34736:13;:59::i;:::-;;34700:107;34820:19;34857:13;34820:51;;34882:4;-1:-1:-1;;;;;34882:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34909:15:0;;;;-1:-1:-1;34909:15:0;;-1:-1:-1;34909:15:0;34942:4;34935:11;;;;;34396:558;:::o;26609:406::-;26684:7;26706:17;26726:8;;26706:28;;26745:17;26765:56;26800:14;;26817:3;26800:20;;;;:::i;:::-;26765:30;26791:3;26765:21;:6;26776:9;26765:10;:21::i;:56::-;26887:4;26869:24;;;;:9;:24;;;;;;26745:76;;-1:-1:-1;26869:39:0;;26745:76;26869:28;:39::i;:::-;26860:4;26842:24;;;;:9;:24;;;;;;;:66;;;;26924:42;;-1:-1:-1;;;;;26924:42:0;;;-1:-1:-1;;;;;;;;;;;26924:42:0;;;26956:9;160:25:1;;148:2;133:18;;14:177;26924:42:0;;;;;;;;26986:21;:6;26997:9;26986:10;:21::i;:::-;26979:28;26609:406;-1:-1:-1;;;;;26609:406:0:o;27023:438::-;27103:7;27125:17;27145:6;:35;;27169:11;;27145:35;;;27154:12;;27145:35;27125:55;;27191:17;27211:56;27246:14;;27263:3;27246:20;;;;:::i;:::-;27211:30;27237:3;27211:21;:6;27222:9;27211:10;:21::i;:56::-;27333:4;27315:24;;;;:9;:24;;;;;;27191:76;;-1:-1:-1;27315:39:0;;27191:76;27315:28;:39::i;:::-;27306:4;27288:24;;;;:9;:24;;;;;;;:66;;;;27370:42;;-1:-1:-1;;;;;27370:42:0;;;-1:-1:-1;;;;;;;;;;;27370:42:0;;;27402:9;160:25:1;;148:2;133:18;;14:177;27370:42:0;;;;;;;;27432:21;:6;27443:9;27432:10;:21::i;:::-;27425:28;27023:438;-1:-1:-1;;;;;;27023:438:0:o;27509:206::-;27558:4;27582:10;-1:-1:-1;;;;;27596:13:0;27582:27;;;;;:47;;-1:-1:-1;27623:6:0;;;;27622:7;27582:47;:71;;;;-1:-1:-1;27642:11:0;;;;27582:71;:125;;;;-1:-1:-1;;27694:13:0;;27684:4;27666:24;;;;:9;:24;;;;;;:41;;;27509:206::o;28584:1777::-;19612:6;:13;;-1:-1:-1;;19612:13:0;19621:4;19612:13;;;28679:15:::1;::::0;28696:26:::1;::::0;19612:6;;28663:60:::1;::::0;:15:::1;:60::i;:::-;:76;;28730:9;;28663:76;;;28726:1;28663:76;28633:106;;28750:23;28776:60;28834:1;28776:53;28816:12;;28776:35;28791:19;28776:10;;:14;;:35;;;;:::i;:60::-;28750:86;;28847:20;28870:31;28885:15;28870:10;;:14;;:31;;;;:::i;:::-;28938:16;::::0;;28952:1:::1;28938:16:::0;;;;;::::1;::::0;;28847:54;;-1:-1:-1;28914:21:0::1;::::0;28938:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28938:16:0::1;28914:40;;28983:4;28965;28970:1;28965:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;28965:23:0::1;;;-1:-1:-1::0;;;;;28965:23:0::1;;;::::0;::::1;29009:14;-1:-1:-1::0;;;;;29009:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28999:4;29004:1;28999:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28999:31:0;;::::1;:7;::::0;;::::1;::::0;;;;;:31;29101:196:::1;::::0;-1:-1:-1;;;29101:196:0;;29067:21:::1;::::0;29101:14:::1;:65;::::0;::::1;::::0;:196:::1;::::0;29181:12;;29043:21:::1;::::0;29224:4;;29251::::1;::::0;29271:15:::1;::::0;29101:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29310:17;29330:40;29356:13;29330:21;:25;;:40;;;;:::i;:::-;29310:60:::0;-1:-1:-1;29383:19:0::1;29405:44;29422:26;:19:::0;29446:1:::1;29422:23;:26::i;:::-;29405:12;::::0;;:16:::1;:44::i;:::-;29383:66;;29462:26;29491:48;29537:1;29491:41;29520:11;29491:24;29505:9;;29491;:13;;:24;;;;:::i;:48::-;29462:77;;29550:26;29579:45;29612:11;29579:28;29593:13;;29579:9;:13;;:28;;;;:::i;:45::-;29550:74;;29635:25;29663:47;29698:11;29663:30;29677:15;;29663:9;:13;;:30;;;;:::i;:47::-;29724:15;29752::::0;;29744:72:::1;::::0;29635:75;;-1:-1:-1;29724:15:0;;-1:-1:-1;;;;;29752:15:0;;::::1;::::0;29806:5:::1;::::0;29781:18;;29724:15;29744:72;29724:15;29744:72;29781:18;29752:15;29806:5;29744:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;29851:9:0::1;::::0;29843:65:::1;::::0;29723:93;;-1:-1:-1;;;;;;29851:9:0::1;::::0;29898:5:::1;::::0;29874:17;;29843:65:::1;::::0;;;29874:17;29851:9;29898:5;29843:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29966:5:0::1;::::0;-1:-1:-1;;29987:19:0;;;-1:-1:-1;29984:370:0::1;;30204:21;::::0;30022:252:::1;::::0;-1:-1:-1;;;30022:252:0;;30106:4:::1;30022:252;::::0;::::1;13112:34:1::0;13162:18;;;13155:34;;;-1:-1:-1;13205:18:1;;;13198:34;;;13248:18;;;13241:34;-1:-1:-1;;;;;30204:21:0;;::::1;13291:19:1::0;;;13284:44;30244:15:0::1;13344:19:1::0;;;13337:35;30022:14:0::1;:30:::0;;::::1;::::0;::::1;::::0;30060:18;;13046:19:1;;30022:252:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;30294:48:0::1;::::0;;13868:25:1;;;13924:2;13909:18;;13902:34;;;30294:48:0::1;::::0;-1:-1:-1;13841:18:1;30294:48:0::1;;;;;;;29984:370;-1:-1:-1::0;;19630:6:0;:14;;-1:-1:-1;;19630:14:0;;;-1:-1:-1;;;;;;;;;28584:1777:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:180::-;808:6;861:2;849:9;840:7;836:23;832:32;829:52;;;877:1;874;867:12;829:52;-1:-1:-1;900:23:1;;749:180;-1:-1:-1;749:180:1:o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;1070:315;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1582:160::-;1647:20;;1703:13;;1696:21;1686:32;;1676:60;;1732:1;1729;1722:12;1676:60;1582:160;;;:::o;1747:180::-;1803:6;1856:2;1844:9;1835:7;1831:23;1827:32;1824:52;;;1872:1;1869;1862:12;1824:52;1895:26;1911:9;1895:26;:::i;1932:248::-;2000:6;2008;2061:2;2049:9;2040:7;2036:23;2032:32;2029:52;;;2077:1;2074;2067:12;2029:52;-1:-1:-1;;2100:23:1;;;2170:2;2155:18;;;2142:32;;-1:-1:-1;1932:248:1:o;2185:247::-;2244:6;2297:2;2285:9;2276:7;2272:23;2268:32;2265:52;;;2313:1;2310;2303:12;2265:52;2352:9;2339:23;2371:31;2396:5;2371:31;:::i;2437:456::-;2514:6;2522;2530;2583:2;2571:9;2562:7;2558:23;2554:32;2551:52;;;2599:1;2596;2589:12;2551:52;2638:9;2625:23;2657:31;2682:5;2657:31;:::i;:::-;2707:5;-1:-1:-1;2764:2:1;2749:18;;2736:32;2777:33;2736:32;2777:33;:::i;:::-;2437:456;;2829:7;;-1:-1:-1;;;2883:2:1;2868:18;;;;2855:32;;2437:456::o;2898:337::-;2961:6;2969;3022:2;3010:9;3001:7;2997:23;2993:32;2990:52;;;3038:1;3035;3028:12;2990:52;3061:26;3077:9;3061:26;:::i;:::-;3051:36;;3137:2;3126:9;3122:18;3109:32;3181:4;3174:5;3170:16;3163:5;3160:27;3150:55;;3201:1;3198;3191:12;3150:55;3224:5;3214:15;;;2898:337;;;;;:::o;3637:315::-;3702:6;3710;3763:2;3751:9;3742:7;3738:23;3734:32;3731:52;;;3779:1;3776;3769:12;3731:52;3818:9;3805:23;3837:31;3862:5;3837:31;:::i;:::-;3887:5;-1:-1:-1;3911:35:1;3942:2;3927:18;;3911:35;:::i;:::-;3901:45;;3637:315;;;;;:::o;4192:316::-;4266:6;4274;4282;4335:2;4323:9;4314:7;4310:23;4306:32;4303:52;;;4351:1;4348;4341:12;4303:52;4387:9;4374:23;4364:33;;4444:2;4433:9;4429:18;4416:32;4406:42;;4467:35;4498:2;4487:9;4483:18;4467:35;:::i;:::-;4457:45;;4192:316;;;;;:::o;4513:385::-;4599:6;4607;4615;4623;4676:3;4664:9;4655:7;4651:23;4647:33;4644:53;;;4693:1;4690;4683:12;4644:53;-1:-1:-1;;4716:23:1;;;4786:2;4771:18;;4758:32;;-1:-1:-1;4837:2:1;4822:18;;4809:32;;4888:2;4873:18;4860:32;;-1:-1:-1;4513:385:1;-1:-1:-1;4513:385:1:o;4903:529::-;4980:6;4988;4996;5049:2;5037:9;5028:7;5024:23;5020:32;5017:52;;;5065:1;5062;5055:12;5017:52;5104:9;5091:23;5123:31;5148:5;5123:31;:::i;:::-;5173:5;-1:-1:-1;5230:2:1;5215:18;;5202:32;5243:33;5202:32;5243:33;:::i;:::-;5295:7;-1:-1:-1;5354:2:1;5339:18;;5326:32;5367:33;5326:32;5367:33;:::i;:::-;5419:7;5409:17;;;4903:529;;;;;:::o;5437:388::-;5505:6;5513;5566:2;5554:9;5545:7;5541:23;5537:32;5534:52;;;5582:1;5579;5572:12;5534:52;5621:9;5608:23;5640:31;5665:5;5640:31;:::i;:::-;5690:5;-1:-1:-1;5747:2:1;5732:18;;5719:32;5760:33;5719:32;5760:33;:::i;5830:356::-;6032:2;6014:21;;;6051:18;;;6044:30;6110:34;6105:2;6090:18;;6083:62;6177:2;6162:18;;5830:356::o;6191:127::-;6252:10;6247:3;6243:20;6240:1;6233:31;6283:4;6280:1;6273:15;6307:4;6304:1;6297:15;6323:168;6396:9;;;6427;;6444:15;;;6438:22;;6424:37;6414:71;;6465:18;;:::i;6496:217::-;6536:1;6562;6552:132;;6606:10;6601:3;6597:20;6594:1;6587:31;6641:4;6638:1;6631:15;6669:4;6666:1;6659:15;6552:132;-1:-1:-1;6698:9:1;;6496:217::o;8665:125::-;8730:9;;;8751:10;;;8748:36;;;8764:18;;:::i;10388:128::-;10455:9;;;10476:11;;;10473:37;;;10490:18;;:::i;10867:184::-;10937:6;10990:2;10978:9;10969:7;10965:23;10961:32;10958:52;;;11006:1;11003;10996:12;10958:52;-1:-1:-1;11029:16:1;;10867:184;-1:-1:-1;10867:184:1:o;11188:127::-;11249:10;11244:3;11240:20;11237:1;11230:31;11280:4;11277:1;11270:15;11304:4;11301:1;11294:15;11320:251;11390:6;11443:2;11431:9;11422:7;11418:23;11414:32;11411:52;;;11459:1;11456;11449:12;11411:52;11491:9;11485:16;11510:31;11535:5;11510:31;:::i;11576:980::-;11838:4;11886:3;11875:9;11871:19;11917:6;11906:9;11899:25;11943:2;11981:6;11976:2;11965:9;11961:18;11954:34;12024:3;12019:2;12008:9;12004:18;11997:31;12048:6;12083;12077:13;12114:6;12106;12099:22;12152:3;12141:9;12137:19;12130:26;;12191:2;12183:6;12179:15;12165:29;;12212:1;12222:195;12236:6;12233:1;12230:13;12222:195;;;12301:13;;-1:-1:-1;;;;;12297:39:1;12285:52;;12392:15;;;;12357:12;;;;12333:1;12251:9;12222:195;;;-1:-1:-1;;;;;;;12473:32:1;;;;12468:2;12453:18;;12446:60;-1:-1:-1;;;12537:3:1;12522:19;12515:35;12434:3;11576:980;-1:-1:-1;;;11576:980:1:o;13383:306::-;13471:6;13479;13487;13540:2;13528:9;13519:7;13515:23;13511:32;13508:52;;;13556:1;13553;13546:12;13508:52;13585:9;13579:16;13569:26;;13635:2;13624:9;13620:18;13614:25;13604:35;;13679:2;13668:9;13664:18;13658:25;13648:35;;13383:306;;;;;:::o
Swarm Source
ipfs://3b1c1b6cb97bc9c2e73f65933d5e224bd6753f47cc47e4ab67cfdb1535e6d8b8
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.