ETH Price: $3,695.21 (+3.74%)

Token

ERC-20: Bunny Inu ($BUNNY)
 

Overview

Max Total Supply

100,000,000,000 $BUNNY

Holders

20

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
552,628,324.41329853156644719 $BUNNY

Value
$0.00
0xfac548234c2ef547ab51b0e5f8dced4422b91029
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BunnyInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-27
*/

/*

Web: https://bunnyinu.io/
Twitter: https://twitter.com/BunnyInu_Eth
Telegram: https://t.me/BunnyInu

*/


// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value    );
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data,string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target,data,value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value,string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue,string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) external virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}


interface IUniswapV2Factory {
    event PairCreated( address indexed token0, address indexed token1, address pair, uint256);

    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(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    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, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);

    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) 
    external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
    external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) 
    external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
    external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
    external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
    external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) 
    external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) 
    external returns (uint256[] memory amounts);

    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) 
    external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) 
    external returns (uint256[] memory amounts);

    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) 
    external returns (uint256[] memory amounts);

    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline) 
    external payable returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) 
    external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut)
    external pure returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) 
    external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);
    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external;
}

contract BunnyInu is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress = payable(0x4090Bd8d0e1F3e8Ca31073E8EE80c320E9c915C5);    
    address payable public teamAddress = payable(0x4090Bd8d0e1F3e8Ca31073E8EE80c320E9c915C5);   
    address payable private ownerAddress = payable(0x4090Bd8d0e1F3e8Ca31073E8EE80c320E9c915C5);    
    address payable liquidityAddress = payable(msg.sender);         
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; 
        
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e11 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    bool public limitsInEffect = false;
    
    string private constant _name = "Bunny Inu";
    string private constant _symbol = "$BUNNY";
    
    uint8 private constant _decimals = 18;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract.
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _buyMarketingFee = 4;
    uint256 public _buyTaxFee = 6;
    uint256 public _buyLiquidityFee = 2;
    uint256 public _buyTeamFee = 2;

    // This will be adjust to avoid dump in the first few minutes
    uint256 public _sellMarketingFee = 6;
    uint256 public _sellTaxFee = 8;
    uint256 public _sellLiquidityFee = 2;
    uint256 public _sellTeamFee = 2;
    
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    mapping(address => bool) public boughtEarly;
    uint256 public earlyBuyPenaltyEnd; // determines when snipers/bots can sell without extra penalty
    
    uint256 private _liquidityTokensToSwap;
    uint256 private _marketingTokensToSwap;
    uint256 private _teamTokensToSwap;
    
    bool private gasLimitActive = false;
    uint256 private gasPriceLimit = 100 * 1 gwei; 
    uint256 private gasMaxLimit = 50000000; // gasLeft limit
    
    uint256 public maxTransactionAmount;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap = _tTotal * 5 / 10000; // 0.05%

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event SwapETHForTokens(uint256 amountIn, address[] path);
    event SwapTokensForETH(uint256 amountIn, address[] path);    
    event SetAutomatedMarketMakerPair(address pair, bool value);    
    event ExcludeFromReward(address excludedAddress);    
    event IncludeInReward(address includedAddress);    
    event ExcludeFromFee(address excludedAddress);    
    event IncludeInFee(address includedAddress);    
    event SetBuyFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee, uint256 buybackFee);    
    event SetSellFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee, uint256 buybackFee);    
    event TransferForeignToken(address token, uint256 amount);    
    event UpdatedMarketingAddress(address marketing);    
    event UpdatedLiquidityAddress(address liquidity);    
    event UpdatedTeamAddress(address buyback);    
    event OwnerForcedSwapBack(uint256 timestamp);    
    event BoughtEarly(address indexed sniper);    
    event RemovedSniper(address indexed notsnipersupposedly);
    event UpdatedRouter(address indexed newrouter);

    modifier lockTheSwap() {
        inSwapAndLiquify = true; _; inSwapAndLiquify = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;        
        
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); 
        
        _setAutomatedMarketMakerPair(uniswapV2Pair, true);
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[liquidityAddress] = true;
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) external view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,"ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(_msgSender(),spender,_allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

     function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        uint256 amount = address(this).balance;
        payable(msg.sender).transfer(amount * amountPercentage / 100);
    }
    
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        _approve(_msgSender(),spender,_allowances[_msgSender()][spender].sub(subtractedValue,"ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) external view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    } 
    
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function setminimumTokensBeforeSwapAmount(uint256 ratio) external onlyOwner() {
        minimumTokensBeforeSwap = _tTotal * ratio / 10000;
    }
    
    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function setProtectionSettings(bool antiGas) external onlyOwner() {
        gasLimitActive = antiGas;
    }
    
    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75);
        gasPriceLimit = gas * 1 gwei;
    }
    
    function setGasMaxLimit(uint256 gas) external onlyOwner {
        require(gas >= 750000);
        gasMaxLimit = gas * gasPriceLimit;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        return true;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length + 1 <= 50, "Cannot exclude more than 50 accounts.  Include a previously excluded address.");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !inSwapAndLiquify) {
                
                if(from != owner() && to != uniswapV2Pair && block.number == tradingActiveBlock) {
                    boughtEarly[to] = true;
                    emit BoughtEarly(to);
                }
                
                if (gasLimitActive && automatedMarketMakerPairs[from]) {
                    require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
                }

                //only on buys
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }
        
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap + _teamTokensToSwap;
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        // swap and liquify
        if (!inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > 0 &&
            totalTokensToSwap > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance) {
            swapBack();
        }

        bool takeFee = true;

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
            buyOrSellSwitch = TRANSFER;
        } else {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                removeAllFee();
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyMarketingFee + _buyTeamFee;
                buyOrSellSwitch = BUY;
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                removeAllFee();
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellMarketingFee + _sellTeamFee;
                buyOrSellSwitch = SELL;
                // Tax if bought in the same block as trading active for 1 hours
                if(boughtEarly[from]  && earlyBuyPenaltyEnd <= block.number){
                    _taxFee = _taxFee * 2;
                    _liquidityFee = _liquidityFee * 2;
                }
            // Normal transfers do not get taxed
            } else {
                removeAllFee();
                buyOrSellSwitch = TRANSFER;
            }
        }

        _tokenTransfer(from, to, amount, takeFee);        
    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));        
        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_teamTokensToSwap).add(_marketingTokensToSwap);
        
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwapForCrypto = contractBalance.sub(tokensForLiquidity);
        
        uint256 initialCryptoBalance = address(this).balance;

        swapTokensForCrypto(amountToSwapForCrypto); 
        
        uint256 cryptoBalance = address(this).balance.sub(initialCryptoBalance);
        
        uint256 cryptoForMarketing = cryptoBalance.mul(3*_marketingTokensToSwap/4).div(totalTokensToSwap);
        uint256 cryptoForCharity = cryptoBalance.mul(_marketingTokensToSwap/4).div(totalTokensToSwap);
        uint256 cryptoForTeam1 = cryptoBalance.mul(_teamTokensToSwap/2).div(totalTokensToSwap);
        uint256 cryptoForTeam2 = cryptoBalance.mul(_teamTokensToSwap/2).div(totalTokensToSwap);
        
        uint256 cryptoForLiquidity = cryptoBalance.sub(cryptoForMarketing).sub(cryptoForTeam1).sub(cryptoForTeam2).sub(cryptoForCharity);

        _liquidityTokensToSwap = 0;
        _marketingTokensToSwap = 0;
        _teamTokensToSwap = 0;
        
        (bool success,) = address(ownerAddress).call{value: cryptoForTeam1}("");
        (success,) = address(marketingAddress).call{value: cryptoForCharity}("");
        (success,) = address(ownerAddress).call{value: cryptoForTeam2}("");
        (success,) = address(marketingAddress).call{value: cryptoForMarketing}("");
        
        
        addLiquidity(tokensForLiquidity, cryptoForLiquidity);
        emit SwapAndLiquify(amountToSwapForCrypto, cryptoForLiquidity, tokensForLiquidity);
        
        // Use leftover Crypto for buyback of token to burn
        if(address(this).balance > 0){
            swapETHForTokens(address(this).balance);
        }
    }
    
    function swapTokensForCrypto(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
    }
    
    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path,deadAddress, block.timestamp.add(300));
        
        emit SwapETHForTokens(amount, path);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{ value: ethAmount }(address(this), tokenAmount, 0, 0, liquidityAddress, block.timestamp);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee) removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount,rTransferAmount,rFee,tTransferAmount,tFee,tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256 ){
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _teamTokensToSwap += tLiquidity * _buyTeamFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _buyMarketingFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _teamTokensToSwap += tLiquidity * _sellTeamFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _sellMarketingFee / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(10**2);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
    }
    
    function removeBoughtEarly(address account) external onlyOwner {
        boughtEarly[account] = false;
        emit RemovedSniper(account);
    }

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyMarketingFee, uint256 buyTeamFee) external onlyOwner {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyMarketingFee = buyMarketingFee;
        _buyTeamFee = buyTeamFee;
        emit SetBuyFee(buyMarketingFee, buyLiquidityFee, buyTaxFee, buyTeamFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellMarketingFee, uint256 sellTeamFee) external onlyOwner {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellMarketingFee = sellMarketingFee;
        _sellTeamFee = sellTeamFee;
        emit SetSellFee(sellMarketingFee, sellLiquidityFee, sellTaxFee, sellTeamFee);
    }


    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
        emit UpdatedMarketingAddress(_marketingAddress);
    }
    
    function setTeamAddress(address _teamAddress) external onlyOwner {
        require(_teamAddress != address(0), "_teamAddress address cannot be 0");
        teamAddress = payable(_teamAddress);
        _isExcludedFromFee[teamAddress] = true;
        emit UpdatedTeamAddress(teamAddress);
    }
    
    function setLiquidityAddress(address _liquidityAddress) external onlyOwner {
        require(_liquidityAddress != address(0), "_liquidityAddress address cannot be 0");
        liquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFee[liquidityAddress] = true;
        emit UpdatedLiquidityAddress(_liquidityAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function getPairAddress() external view onlyOwner returns (address) {
        return uniswapV2Pair;
    }

    function changeRouterVersion(address _router) external onlyOwner returns (address _pair) {
        require(_router != address(0), "_router address cannot be 0");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);

        _pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        if (_pair == address(0)) {
            // Pair doesn't exist
            _pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
                address(this),
                _uniswapV2Router.WETH()
            );
        }
        uniswapV2Pair = _pair;

        // Set the router of the contract variables
        uniswapV2Router = _uniswapV2Router;
        emit UpdatedRouter(_router);
    }

    // To receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidity","type":"address"}],"name":"UpdatedLiquidityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newrouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyback","type":"address"}],"name":"UpdatedTeamAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyTeamFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiGas","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellTeamFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamAddress","type":"address"}],"name":"setTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"name":"setminimumTokensBeforeSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"teamAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600380546001600160a01b0319908116734090bd8d0e1f3e8ca31073e8ee80c320e9c915c590811790925560048054821683179055600580548216909217909155600680549091163317905561dead608052620000716c01431e0fae6d7217caa000000060001962000d8c565b6200007f9060001962000db9565b600d55600f805460ff199081169091556011546012556013546014556004601555600660168190556002601781905560188190556019919091556008601a55601b819055601c556000601d5560238054909116905564174876e8006024556302faf080602555612710620001026c01431e0fae6d7217caa0000000600562000dd3565b6200010e919062000df5565b602955602b805461ffff60a81b191690553480156200012c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d543360009081526007602090815260409182902092909255602a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b81529151909263c45a01559260048082019391829003018186803b158015620001e357600080fd5b505afa158015620001f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021e919062000e0c565b6001600160a01b031663c9c6539630602a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027c57600080fd5b505afa15801562000291573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b7919062000e0c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200030057600080fd5b505af115801562000315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033b919062000e0c565b602b80546001600160a01b0319166001600160a01b0392909216918217905562000367906001620004a2565b6001600a6000620003806000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600a90935281832080548516600190811790915560035482168452828420805486168217905560065490911683529120805490921617905562000408620004006000546001600160a01b031690565b60016200053c565b620004153060016200053c565b6200042461dead60016200053c565b602b805461ffff60a81b191661010160a81b179055620004413390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6c01431e0fae6d7217caa00000006040516200049491815260200190565b60405180910390a362000ef4565b6001600160a01b0382166000908152602860205260409020805460ff1916821515179055620004d282826200053c565b8015620004e457620004e482620005b6565b80620004f557620004f582620007ce565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a15050565b6000546001600160a01b031633146200058b5760405162461bcd60e51b815260206004820181905260248201526000805160206200502b83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620006015760405162461bcd60e51b815260206004820181905260248201526000805160206200502b833981519152604482015260640162000582565b6001600160a01b0381166000908152600b602052604090205460ff16156200066c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000582565b600c546032906200067f90600162000e37565b11156200070b5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a40162000582565b6001600160a01b0381166000908152600760205260409020541562000768576001600160a01b0381166000908152600760205260409020546200074e90620009bb565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b03163314620008195760405162461bcd60e51b815260206004820181905260248201526000805160206200502b833981519152604482015260640162000582565b6001600160a01b0381166000908152600b602052604090205460ff16620008835760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640162000582565b60005b600c54811015620009b757816001600160a01b0316600c8281548110620008b157620008b162000e52565b6000918252602090912001546001600160a01b03161415620009a257600c8054620008df9060019062000db9565b81548110620008f257620008f262000e52565b600091825260209091200154600c80546001600160a01b03909216918390811062000921576200092162000e52565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600b90925220805460ff19169055600c8054806200097c576200097c62000e68565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80620009ae8162000e7e565b91505062000886565b5050565b6000600d5482111562000a245760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000582565b600062000a3062000a53565b905062000a4c818462000a8660201b6200229e1790919060201c565b9392505050565b6000808062000a6162000ad0565b9150915062000a7f818362000a8660201b6200229e1790919060201c565b9250505090565b600062000a4c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000cba60201b60201c565b600d5460009081906c01431e0fae6d7217caa0000000825b600c5481101562000c65578260076000600c848154811062000b0e5762000b0e62000e52565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000b7d57508160086000600c848154811062000b565762000b5662000e52565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000b9e575050600d54936c01431e0fae6d7217caa00000009350915050565b62000bf560076000600c848154811062000bbc5762000bbc62000e52565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548591620022e062000cf6821b17901c565b925062000c4e60086000600c848154811062000c155762000c1562000e52565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548491620022e062000cf6821b17901c565b91508062000c5c8162000e7e565b91505062000ae8565b5062000c8f6c01431e0fae6d7217caa0000000600d5462000a8660201b6200229e1790919060201c565b82101562000cb1575050600d54926c01431e0fae6d7217caa000000092509050565b90939092509050565b6000818362000cde5760405162461bcd60e51b815260040162000582919062000e9c565b50600062000ced848662000df5565b95945050505050565b600062000a4c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000d4060201b60201c565b6000818484111562000d675760405162461bcd60e51b815260040162000582919062000e9c565b50600062000ced848662000db9565b634e487b7160e01b600052601260045260246000fd5b60008262000d9e5762000d9e62000d76565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000dce5762000dce62000da3565b500390565b600081600019048311821515161562000df05762000df062000da3565b500290565b60008262000e075762000e0762000d76565b500490565b60006020828403121562000e1f57600080fd5b81516001600160a01b038116811462000a4c57600080fd5b6000821982111562000e4d5762000e4d62000da3565b500190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141562000e955762000e9562000da3565b5060010190565b600060208083528351808285015260005b8181101562000ecb5785810183015185820160400152820162000ead565b8181111562000ede576000604083870101525b50601f01601f1916929092016040019392505050565b60805161411462000f17600039600081816105c301526136eb01526141146000f3fe6080604052600436106103dd5760003560e01c80637571336a116101fd578063a9059cbb11610118578063cab03471116100ab578063e653da081161007a578063e653da0814610bd8578063ea2f0b3714610bf8578063ee40166e14610c18578063efcc52de14610c2e578063f2fde38b14610c4457600080fd5b8063cab0347114610b46578063d00dc58914610b5c578063dc44b6a014610b7c578063dd62ed3e14610b9257600080fd5b8063c49b9a80116100e7578063c49b9a8014610ae4578063c5d2418914610b04578063c860795214610b1a578063c8c8ebe414610b3057600080fd5b8063a9059cbb14610a5d578063b62496f514610a7d578063bbc0c74214610aad578063c469b6dd14610ace57600080fd5b80638da5cb5b11610190578063a0263c891161015f578063a0263c89146109e8578063a073d37f14610a08578063a457c2d714610a1d578063a5ece94114610a3d57600080fd5b80638da5cb5b1461095b578063906e9dd01461097957806395d89b41146109995780639a7a23d6146109c857600080fd5b806388790a68116101cc57806388790a68146108d757806388f82020146108ed5780638c5a133d146109265780638d5f81e21461094657600080fd5b80637571336a146108475780637ad6c84d146108675780638366e79a1461088757806385ecfd28146108a757600080fd5b806339509351116102f85780635342acb41161028b578063602bc62b1161025a578063602bc62b146107c85780636690864e146107dd57806370a08231146107fd578063715018a61461081d578063751039fc1461083257600080fd5b80635342acb41461073c578063557ed1ba146107755780635881f3ef146107885780635bb988c9146107a857600080fd5b80634a62bb65116102c75780634a62bb65146106c15780634a74bb02146106db57806352390c02146106fc578063525fa81f1461071c57600080fd5b80633950935114610641578063437823ec146106615780634549b0391461068157806349bd5a5e146106a157600080fd5b80631da1db5e1161037057806327c8f8351161033f57806327c8f835146105b15780632d838119146105e5578063313ce567146106055780633685d4191461062157600080fd5b80631da1db5e146105455780631fc851bd14610565578063200a692d1461057b57806323b872dd1461059157600080fd5b806313114a9d116103ac57806313114a9d146104af5780631694505e146104ce57806318160ddd146105065780631c75f0851461052557600080fd5b806306fdde03146103e9578063092316021461042d578063095ea7b31461044f57806310d5de531461047f57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b5060408051808201909152600981526842756e6e7920496e7560b81b60208201525b6040516104249190613c3f565b60405180910390f35b34801561043957600080fd5b5061044d610448366004613c94565b610c64565b005b34801561045b57600080fd5b5061046f61046a366004613cc5565b610cb9565b6040519015158152602001610424565b34801561048b57600080fd5b5061046f61049a366004613cf1565b60276020526000908152604090205460ff1681565b3480156104bb57600080fd5b50600e545b604051908152602001610424565b3480156104da57600080fd5b50602a546104ee906001600160a01b031681565b6040516001600160a01b039091168152602001610424565b34801561051257600080fd5b50680a18f07d736b90be55601d1b6104c0565b34801561053157600080fd5b506004546104ee906001600160a01b031681565b34801561055157600080fd5b5061044d610560366004613c94565b610cd0565b34801561057157600080fd5b506104c0601f5481565b34801561058757600080fd5b506104c0601a5481565b34801561059d57600080fd5b5061046f6105ac366004613d0e565b610d42565b3480156105bd57600080fd5b506104ee7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105f157600080fd5b506104c0610600366004613c94565b610dab565b34801561061157600080fd5b5060405160128152602001610424565b34801561062d57600080fd5b5061044d61063c366004613cf1565b610e2f565b34801561064d57600080fd5b5061046f61065c366004613cc5565b610fe6565b34801561066d57600080fd5b5061044d61067c366004613cf1565b61101c565b34801561068d57600080fd5b506104c061069c366004613d5d565b6110a1565b3480156106ad57600080fd5b50602b546104ee906001600160a01b031681565b3480156106cd57600080fd5b50600f5461046f9060ff1681565b3480156106e757600080fd5b50602b5461046f90600160a81b900460ff1681565b34801561070857600080fd5b5061044d610717366004613cf1565b611138565b34801561072857600080fd5b5061044d610737366004613cf1565b611326565b34801561074857600080fd5b5061046f610757366004613cf1565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561078157600080fd5b50426104c0565b34801561079457600080fd5b506104ee6107a3366004613cf1565b61141c565b3480156107b457600080fd5b5061044d6107c3366004613cf1565b6117f6565b3480156107d457600080fd5b506002546104c0565b3480156107e957600080fd5b5061044d6107f8366004613cf1565b611869565b34801561080957600080fd5b506104c0610818366004613cf1565b611954565b34801561082957600080fd5b5061044d6119b3565b34801561083e57600080fd5b5061046f611a27565b34801561085357600080fd5b5061044d610862366004613d8d565b611a6e565b34801561087357600080fd5b5061044d610882366004613c94565b611ac3565b34801561089357600080fd5b5061046f6108a2366004613dbb565b611b16565b3480156108b357600080fd5b5061046f6108c2366004613cf1565b601e6020526000908152604090205460ff1681565b3480156108e357600080fd5b506104c0601b5481565b3480156108f957600080fd5b5061046f610908366004613cf1565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561093257600080fd5b5061044d610941366004613de9565b611ce3565b34801561095257600080fd5b506104ee611d70565b34801561096757600080fd5b506000546001600160a01b03166104ee565b34801561098557600080fd5b5061044d610994366004613cf1565b611dab565b3480156109a557600080fd5b506040805180820190915260068152652442554e4e5960d01b6020820152610417565b3480156109d457600080fd5b5061044d6109e3366004613d8d565b611ea1565b3480156109f457600080fd5b5061044d610a03366004613e1b565b611f59565b348015610a1457600080fd5b506029546104c0565b348015610a2957600080fd5b5061046f610a38366004613cc5565b611f96565b348015610a4957600080fd5b506003546104ee906001600160a01b031681565b348015610a6957600080fd5b5061046f610a78366004613cc5565b611fe5565b348015610a8957600080fd5b5061046f610a98366004613cf1565b60286020526000908152604090205460ff1681565b348015610ab957600080fd5b50602b5461046f90600160b01b900460ff1681565b348015610ada57600080fd5b506104c060185481565b348015610af057600080fd5b5061044d610aff366004613e1b565b611ff2565b348015610b1057600080fd5b506104c060155481565b348015610b2657600080fd5b506104c060195481565b348015610b3c57600080fd5b506104c060265481565b348015610b5257600080fd5b506104c0601c5481565b348015610b6857600080fd5b5061044d610b77366004613c94565b612069565b348015610b8857600080fd5b506104c060175481565b348015610b9e57600080fd5b506104c0610bad366004613dbb565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610be457600080fd5b5061044d610bf3366004613de9565b6120b6565b348015610c0457600080fd5b5061044d610c13366004613cf1565b612139565b348015610c2457600080fd5b506104c0601d5481565b348015610c3a57600080fd5b506104c060165481565b348015610c5057600080fd5b5061044d610c5f366004613cf1565b6121b4565b6000546001600160a01b03163314610c975760405162461bcd60e51b8152600401610c8e90613e38565b60405180910390fd5b604b811015610ca557600080fd5b610cb381633b9aca00613e83565b60245550565b6000610cc6338484612322565b5060015b92915050565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b8152600401610c8e90613e38565b47336108fc6064610d0b8585613e83565b610d159190613ea2565b6040518115909202916000818181858888f19350505050158015610d3d573d6000803e3d6000fd5b505050565b6000610d4f848484612446565b610da18433610d9c85604051806060016040528060288152602001614092602891396001600160a01b038a1660009081526009602090815260408083203384529091529020549190612acb565b612322565b5060019392505050565b6000600d54821115610e125760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c8e565b6000610e1c612b05565b9050610e28838261229e565b9392505050565b6000546001600160a01b03163314610e595760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166000908152600b602052604090205460ff16610ec15760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c8e565b60005b600c54811015610fe257816001600160a01b0316600c8281548110610eeb57610eeb613ec4565b6000918252602090912001546001600160a01b03161415610fd057600c8054610f1690600190613eda565b81548110610f2657610f26613ec4565b600091825260209091200154600c80546001600160a01b039092169183908110610f5257610f52613ec4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600b90925220805460ff19169055600c805480610faa57610faa613ef1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fda81613f07565b915050610ec4565b5050565b3360008181526009602090815260408083206001600160a01b03871684529091528120549091610cc6918590610d9c9086612b28565b6000546001600160a01b031633146110465760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b6000680a18f07d736b90be55601d1b8311156110ff5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c8e565b8161111e57600061110f84612b87565b50939550610cca945050505050565b600061112984612b87565b50929550610cca945050505050565b6000546001600160a01b031633146111625760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166000908152600b602052604090205460ff16156111cb5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c8e565b600c546032906111dc906001613f22565b11156112665760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c8e565b6001600160a01b038116600090815260076020526040902054156112c0576001600160a01b0381166000908152600760205260409020546112a690610dab565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031633146113505760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166113b45760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c8e565b600680546001600160a01b0319166001600160a01b0383169081179091556000818152600a6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101611096565b600080546001600160a01b031633146114475760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b03821661149d5760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610c8e565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114db57600080fd5b505afa1580156114ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115139190613f3a565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561155b57600080fd5b505afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115939190613f3a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156115d957600080fd5b505afa1580156115ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116119190613f3a565b91506001600160a01b03821661179557806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561165a57600080fd5b505afa15801561166e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116929190613f3a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116da57600080fd5b505afa1580156116ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117129190613f3a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561175a57600080fd5b505af115801561176e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117929190613f3a565b91505b602b80546001600160a01b038085166001600160a01b031992831617909255602a80548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b031633146118205760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166000818152601e6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b031633146118935760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166118e95760405162461bcd60e51b815260206004820181905260248201527f5f7465616d4164647265737320616464726573732063616e6e6f7420626520306044820152606401610c8e565b600480546001600160a01b0319166001600160a01b0383811691821783556000918252600a6020908152604092839020805460ff1916600117905592549151911681527f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f1220002137569101611096565b6001600160a01b0381166000908152600b602052604081205460ff161561199157506001600160a01b031660009081526008602052604090205490565b6001600160a01b038216600090815260076020526040902054610cca90610dab565b6000546001600160a01b031633146119dd5760405162461bcd60e51b8152600401610c8e90613e38565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611a525760405162461bcd60e51b8152600401610c8e90613e38565b50600f805460ff19908116909155602380549091169055600190565b6000546001600160a01b03163314611a985760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611aed5760405162461bcd60e51b8152600401610c8e90613e38565b612710611b0682680a18f07d736b90be55601d1b613e83565b611b109190613ea2565b60295550565b600080546001600160a01b03163314611b415760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b038316611b975760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c8e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611bd957600080fd5b505afa158015611bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c119190613f57565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611c5f57600080fd5b505af1158015611c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c979190613f70565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611d0d5760405162461bcd60e51b8152600401610c8e90613e38565b60168490556017839055601582905560188190556040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b600080546001600160a01b03163314611d9b5760405162461bcd60e51b8152600401610c8e90613e38565b50602b546001600160a01b031690565b6000546001600160a01b03163314611dd55760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b038116611e395760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c8e565b600380546001600160a01b0319166001600160a01b0383169081179091556000818152600a6020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101611096565b6000546001600160a01b03163314611ecb5760405162461bcd60e51b8152600401610c8e90613e38565b602b546001600160a01b0383811691161415611f4f5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c8e565b610fe28282612bd6565b6000546001600160a01b03163314611f835760405162461bcd60e51b8152600401610c8e90613e38565b6023805460ff1916911515919091179055565b6000610cc63384610d9c856040518060600160405280602581526020016140ba602591393360009081526009602090815260408083206001600160a01b038d1684529091529020549190612acb565b6000610cc6338484612446565b6000546001600160a01b0316331461201c5760405162461bcd60e51b8152600401610c8e90613e38565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061109690831515815260200190565b6000546001600160a01b031633146120935760405162461bcd60e51b8152600401610c8e90613e38565b620b71b08110156120a357600080fd5b6024546120b09082613e83565b60255550565b6000546001600160a01b031633146120e05760405162461bcd60e51b8152600401610c8e90613e38565b601a849055601b8390556019829055601c8190556040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611d62565b6000546001600160a01b031633146121635760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611096565b6000546001600160a01b031633146121de5760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166122435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c69565b6000610e2883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612acb565b6001600160a01b0383166123845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8e565b6001600160a01b0382166123e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8e565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8e565b6001600160a01b03821661250c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8e565b6000811161256e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c8e565b602b54600160b01b900460ff1661260a576001600160a01b0383166000908152600a602052604090205460ff16806125be57506001600160a01b0382166000908152600a602052604090205460ff165b61260a5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c8e565b600f5460ff1615612846576000546001600160a01b0384811691161480159061264157506000546001600160a01b03838116911614155b801561265557506001600160a01b03821615155b801561266c57506001600160a01b03821661dead14155b80156126825750602b54600160a01b900460ff16155b15612846576000546001600160a01b038481169116148015906126b35750602b546001600160a01b03838116911614155b80156126c05750601d5443145b1561270f576001600160a01b0382166000818152601e6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60235460ff16801561273957506001600160a01b03831660009081526028602052604090205460ff165b15612790576024543a11156127905760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c8e565b6001600160a01b03831660009081526028602052604090205460ff1680156127d157506001600160a01b03821660009081526027602052604090205460ff16155b15612846576026548111156128465760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c8e565b600060225460215460205461285b9190613f22565b6128659190613f22565b9050600061287230611954565b602954602b5491925082101590600160a01b900460ff1615801561289f5750602b54600160a81b900460ff165b80156128c05750602b546000906128be906001600160a01b0316611954565b115b80156128cc5750600083115b80156128f157506001600160a01b0385166000908152600a602052604090205460ff16155b801561291657506001600160a01b0386166000908152600a602052604090205460ff16155b801561293a57506001600160a01b03851660009081526028602052604090205460ff165b80156129435750805b1561295057612950612c97565b6001600160a01b0386166000908152600a602052604090205460019060ff168061299257506001600160a01b0386166000908152600a602052604090205460ff165b156129a4575060036010556000612ab6565b6001600160a01b03871660009081526028602052604090205460ff16156129fd576129cd612faf565b6016546011556018546015546017546129e69190613f22565b6129f09190613f22565b6013556001601055612ab6565b6001600160a01b03861660009081526028602052604090205460ff1615612aa857612a26612faf565b601a54601155601c54601954601b54612a3f9190613f22565b612a499190613f22565b60135560026010556001600160a01b0387166000908152601e602052604090205460ff168015612a7b575043601f5411155b15612aa357601154612a8e906002613e83565b601155601354612a9f906002613e83565b6013555b612ab6565b612ab0612faf565b60036010555b612ac287878784612fdd565b50505050505050565b60008184841115612aef5760405162461bcd60e51b8152600401610c8e9190613c3f565b506000612afc8486613eda565b95945050505050565b6000806000612b12613103565b9092509050612b21828261229e565b9250505090565b600080612b358385613f22565b905083811015610e285760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c8e565b6000806000806000806000806000612b9e8a6132ab565b9250925092506000806000612bbc8d8686612bb7612b05565b6132e7565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602860205260409020805460ff1916821515179055612c048282611a6e565b8015612c1357612c1382611138565b80612c2157612c2182610e2f565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91015b60405180910390a15050565b60008183612c8a5760405162461bcd60e51b8152600401610c8e9190613c3f565b506000612afc8486613ea2565b602b805460ff60a01b1916600160a01b1790556000612cb530611954565b90506000612cdc602154612cd6602254602054612b2890919063ffffffff16565b90612b28565b90506000612cf6600260205461229e90919063ffffffff16565b90506000612d0484836122e0565b905047612d1082613337565b6000612d1c47836122e0565b90506000612d4f86612d4960046021546003612d389190613e83565b612d429190613ea2565b85906134a0565b9061229e565b90506000612d7087612d496004602154612d699190613ea2565b86906134a0565b90506000612d9188612d496002602254612d8a9190613ea2565b87906134a0565b90506000612db289612d496002602254612dab9190613ea2565b88906134a0565b90506000612dce84612dc8848187818c8c6122e0565b906122e0565b600060208190556021819055602281905560055460405192935090916001600160a01b039091169085908381818185875af1925050503d8060008114612e30576040519150601f19603f3d011682016040523d82523d6000602084013e612e35565b606091505b50506003546040519192506001600160a01b0316908690600081818185875af1925050503d8060008114612e85576040519150601f19603f3d011682016040523d82523d6000602084013e612e8a565b606091505b50506005546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114612eda576040519150601f19603f3d011682016040523d82523d6000602084013e612edf565b606091505b50506003546040519192506001600160a01b0316908790600081818185875af1925050503d8060008114612f2f576040519150601f19603f3d011682016040523d82523d6000602084013e612f34565b606091505b505080915050612f448a8361351f565b604080518a8152602081018490529081018b90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715612f9457612f94476135e2565b5050602b805460ff60a01b1916905550505050505050505050565b601154158015612fbf5750601354155b15612fc657565b601180546012556013805460145560009182905555565b80612fea57612fea612faf565b6001600160a01b0384166000908152600b602052604090205460ff16801561302b57506001600160a01b0383166000908152600b602052604090205460ff16155b156130405761303b848484613798565b6130ec565b6001600160a01b0384166000908152600b602052604090205460ff1615801561308157506001600160a01b0383166000908152600b602052604090205460ff165b156130915761303b8484846138be565b6001600160a01b0384166000908152600b602052604090205460ff1680156130d157506001600160a01b0383166000908152600b602052604090205460ff165b156130e15761303b848484613967565b6130ec8484846139da565b6130fd601254601155601454601355565b50505050565b600d546000908190680a18f07d736b90be55601d1b825b600c54811015613268578260076000600c848154811061313c5761313c613ec4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806131a757508160086000600c848154811061318057613180613ec4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156131c6575050600d5493680a18f07d736b90be55601d1b9350915050565b61320c60076000600c84815481106131e0576131e0613ec4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122e0565b925061325460086000600c848154811061322857613228613ec4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122e0565b91508061326081613f07565b91505061311a565b50600d5461328290680a18f07d736b90be55601d1b61229e565b8210156132a2575050600d5492680a18f07d736b90be55601d1b92509050565b90939092509050565b6000806000806132ba85613a1e565b905060006132c786613a3a565b905060006132d982612dc889866122e0565b979296509094509092505050565b60008080806132f688866134a0565b9050600061330488876134a0565b9050600061331288886134a0565b9050600061332482612dc886866122e0565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061336c5761336c613ec4565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156133c057600080fd5b505afa1580156133d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f89190613f3a565b8160018151811061340b5761340b613ec4565b6001600160a01b039283166020918202929092010152602a546134319130911684612322565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061346a908590600090869030904290600401613fd1565b600060405180830381600087803b15801561348457600080fd5b505af1158015613498573d6000803e3d6000fd5b505050505050565b6000826134af57506000610cca565b60006134bb8385613e83565b9050826134c88583613ea2565b14610e285760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c8e565b602a546135379030906001600160a01b031684612322565b602a5460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156135a257600080fd5b505af11580156135b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135db919061400d565b5050505050565b6040805160028082526060820183526000926020830190803683375050602a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561364757600080fd5b505afa15801561365b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367f9190613f3a565b8160008151811061369257613692613ec4565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106136c6576136c6613ec4565b6001600160a01b039283166020918202929092010152602a541663b6f9de95836000847f00000000000000000000000000000000000000000000000000000000000000006137164261012c612b28565b6040518663ffffffff1660e01b8152600401613735949392919061403b565b6000604051808303818588803b15801561374e57600080fd5b505af1158015613762573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051612c5d929190614070565b6000806000806000806137aa87612b87565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506137dc90886122e0565b6001600160a01b038a1660009081526008602090815260408083209390935560079052205461380b90876122e0565b6001600160a01b03808b1660009081526007602052604080822093909355908a168152205461383a9086612b28565b6001600160a01b03891660009081526007602052604090205561385c81613a56565b6138668483613c1b565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138ab91815260200190565b60405180910390a3505050505050505050565b6000806000806000806138d087612b87565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061390290876122e0565b6001600160a01b03808b16600090815260076020908152604080832094909455918b168152600890915220546139389084612b28565b6001600160a01b03891660009081526008602090815260408083209390935560079052205461383a9086612b28565b60008060008060008061397987612b87565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506139ab90886122e0565b6001600160a01b038a1660009081526008602090815260408083209390935560079052205461390290876122e0565b6000806000806000806139ec87612b87565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061380b90876122e0565b6000610cca6064612d49601154856134a090919063ffffffff16565b6000610cca6064612d49601354856134a090919063ffffffff16565b60016010541415613af757601354601754613a719083613e83565b613a7b9190613ea2565b60206000828254613a8c9190613f22565b9091555050601354601854613aa19083613e83565b613aab9190613ea2565b60226000828254613abc9190613f22565b9091555050601354601554613ad19083613e83565b613adb9190613ea2565b60216000828254613aec9190613f22565b90915550613b939050565b60026010541415613b9357601354601b54613b129083613e83565b613b1c9190613ea2565b60206000828254613b2d9190613f22565b9091555050601354601c54613b429083613e83565b613b4c9190613ea2565b60226000828254613b5d9190613f22565b9091555050601354601954613b729083613e83565b613b7c9190613ea2565b60216000828254613b8d9190613f22565b90915550505b6000613b9d612b05565b90506000613bab83836134a0565b30600090815260076020526040902054909150613bc89082612b28565b30600090815260076020908152604080832093909355600b9052205460ff1615610d3d5730600090815260086020526040902054613c069084612b28565b30600090815260086020526040902055505050565b600d54613c2890836122e0565b600d55600e54613c389082612b28565b600e555050565b600060208083528351808285015260005b81811015613c6c57858101830151858201604001528201613c50565b81811115613c7e576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613ca657600080fd5b5035919050565b6001600160a01b0381168114613cc257600080fd5b50565b60008060408385031215613cd857600080fd5b8235613ce381613cad565b946020939093013593505050565b600060208284031215613d0357600080fd5b8135610e2881613cad565b600080600060608486031215613d2357600080fd5b8335613d2e81613cad565b92506020840135613d3e81613cad565b929592945050506040919091013590565b8015158114613cc257600080fd5b60008060408385031215613d7057600080fd5b823591506020830135613d8281613d4f565b809150509250929050565b60008060408385031215613da057600080fd5b8235613dab81613cad565b91506020830135613d8281613d4f565b60008060408385031215613dce57600080fd5b8235613dd981613cad565b91506020830135613d8281613cad565b60008060008060808587031215613dff57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215613e2d57600080fd5b8135610e2881613d4f565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613e9d57613e9d613e6d565b500290565b600082613ebf57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600082821015613eec57613eec613e6d565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613f1b57613f1b613e6d565b5060010190565b60008219821115613f3557613f35613e6d565b500190565b600060208284031215613f4c57600080fd5b8151610e2881613cad565b600060208284031215613f6957600080fd5b5051919050565b600060208284031215613f8257600080fd5b8151610e2881613d4f565b600081518084526020808501945080840160005b83811015613fc65781516001600160a01b031687529582019590820190600101613fa1565b509495945050505050565b85815284602082015260a060408201526000613ff060a0830186613f8d565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561402257600080fd5b8351925060208401519150604084015190509250925092565b8481526080602082015260006140546080830186613f8d565b6001600160a01b03949094166040830152506060015292915050565b8281526040602082015260006140896040830184613f8d565b94935050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207fb8878f2a2345cde4ee873ff1d9cb944b292c84b7c4a6751d64376483d1c01b64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c80637571336a116101fd578063a9059cbb11610118578063cab03471116100ab578063e653da081161007a578063e653da0814610bd8578063ea2f0b3714610bf8578063ee40166e14610c18578063efcc52de14610c2e578063f2fde38b14610c4457600080fd5b8063cab0347114610b46578063d00dc58914610b5c578063dc44b6a014610b7c578063dd62ed3e14610b9257600080fd5b8063c49b9a80116100e7578063c49b9a8014610ae4578063c5d2418914610b04578063c860795214610b1a578063c8c8ebe414610b3057600080fd5b8063a9059cbb14610a5d578063b62496f514610a7d578063bbc0c74214610aad578063c469b6dd14610ace57600080fd5b80638da5cb5b11610190578063a0263c891161015f578063a0263c89146109e8578063a073d37f14610a08578063a457c2d714610a1d578063a5ece94114610a3d57600080fd5b80638da5cb5b1461095b578063906e9dd01461097957806395d89b41146109995780639a7a23d6146109c857600080fd5b806388790a68116101cc57806388790a68146108d757806388f82020146108ed5780638c5a133d146109265780638d5f81e21461094657600080fd5b80637571336a146108475780637ad6c84d146108675780638366e79a1461088757806385ecfd28146108a757600080fd5b806339509351116102f85780635342acb41161028b578063602bc62b1161025a578063602bc62b146107c85780636690864e146107dd57806370a08231146107fd578063715018a61461081d578063751039fc1461083257600080fd5b80635342acb41461073c578063557ed1ba146107755780635881f3ef146107885780635bb988c9146107a857600080fd5b80634a62bb65116102c75780634a62bb65146106c15780634a74bb02146106db57806352390c02146106fc578063525fa81f1461071c57600080fd5b80633950935114610641578063437823ec146106615780634549b0391461068157806349bd5a5e146106a157600080fd5b80631da1db5e1161037057806327c8f8351161033f57806327c8f835146105b15780632d838119146105e5578063313ce567146106055780633685d4191461062157600080fd5b80631da1db5e146105455780631fc851bd14610565578063200a692d1461057b57806323b872dd1461059157600080fd5b806313114a9d116103ac57806313114a9d146104af5780631694505e146104ce57806318160ddd146105065780631c75f0851461052557600080fd5b806306fdde03146103e9578063092316021461042d578063095ea7b31461044f57806310d5de531461047f57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b5060408051808201909152600981526842756e6e7920496e7560b81b60208201525b6040516104249190613c3f565b60405180910390f35b34801561043957600080fd5b5061044d610448366004613c94565b610c64565b005b34801561045b57600080fd5b5061046f61046a366004613cc5565b610cb9565b6040519015158152602001610424565b34801561048b57600080fd5b5061046f61049a366004613cf1565b60276020526000908152604090205460ff1681565b3480156104bb57600080fd5b50600e545b604051908152602001610424565b3480156104da57600080fd5b50602a546104ee906001600160a01b031681565b6040516001600160a01b039091168152602001610424565b34801561051257600080fd5b50680a18f07d736b90be55601d1b6104c0565b34801561053157600080fd5b506004546104ee906001600160a01b031681565b34801561055157600080fd5b5061044d610560366004613c94565b610cd0565b34801561057157600080fd5b506104c0601f5481565b34801561058757600080fd5b506104c0601a5481565b34801561059d57600080fd5b5061046f6105ac366004613d0e565b610d42565b3480156105bd57600080fd5b506104ee7f000000000000000000000000000000000000000000000000000000000000dead81565b3480156105f157600080fd5b506104c0610600366004613c94565b610dab565b34801561061157600080fd5b5060405160128152602001610424565b34801561062d57600080fd5b5061044d61063c366004613cf1565b610e2f565b34801561064d57600080fd5b5061046f61065c366004613cc5565b610fe6565b34801561066d57600080fd5b5061044d61067c366004613cf1565b61101c565b34801561068d57600080fd5b506104c061069c366004613d5d565b6110a1565b3480156106ad57600080fd5b50602b546104ee906001600160a01b031681565b3480156106cd57600080fd5b50600f5461046f9060ff1681565b3480156106e757600080fd5b50602b5461046f90600160a81b900460ff1681565b34801561070857600080fd5b5061044d610717366004613cf1565b611138565b34801561072857600080fd5b5061044d610737366004613cf1565b611326565b34801561074857600080fd5b5061046f610757366004613cf1565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561078157600080fd5b50426104c0565b34801561079457600080fd5b506104ee6107a3366004613cf1565b61141c565b3480156107b457600080fd5b5061044d6107c3366004613cf1565b6117f6565b3480156107d457600080fd5b506002546104c0565b3480156107e957600080fd5b5061044d6107f8366004613cf1565b611869565b34801561080957600080fd5b506104c0610818366004613cf1565b611954565b34801561082957600080fd5b5061044d6119b3565b34801561083e57600080fd5b5061046f611a27565b34801561085357600080fd5b5061044d610862366004613d8d565b611a6e565b34801561087357600080fd5b5061044d610882366004613c94565b611ac3565b34801561089357600080fd5b5061046f6108a2366004613dbb565b611b16565b3480156108b357600080fd5b5061046f6108c2366004613cf1565b601e6020526000908152604090205460ff1681565b3480156108e357600080fd5b506104c0601b5481565b3480156108f957600080fd5b5061046f610908366004613cf1565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561093257600080fd5b5061044d610941366004613de9565b611ce3565b34801561095257600080fd5b506104ee611d70565b34801561096757600080fd5b506000546001600160a01b03166104ee565b34801561098557600080fd5b5061044d610994366004613cf1565b611dab565b3480156109a557600080fd5b506040805180820190915260068152652442554e4e5960d01b6020820152610417565b3480156109d457600080fd5b5061044d6109e3366004613d8d565b611ea1565b3480156109f457600080fd5b5061044d610a03366004613e1b565b611f59565b348015610a1457600080fd5b506029546104c0565b348015610a2957600080fd5b5061046f610a38366004613cc5565b611f96565b348015610a4957600080fd5b506003546104ee906001600160a01b031681565b348015610a6957600080fd5b5061046f610a78366004613cc5565b611fe5565b348015610a8957600080fd5b5061046f610a98366004613cf1565b60286020526000908152604090205460ff1681565b348015610ab957600080fd5b50602b5461046f90600160b01b900460ff1681565b348015610ada57600080fd5b506104c060185481565b348015610af057600080fd5b5061044d610aff366004613e1b565b611ff2565b348015610b1057600080fd5b506104c060155481565b348015610b2657600080fd5b506104c060195481565b348015610b3c57600080fd5b506104c060265481565b348015610b5257600080fd5b506104c0601c5481565b348015610b6857600080fd5b5061044d610b77366004613c94565b612069565b348015610b8857600080fd5b506104c060175481565b348015610b9e57600080fd5b506104c0610bad366004613dbb565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610be457600080fd5b5061044d610bf3366004613de9565b6120b6565b348015610c0457600080fd5b5061044d610c13366004613cf1565b612139565b348015610c2457600080fd5b506104c0601d5481565b348015610c3a57600080fd5b506104c060165481565b348015610c5057600080fd5b5061044d610c5f366004613cf1565b6121b4565b6000546001600160a01b03163314610c975760405162461bcd60e51b8152600401610c8e90613e38565b60405180910390fd5b604b811015610ca557600080fd5b610cb381633b9aca00613e83565b60245550565b6000610cc6338484612322565b5060015b92915050565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b8152600401610c8e90613e38565b47336108fc6064610d0b8585613e83565b610d159190613ea2565b6040518115909202916000818181858888f19350505050158015610d3d573d6000803e3d6000fd5b505050565b6000610d4f848484612446565b610da18433610d9c85604051806060016040528060288152602001614092602891396001600160a01b038a1660009081526009602090815260408083203384529091529020549190612acb565b612322565b5060019392505050565b6000600d54821115610e125760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c8e565b6000610e1c612b05565b9050610e28838261229e565b9392505050565b6000546001600160a01b03163314610e595760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166000908152600b602052604090205460ff16610ec15760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c8e565b60005b600c54811015610fe257816001600160a01b0316600c8281548110610eeb57610eeb613ec4565b6000918252602090912001546001600160a01b03161415610fd057600c8054610f1690600190613eda565b81548110610f2657610f26613ec4565b600091825260209091200154600c80546001600160a01b039092169183908110610f5257610f52613ec4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600b90925220805460ff19169055600c805480610faa57610faa613ef1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fda81613f07565b915050610ec4565b5050565b3360008181526009602090815260408083206001600160a01b03871684529091528120549091610cc6918590610d9c9086612b28565b6000546001600160a01b031633146110465760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b6000680a18f07d736b90be55601d1b8311156110ff5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c8e565b8161111e57600061110f84612b87565b50939550610cca945050505050565b600061112984612b87565b50929550610cca945050505050565b6000546001600160a01b031633146111625760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166000908152600b602052604090205460ff16156111cb5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c8e565b600c546032906111dc906001613f22565b11156112665760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c8e565b6001600160a01b038116600090815260076020526040902054156112c0576001600160a01b0381166000908152600760205260409020546112a690610dab565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031633146113505760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166113b45760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c8e565b600680546001600160a01b0319166001600160a01b0383169081179091556000818152600a6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101611096565b600080546001600160a01b031633146114475760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b03821661149d5760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610c8e565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114db57600080fd5b505afa1580156114ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115139190613f3a565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561155b57600080fd5b505afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115939190613f3a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156115d957600080fd5b505afa1580156115ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116119190613f3a565b91506001600160a01b03821661179557806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561165a57600080fd5b505afa15801561166e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116929190613f3a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116da57600080fd5b505afa1580156116ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117129190613f3a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561175a57600080fd5b505af115801561176e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117929190613f3a565b91505b602b80546001600160a01b038085166001600160a01b031992831617909255602a80548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b031633146118205760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166000818152601e6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b031633146118935760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166118e95760405162461bcd60e51b815260206004820181905260248201527f5f7465616d4164647265737320616464726573732063616e6e6f7420626520306044820152606401610c8e565b600480546001600160a01b0319166001600160a01b0383811691821783556000918252600a6020908152604092839020805460ff1916600117905592549151911681527f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f1220002137569101611096565b6001600160a01b0381166000908152600b602052604081205460ff161561199157506001600160a01b031660009081526008602052604090205490565b6001600160a01b038216600090815260076020526040902054610cca90610dab565b6000546001600160a01b031633146119dd5760405162461bcd60e51b8152600401610c8e90613e38565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611a525760405162461bcd60e51b8152600401610c8e90613e38565b50600f805460ff19908116909155602380549091169055600190565b6000546001600160a01b03163314611a985760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611aed5760405162461bcd60e51b8152600401610c8e90613e38565b612710611b0682680a18f07d736b90be55601d1b613e83565b611b109190613ea2565b60295550565b600080546001600160a01b03163314611b415760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b038316611b975760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c8e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611bd957600080fd5b505afa158015611bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c119190613f57565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611c5f57600080fd5b505af1158015611c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c979190613f70565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611d0d5760405162461bcd60e51b8152600401610c8e90613e38565b60168490556017839055601582905560188190556040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b600080546001600160a01b03163314611d9b5760405162461bcd60e51b8152600401610c8e90613e38565b50602b546001600160a01b031690565b6000546001600160a01b03163314611dd55760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b038116611e395760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c8e565b600380546001600160a01b0319166001600160a01b0383169081179091556000818152600a6020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101611096565b6000546001600160a01b03163314611ecb5760405162461bcd60e51b8152600401610c8e90613e38565b602b546001600160a01b0383811691161415611f4f5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c8e565b610fe28282612bd6565b6000546001600160a01b03163314611f835760405162461bcd60e51b8152600401610c8e90613e38565b6023805460ff1916911515919091179055565b6000610cc63384610d9c856040518060600160405280602581526020016140ba602591393360009081526009602090815260408083206001600160a01b038d1684529091529020549190612acb565b6000610cc6338484612446565b6000546001600160a01b0316331461201c5760405162461bcd60e51b8152600401610c8e90613e38565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061109690831515815260200190565b6000546001600160a01b031633146120935760405162461bcd60e51b8152600401610c8e90613e38565b620b71b08110156120a357600080fd5b6024546120b09082613e83565b60255550565b6000546001600160a01b031633146120e05760405162461bcd60e51b8152600401610c8e90613e38565b601a849055601b8390556019829055601c8190556040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611d62565b6000546001600160a01b031633146121635760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611096565b6000546001600160a01b031633146121de5760405162461bcd60e51b8152600401610c8e90613e38565b6001600160a01b0381166122435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c69565b6000610e2883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612acb565b6001600160a01b0383166123845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8e565b6001600160a01b0382166123e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8e565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8e565b6001600160a01b03821661250c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8e565b6000811161256e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c8e565b602b54600160b01b900460ff1661260a576001600160a01b0383166000908152600a602052604090205460ff16806125be57506001600160a01b0382166000908152600a602052604090205460ff165b61260a5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c8e565b600f5460ff1615612846576000546001600160a01b0384811691161480159061264157506000546001600160a01b03838116911614155b801561265557506001600160a01b03821615155b801561266c57506001600160a01b03821661dead14155b80156126825750602b54600160a01b900460ff16155b15612846576000546001600160a01b038481169116148015906126b35750602b546001600160a01b03838116911614155b80156126c05750601d5443145b1561270f576001600160a01b0382166000818152601e6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60235460ff16801561273957506001600160a01b03831660009081526028602052604090205460ff165b15612790576024543a11156127905760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c8e565b6001600160a01b03831660009081526028602052604090205460ff1680156127d157506001600160a01b03821660009081526027602052604090205460ff16155b15612846576026548111156128465760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c8e565b600060225460215460205461285b9190613f22565b6128659190613f22565b9050600061287230611954565b602954602b5491925082101590600160a01b900460ff1615801561289f5750602b54600160a81b900460ff165b80156128c05750602b546000906128be906001600160a01b0316611954565b115b80156128cc5750600083115b80156128f157506001600160a01b0385166000908152600a602052604090205460ff16155b801561291657506001600160a01b0386166000908152600a602052604090205460ff16155b801561293a57506001600160a01b03851660009081526028602052604090205460ff165b80156129435750805b1561295057612950612c97565b6001600160a01b0386166000908152600a602052604090205460019060ff168061299257506001600160a01b0386166000908152600a602052604090205460ff165b156129a4575060036010556000612ab6565b6001600160a01b03871660009081526028602052604090205460ff16156129fd576129cd612faf565b6016546011556018546015546017546129e69190613f22565b6129f09190613f22565b6013556001601055612ab6565b6001600160a01b03861660009081526028602052604090205460ff1615612aa857612a26612faf565b601a54601155601c54601954601b54612a3f9190613f22565b612a499190613f22565b60135560026010556001600160a01b0387166000908152601e602052604090205460ff168015612a7b575043601f5411155b15612aa357601154612a8e906002613e83565b601155601354612a9f906002613e83565b6013555b612ab6565b612ab0612faf565b60036010555b612ac287878784612fdd565b50505050505050565b60008184841115612aef5760405162461bcd60e51b8152600401610c8e9190613c3f565b506000612afc8486613eda565b95945050505050565b6000806000612b12613103565b9092509050612b21828261229e565b9250505090565b600080612b358385613f22565b905083811015610e285760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c8e565b6000806000806000806000806000612b9e8a6132ab565b9250925092506000806000612bbc8d8686612bb7612b05565b6132e7565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602860205260409020805460ff1916821515179055612c048282611a6e565b8015612c1357612c1382611138565b80612c2157612c2182610e2f565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91015b60405180910390a15050565b60008183612c8a5760405162461bcd60e51b8152600401610c8e9190613c3f565b506000612afc8486613ea2565b602b805460ff60a01b1916600160a01b1790556000612cb530611954565b90506000612cdc602154612cd6602254602054612b2890919063ffffffff16565b90612b28565b90506000612cf6600260205461229e90919063ffffffff16565b90506000612d0484836122e0565b905047612d1082613337565b6000612d1c47836122e0565b90506000612d4f86612d4960046021546003612d389190613e83565b612d429190613ea2565b85906134a0565b9061229e565b90506000612d7087612d496004602154612d699190613ea2565b86906134a0565b90506000612d9188612d496002602254612d8a9190613ea2565b87906134a0565b90506000612db289612d496002602254612dab9190613ea2565b88906134a0565b90506000612dce84612dc8848187818c8c6122e0565b906122e0565b600060208190556021819055602281905560055460405192935090916001600160a01b039091169085908381818185875af1925050503d8060008114612e30576040519150601f19603f3d011682016040523d82523d6000602084013e612e35565b606091505b50506003546040519192506001600160a01b0316908690600081818185875af1925050503d8060008114612e85576040519150601f19603f3d011682016040523d82523d6000602084013e612e8a565b606091505b50506005546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114612eda576040519150601f19603f3d011682016040523d82523d6000602084013e612edf565b606091505b50506003546040519192506001600160a01b0316908790600081818185875af1925050503d8060008114612f2f576040519150601f19603f3d011682016040523d82523d6000602084013e612f34565b606091505b505080915050612f448a8361351f565b604080518a8152602081018490529081018b90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715612f9457612f94476135e2565b5050602b805460ff60a01b1916905550505050505050505050565b601154158015612fbf5750601354155b15612fc657565b601180546012556013805460145560009182905555565b80612fea57612fea612faf565b6001600160a01b0384166000908152600b602052604090205460ff16801561302b57506001600160a01b0383166000908152600b602052604090205460ff16155b156130405761303b848484613798565b6130ec565b6001600160a01b0384166000908152600b602052604090205460ff1615801561308157506001600160a01b0383166000908152600b602052604090205460ff165b156130915761303b8484846138be565b6001600160a01b0384166000908152600b602052604090205460ff1680156130d157506001600160a01b0383166000908152600b602052604090205460ff165b156130e15761303b848484613967565b6130ec8484846139da565b6130fd601254601155601454601355565b50505050565b600d546000908190680a18f07d736b90be55601d1b825b600c54811015613268578260076000600c848154811061313c5761313c613ec4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806131a757508160086000600c848154811061318057613180613ec4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156131c6575050600d5493680a18f07d736b90be55601d1b9350915050565b61320c60076000600c84815481106131e0576131e0613ec4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122e0565b925061325460086000600c848154811061322857613228613ec4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122e0565b91508061326081613f07565b91505061311a565b50600d5461328290680a18f07d736b90be55601d1b61229e565b8210156132a2575050600d5492680a18f07d736b90be55601d1b92509050565b90939092509050565b6000806000806132ba85613a1e565b905060006132c786613a3a565b905060006132d982612dc889866122e0565b979296509094509092505050565b60008080806132f688866134a0565b9050600061330488876134a0565b9050600061331288886134a0565b9050600061332482612dc886866122e0565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061336c5761336c613ec4565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156133c057600080fd5b505afa1580156133d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f89190613f3a565b8160018151811061340b5761340b613ec4565b6001600160a01b039283166020918202929092010152602a546134319130911684612322565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061346a908590600090869030904290600401613fd1565b600060405180830381600087803b15801561348457600080fd5b505af1158015613498573d6000803e3d6000fd5b505050505050565b6000826134af57506000610cca565b60006134bb8385613e83565b9050826134c88583613ea2565b14610e285760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c8e565b602a546135379030906001600160a01b031684612322565b602a5460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156135a257600080fd5b505af11580156135b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135db919061400d565b5050505050565b6040805160028082526060820183526000926020830190803683375050602a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561364757600080fd5b505afa15801561365b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367f9190613f3a565b8160008151811061369257613692613ec4565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106136c6576136c6613ec4565b6001600160a01b039283166020918202929092010152602a541663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead6137164261012c612b28565b6040518663ffffffff1660e01b8152600401613735949392919061403b565b6000604051808303818588803b15801561374e57600080fd5b505af1158015613762573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051612c5d929190614070565b6000806000806000806137aa87612b87565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506137dc90886122e0565b6001600160a01b038a1660009081526008602090815260408083209390935560079052205461380b90876122e0565b6001600160a01b03808b1660009081526007602052604080822093909355908a168152205461383a9086612b28565b6001600160a01b03891660009081526007602052604090205561385c81613a56565b6138668483613c1b565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138ab91815260200190565b60405180910390a3505050505050505050565b6000806000806000806138d087612b87565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061390290876122e0565b6001600160a01b03808b16600090815260076020908152604080832094909455918b168152600890915220546139389084612b28565b6001600160a01b03891660009081526008602090815260408083209390935560079052205461383a9086612b28565b60008060008060008061397987612b87565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506139ab90886122e0565b6001600160a01b038a1660009081526008602090815260408083209390935560079052205461390290876122e0565b6000806000806000806139ec87612b87565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061380b90876122e0565b6000610cca6064612d49601154856134a090919063ffffffff16565b6000610cca6064612d49601354856134a090919063ffffffff16565b60016010541415613af757601354601754613a719083613e83565b613a7b9190613ea2565b60206000828254613a8c9190613f22565b9091555050601354601854613aa19083613e83565b613aab9190613ea2565b60226000828254613abc9190613f22565b9091555050601354601554613ad19083613e83565b613adb9190613ea2565b60216000828254613aec9190613f22565b90915550613b939050565b60026010541415613b9357601354601b54613b129083613e83565b613b1c9190613ea2565b60206000828254613b2d9190613f22565b9091555050601354601c54613b429083613e83565b613b4c9190613ea2565b60226000828254613b5d9190613f22565b9091555050601354601954613b729083613e83565b613b7c9190613ea2565b60216000828254613b8d9190613f22565b90915550505b6000613b9d612b05565b90506000613bab83836134a0565b30600090815260076020526040902054909150613bc89082612b28565b30600090815260076020908152604080832093909355600b9052205460ff1615610d3d5730600090815260086020526040902054613c069084612b28565b30600090815260086020526040902055505050565b600d54613c2890836122e0565b600d55600e54613c389082612b28565b600e555050565b600060208083528351808285015260005b81811015613c6c57858101830151858201604001528201613c50565b81811115613c7e576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613ca657600080fd5b5035919050565b6001600160a01b0381168114613cc257600080fd5b50565b60008060408385031215613cd857600080fd5b8235613ce381613cad565b946020939093013593505050565b600060208284031215613d0357600080fd5b8135610e2881613cad565b600080600060608486031215613d2357600080fd5b8335613d2e81613cad565b92506020840135613d3e81613cad565b929592945050506040919091013590565b8015158114613cc257600080fd5b60008060408385031215613d7057600080fd5b823591506020830135613d8281613d4f565b809150509250929050565b60008060408385031215613da057600080fd5b8235613dab81613cad565b91506020830135613d8281613d4f565b60008060408385031215613dce57600080fd5b8235613dd981613cad565b91506020830135613d8281613cad565b60008060008060808587031215613dff57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215613e2d57600080fd5b8135610e2881613d4f565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613e9d57613e9d613e6d565b500290565b600082613ebf57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600082821015613eec57613eec613e6d565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613f1b57613f1b613e6d565b5060010190565b60008219821115613f3557613f35613e6d565b500190565b600060208284031215613f4c57600080fd5b8151610e2881613cad565b600060208284031215613f6957600080fd5b5051919050565b600060208284031215613f8257600080fd5b8151610e2881613d4f565b600081518084526020808501945080840160005b83811015613fc65781516001600160a01b031687529582019590820190600101613fa1565b509495945050505050565b85815284602082015260a060408201526000613ff060a0830186613f8d565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561402257600080fd5b8351925060208401519150604084015190509250925092565b8481526080602082015260006140546080830186613f8d565b6001600160a01b03949094166040830152506060015292915050565b8281526040602082015260006140896040830184613f8d565b94935050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207fb8878f2a2345cde4ee873ff1d9cb944b292c84b7c4a6751d64376483d1c01b64736f6c63430008090033

Deployed Bytecode Sourcemap

14118:28937:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19746:85;;;;;;;;;;-1:-1:-1;19818:5:0;;;;;;;;;;;;-1:-1:-1;;;19818:5:0;;;;19746:85;;;;;;;:::i;:::-;;;;;;;;23110:134;;;;;;;;;;-1:-1:-1;23110:134:0;;;;;:::i;:::-;;:::i;:::-;;20670:163;;;;;;;;;;-1:-1:-1;20670:163:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;20670:163:0;1257:187:1;16898:64:0;;;;;;;;;;-1:-1:-1;16898:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22007:89;;;;;;;;;;-1:-1:-1;22078:10:0;;22007:89;;;1847:25:1;;;1835:2;1820:18;22007:89:0;1701:177:1;17270:41:0;;;;;;;;;;-1:-1:-1;17270:41:0;;;;-1:-1:-1;;;;;17270:41:0;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;17270:41:0;1883:230:1;20029:97:0;;;;;;;;;;-1:-1:-1;;;;20029:97:0;;14342:88;;;;;;;;;;-1:-1:-1;14342:88:0;;;;-1:-1:-1;;;;;14342:88:0;;;21388:201;;;;;;;;;;-1:-1:-1;21388:201:0;;;;;:::i;:::-;;:::i;16449:33::-;;;;;;;;;;;;;;;;16198:30;;;;;;;;;;;;;;;;20841:312;;;;;;;;;;-1:-1:-1;20841:312:0;;;;;:::i;:::-;;:::i;14611:81::-;;;;;;;;;;;;;;;24087:253;;;;;;;;;;-1:-1:-1;24087:253:0;;;;;:::i;:::-;;:::i;19936:85::-;;;;;;;;;;-1:-1:-1;19936:85:0;;15417:2;3153:36:1;;3141:2;3126:18;19936:85:0;3011:184:1;24815:471:0;;;;;;;;;;-1:-1:-1;24815:471:0;;;;;:::i;:::-;;:::i;21161:218::-;;;;;;;;;;-1:-1:-1;21161:218:0;;;;;:::i;:::-;;:::i;39176:152::-;;;;;;;;;;-1:-1:-1;39176:152:0;;;;;:::i;:::-;;:::i;23630:449::-;;;;;;;;;;-1:-1:-1;23630:449:0;;;;;:::i;:::-;;:::i;17318:28::-;;;;;;;;;;-1:-1:-1;17318:28:0;;;;-1:-1:-1;;;;;17318:28:0;;;15230:34;;;;;;;;;;-1:-1:-1;15230:34:0;;;;;;;;17383:41;;;;;;;;;;-1:-1:-1;17383:41:0;;;;-1:-1:-1;;;17383:41:0;;;;;;24348:459;;;;;;;;;;-1:-1:-1;24348:459:0;;;;;:::i;:::-;;:::i;41103:343::-;;;;;;;;;;-1:-1:-1;41103:343:0;;;;;:::i;:::-;;:::i;39042:126::-;;;;;;;;;;-1:-1:-1;39042:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;39133:27:0;39109:4;39133:27;;;:18;:27;;;;;;;;;39042:126;6664:90;;;;;;;;;;-1:-1:-1;6731:15:0;6664:90;;41748:816;;;;;;;;;;-1:-1:-1;41748:816:0;;;;;:::i;:::-;;:::i;39497:148::-;;;;;;;;;;-1:-1:-1;39497:148:0;;;;;:::i;:::-;;:::i;6566:90::-;;;;;;;;;;-1:-1:-1;6639:9:0;;6566:90;;40794:297;;;;;;;;;;-1:-1:-1;40794:297:0;;;;;:::i;:::-;;:::i;20134:198::-;;;;;;;;;;-1:-1:-1;20134:198:0;;;;;:::i;:::-;;:::i;6117:150::-;;;;;;;;;;;;;:::i;23469:153::-;;;;;;;;;;;;;:::i;25298:144::-;;;;;;;;;;-1:-1:-1;25298:144:0;;;;;:::i;:::-;;:::i;22243:146::-;;;;;;;;;;-1:-1:-1;22243:146:0;;;;;:::i;:::-;;:::i;42667:381::-;;;;;;;;;;-1:-1:-1;42667:381:0;;;;;:::i;:::-;;:::i;16399:43::-;;;;;;;;;;-1:-1:-1;16399:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16235:36;;;;;;;;;;;;;;;;21877:122;;;;;;;;;;-1:-1:-1;21877:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;21971:20:0;21947:4;21971:20;;;:11;:20;;;;;;;;;21877:122;39653:375;;;;;;;;;;-1:-1:-1;39653:375:0;;;;;:::i;:::-;;:::i;41633:107::-;;;;;;;;;;;;;:::i;5903:79::-;;;;;;;;;;-1:-1:-1;5941:7:0;5968:6;-1:-1:-1;;;;;5968:6:0;5903:79;;40439:343;;;;;;;;;;-1:-1:-1;40439:343:0;;;;;:::i;:::-;;:::i;19839:89::-;;;;;;;;;;-1:-1:-1;19913:7:0;;;;;;;;;;;;-1:-1:-1;;;19913:7:0;;;;19839:89;;22401:244;;;;;;;;;;-1:-1:-1;22401:244:0;;;;;:::i;:::-;;:::i;22989:109::-;;;;;;;;;;-1:-1:-1;22989:109:0;;;;;:::i;:::-;;:::i;22109:122::-;;;;;;;;;;-1:-1:-1;22200:23:0;;22109:122;;21601:268;;;;;;;;;;-1:-1:-1;21601:268:0;;;;;:::i;:::-;;:::i;14238:93::-;;;;;;;;;;-1:-1:-1;14238:93:0;;;;-1:-1:-1;;;;;14238:93:0;;;20340:169;;;;;;;;;;-1:-1:-1;20340:169:0;;;;;:::i;:::-;;:::i;17124:58::-;;;;;;;;;;-1:-1:-1;17124:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17431:33;;;;;;;;;;-1:-1:-1;17431:33:0;;;;-1:-1:-1;;;17431:33:0;;;;;;16049:30;;;;;;;;;;;;;;;;41454:171;;;;;;;;;;-1:-1:-1;41454:171:0;;;;;:::i;:::-;;:::i;15929:35::-;;;;;;;;;;;;;;;;16155:36;;;;;;;;;;;;;;;;16856:35;;;;;;;;;;;;;;;;16278:31;;;;;;;;;;;;;;;;23256:141;;;;;;;;;;-1:-1:-1;23256:141:0;;;;;:::i;:::-;;:::i;16007:35::-;;;;;;;;;;;;;;;;20517:145;;;;;;;;;;-1:-1:-1;20517:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;20627:18:0;;;20600:7;20627:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20517:145;40036:393;;;;;;;;;;-1:-1:-1;40036:393:0;;;;;:::i;:::-;;:::i;39336:149::-;;;;;;;;;;-1:-1:-1;39336:149:0;;;;;:::i;:::-;;:::i;16322:37::-;;;;;;;;;;;;;;;;15971:29;;;;;;;;;;;;;;;;6275:283;;;;;;;;;;-1:-1:-1;6275:283:0;;;;;:::i;:::-;;:::i;23110:134::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;;;;;;;;;23194:2:::1;23187:3;:9;;23179:18;;;::::0;::::1;;23224:12;:3:::0;23230:6:::1;23224:12;:::i;:::-;23208:13;:28:::0;-1:-1:-1;23110:134:0:o;20670:163::-;20747:4;20764:39;309:10;20787:7;20796:6;20764:8;:39::i;:::-;-1:-1:-1;20821:4:0;20670:163;;;;;:::o;21388:201::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;21488:21:::1;21528:10;21520:61;21577:3;21549:25;21558:16:::0;21488:21;21549:25:::1;:::i;:::-;:31;;;;:::i;:::-;21520:61;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21460:129;21388:201:::0;:::o;20841:312::-;20941:4;20958:36;20968:6;20976:9;20987:6;20958:9;:36::i;:::-;21005:118;21014:6;309:10;21034:88;21072:6;21034:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21034:19:0;;;;;;:11;:19;;;;;;;;309:10;21034:33;;;;;;;;;;:37;:88::i;:::-;21005:8;:118::i;:::-;-1:-1:-1;21141:4:0;20841:312;;;;;:::o;24087:253::-;24154:7;24193;;24182;:18;;24174:73;;;;-1:-1:-1;;;24174:73:0;;6143:2:1;24174:73:0;;;6125:21:1;6182:2;6162:18;;;6155:30;6221:34;6201:18;;;6194:62;-1:-1:-1;;;6272:18:1;;;6265:40;6322:19;;24174:73:0;5941:406:1;24174:73:0;24258:19;24280:10;:8;:10::i;:::-;24258:32;-1:-1:-1;24308:24:0;:7;24258:32;24308:11;:24::i;:::-;24301:31;24087:253;-1:-1:-1;;;24087:253:0:o;24815:471::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24893:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24885:56;;;::::0;-1:-1:-1;;;24885:56:0;;6554:2:1;24885:56:0::1;::::0;::::1;6536:21:1::0;6593:2;6573:18;;;6566:30;6632:25;6612:18;;;6605:53;6675:18;;24885:56:0::1;6352:347:1::0;24885:56:0::1;24957:9;24952:327;24976:9;:16:::0;24972:20;::::1;24952:327;;;25034:7;-1:-1:-1::0;;;;;25018:23:0::1;:9;25028:1;25018:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25018:12:0::1;:23;25014:254;;;25077:9;25087:16:::0;;:20:::1;::::0;25106:1:::1;::::0;25087:20:::1;:::i;:::-;25077:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25062:9:::1;:12:::0;;-1:-1:-1;;;;;25077:31:0;;::::1;::::0;25072:1;;25062:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25062:46:0::1;-1:-1:-1::0;;;;;25062:46:0;;::::1;;::::0;;25127:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25166:11:::1;:20:::0;;;;:28;;-1:-1:-1;;25166:28:0::1;::::0;;25213:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25213:15:0;;;;;-1:-1:-1;;;;;;25213:15:0::1;::::0;;;;;24952:327:::1;24815:471:::0;:::o;25014:254::-:1;24994:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24952:327;;;;24815:471:::0;:::o;21161:218::-;309:10;21251:4;21298:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21298:34:0;;;;;;;;;;21251:4;;21268:81;;21290:7;;21298:50;;21337:10;21298:38;:50::i;39176:152::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39247:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;39247:34:0::1;39277:4;39247:34;::::0;;39297:23;;2056:51:1;;;39297:23:0::1;::::0;2029:18:1;39297:23:0::1;;;;;;;;39176:152:::0;:::o;23630:449::-;23723:7;-1:-1:-1;;;23751:7:0;:18;;23743:62;;;;-1:-1:-1;;;23743:62:0;;7440:2:1;23743:62:0;;;7422:21:1;7479:2;7459:18;;;7452:30;7518:33;7498:18;;;7491:61;7569:18;;23743:62:0;7238:355:1;23743:62:0;23821:17;23816:256;;23856:15;23885:19;23896:7;23885:10;:19::i;:::-;-1:-1:-1;23855:49:0;;-1:-1:-1;23919:14:0;;-1:-1:-1;;;;;23919:14:0;23816:256;23969:23;24004:19;24015:7;24004:10;:19::i;:::-;-1:-1:-1;23966:57:0;;-1:-1:-1;24038:22:0;;-1:-1:-1;;;;;24038:22:0;24348:459;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24429:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24428:21;24420:61;;;::::0;-1:-1:-1;;;24420:61:0;;7800:2:1;24420:61:0::1;::::0;::::1;7782:21:1::0;7839:2;7819:18;;;7812:30;7878:29;7858:18;;;7851:57;7925:18;;24420:61:0::1;7598:351:1::0;24420:61:0::1;24500:9;:16:::0;24524:2:::1;::::0;24500:20:::1;::::0;24519:1:::1;24500:20;:::i;:::-;:26;;24492:116;;;::::0;-1:-1:-1;;;24492:116:0;;8289:2:1;24492:116:0::1;::::0;::::1;8271:21:1::0;8328:2;8308:18;;;8301:30;8367:34;8347:18;;;8340:62;8438:34;8418:18;;;8411:62;-1:-1:-1;;;8489:19:1;;;8482:44;8543:19;;24492:116:0::1;8087:481:1::0;24492:116:0::1;-1:-1:-1::0;;;;;24623:16:0;::::1;24642:1;24623:16:::0;;;:7:::1;:16;::::0;;;;;:20;24619:109:::1;;-1:-1:-1::0;;;;;24699:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24679:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24660:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24619:109:::1;-1:-1:-1::0;;;;;24738:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24738:27:0::1;24761:4;24738:27:::0;;::::1;::::0;;;24776:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24776:23:0::1;::::0;;::::1;::::0;;24348:459::o;41103:343::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41197:31:0;::::1;41189:81;;;::::0;-1:-1:-1;;;41189:81:0;;8775:2:1;41189:81:0::1;::::0;::::1;8757:21:1::0;8814:2;8794:18;;;8787:30;8853:34;8833:18;;;8826:62;-1:-1:-1;;;8904:18:1;;;8897:35;8949:19;;41189:81:0::1;8573:401:1::0;41189:81:0::1;41281:16;:45:::0;;-1:-1:-1;;;;;;41281:45:0::1;-1:-1:-1::0;;;;;41281:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;41337:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;41337:43:0::1;-1:-1:-1::0;41337:43:0::1;::::0;;41396:42;;2056:51:1;;;41396:42:0::1;::::0;2029:18:1;41396:42:0::1;1883:230:1::0;41748:816:0;41822:13;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41856:21:0;::::1;41848:61;;;::::0;-1:-1:-1;;;41848:61:0;;9181:2:1;41848:61:0::1;::::0;::::1;9163:21:1::0;9220:2;9200:18;;;9193:30;9259:29;9239:18;;;9232:57;9306:18;;41848:61:0::1;8979:351:1::0;41848:61:0::1;41920:35;41977:7;41920:65;;42024:16;-1:-1:-1::0;;;;;42024:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42006:53:0::1;;42082:4;42102:16;-1:-1:-1::0;;;;;42102:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42006:130;::::0;-1:-1:-1;;;;;;42006:130:0::1;::::0;;;;;;-1:-1:-1;;;;;9821:15:1;;;42006:130:0::1;::::0;::::1;9803:34:1::0;9873:15;;9853:18;;;9846:43;9738:18;;42006:130:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41998:138:::0;-1:-1:-1;;;;;;42151:19:0;::::1;42147:240;;42248:16;-1:-1:-1::0;;;;;42248:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42230:56:0::1;;42313:4;42337:16;-1:-1:-1::0;;;;;42337:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42230:145;::::0;-1:-1:-1;;;;;;42230:145:0::1;::::0;;;;;;-1:-1:-1;;;;;9821:15:1;;;42230:145:0::1;::::0;::::1;9803:34:1::0;9873:15;;9853:18;;;9846:43;9738:18;;42230:145:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42222:153;;42147:240;42397:13;:21:::0;;-1:-1:-1;;;;;42397:21:0;;::::1;-1:-1:-1::0;;;;;;42397:21:0;;::::1;;::::0;;;42484:15:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;42534:22:::1;::::0;;;::::1;::::0;::::1;::::0;42397:13:::1;::::0;42534:22:::1;41837:727;41748:816:::0;;;:::o;39497:148::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39571:20:0;::::1;39594:5;39571:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;39571:28:0::1;::::0;;39615:22;::::1;::::0;39594:5;39615:22:::1;39497:148:::0;:::o;40794:297::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40878:26:0;::::1;40870:71;;;::::0;-1:-1:-1;;;40870:71:0;;10102:2:1;40870:71:0::1;::::0;::::1;10084:21:1::0;;;10121:18;;;10114:30;10180:34;10160:18;;;10153:62;10232:18;;40870:71:0::1;9900:356:1::0;40870:71:0::1;40952:11;:35:::0;;-1:-1:-1;;;;;;40952:35:0::1;-1:-1:-1::0;;;;;40952:35:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;40998:31:0;;;:18:::1;:31;::::0;;;;;;;;:38;;-1:-1:-1;;40998:38:0::1;-1:-1:-1::0;40998:38:0::1;::::0;;41071:11;;41052:31;;41071:11;::::1;2056:51:1::0;;41052:31:0::1;::::0;2029:18:1;41052:31:0::1;1883:230:1::0;20134:198:0;-1:-1:-1;;;;;20224:20:0;;20200:7;20224:20;;;:11;:20;;;;;;;;20220:49;;;-1:-1:-1;;;;;;20253:16:0;;;;;:7;:16;;;;;;;20134:198::o;20220:49::-;-1:-1:-1;;;;;20307:16:0;;;;;;:7;:16;;;;;;20287:37;;:19;:37::i;6117:150::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;6226:1:::1;6210:6:::0;;6189:40:::1;::::0;-1:-1:-1;;;;;6210:6:0;;::::1;::::0;6189:40:::1;::::0;6226:1;;6189:40:::1;6257:1;6240:19:::0;;-1:-1:-1;;;;;;6240:19:0::1;::::0;;6117:150::o;23469:153::-;23521:4;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;23537:14:0::1;:22:::0;;-1:-1:-1;;23537:22:0;;::::1;::::0;;;23570:14:::1;:22:::0;;;;::::1;::::0;;23537;23469:153;:::o;25298:144::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25388:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25388:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25298:144::o;22243:146::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;22376:5:::1;22358:15;22368:5:::0;-1:-1:-1;;;22358:15:0::1;:::i;:::-;:23;;;;:::i;:::-;22332;:49:::0;-1:-1:-1;22243:146:0:o;42667:381::-;42754:10;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42785:20:0;::::1;42777:59;;;::::0;-1:-1:-1;;;42777:59:0;;10679:2:1;42777:59:0::1;::::0;::::1;10661:21:1::0;10718:2;10698:18;;;10691:30;10757:28;10737:18;;;10730:56;10803:18;;42777:59:0::1;10477:350:1::0;42777:59:0::1;42874:39;::::0;-1:-1:-1;;;42874:39:0;;42907:4:::1;42874:39;::::0;::::1;2056:51:1::0;42847:24:0::1;::::0;-1:-1:-1;;;;;42874:24:0;::::1;::::0;::::1;::::0;2029:18:1;;42874:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42932:46;::::0;-1:-1:-1;;;42932:46:0;;-1:-1:-1;;;;;11213:32:1;;;42932:46:0::1;::::0;::::1;11195:51:1::0;11262:18;;;11255:34;;;42847:66:0;;-1:-1:-1;42932:23:0;;::::1;::::0;::::1;::::0;11168:18:1;;42932:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42994;::::0;;-1:-1:-1;;;;;11213:32:1;;11195:51;;11277:2;11262:18;;11255:34;;;42924:54:0;;-1:-1:-1;42994:46:0::1;::::0;11168:18:1;42994:46:0::1;;;;;;;42766:282;42667:381:::0;;;;:::o;39653:375::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;39791:10:::1;:22:::0;;;39824:16:::1;:34:::0;;;39869:16:::1;:34:::0;;;39914:11:::1;:24:::0;;;39954:66:::1;::::0;;11781:25:1;;;11837:2;11822:18;;11815:34;;;11865:18;;;11858:34;;;11923:2;11908:18;;11901:34;;;39954:66:0::1;::::0;11768:3:1;11753:19;39954:66:0::1;;;;;;;;39653:375:::0;;;;:::o;41633:107::-;41692:7;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;41719:13:0::1;::::0;-1:-1:-1;;;;;41719:13:0::1;41633:107:::0;:::o;40439:343::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40533:31:0;::::1;40525:81;;;::::0;-1:-1:-1;;;40525:81:0;;12148:2:1;40525:81:0::1;::::0;::::1;12130:21:1::0;12187:2;12167:18;;;12160:30;12226:34;12206:18;;;12199:62;-1:-1:-1;;;12277:18:1;;;12270:35;12322:19;;40525:81:0::1;11946:401:1::0;40525:81:0::1;40617:16;:45:::0;;-1:-1:-1;;;;;;40617:45:0::1;-1:-1:-1::0;;;;;40617:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;40673:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;40673:43:0::1;-1:-1:-1::0;40673:43:0::1;::::0;;40732:42;;2056:51:1;;;40732:42:0::1;::::0;2029:18:1;40732:42:0::1;1883:230:1::0;22401:244:0;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;22510:13:::1;::::0;-1:-1:-1;;;;;22502:21:0;;::::1;22510:13:::0;::::1;22502:21;;22494:91;;;::::0;-1:-1:-1;;;22494:91:0;;12554:2:1;22494:91:0::1;::::0;::::1;12536:21:1::0;12593:2;12573:18;;;12566:30;12632:34;12612:18;;;12605:62;12703:27;12683:18;;;12676:55;12748:19;;22494:91:0::1;12352:421:1::0;22494:91:0::1;22596:41;22625:4;22631:5;22596:28;:41::i;22989:109::-:0;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;23066:14:::1;:24:::0;;-1:-1:-1;;23066:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22989:109::o;21601:268::-;21696:4;21713:126;309:10;21735:7;21743:95;21782:15;21743:95;;;;;;;;;;;;;;;;;309:10;21743:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21743:34:0;;;;;;;;;;;;:38;:95::i;20340:169::-;20420:4;20437:42;309:10;20461:9;20472:6;20437:9;:42::i;41454:171::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;41531:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;41531:32:0::1;-1:-1:-1::0;;;;41531:32:0;;::::1;;::::0;;41579:38:::1;::::0;::::1;::::0;::::1;::::0;41555:8;1422:14:1;1415:22;1397:41;;1385:2;1370:18;;1257:187;23256:141:0;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;23338:6:::1;23331:3;:13;;23323:22;;;::::0;::::1;;23376:13;::::0;23370:19:::1;::::0;:3;:19:::1;:::i;:::-;23356:11;:33:::0;-1:-1:-1;23256:141:0:o;40036:393::-;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;40179:11:::1;:24:::0;;;40214:17:::1;:36:::0;;;40261:17:::1;:36:::0;;;40308:12:::1;:26:::0;;;40350:71:::1;::::0;;11781:25:1;;;11837:2;11822:18;;11815:34;;;11865:18;;;11858:34;;;11923:2;11908:18;;11901:34;;;40350:71:0::1;::::0;11768:3:1;11753:19;40350:71:0::1;11550:391:1::0;39336:149:0;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39405:27:0;::::1;39435:5;39405:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;39405:35:0::1;::::0;;39456:21;;2056:51:1;;;39456:21:0::1;::::0;2029:18:1;39456:21:0::1;1883:230:1::0;6275:283:0;6030:6;;-1:-1:-1;;;;;6030:6:0;309:10;6030:22;6022:67;;;;-1:-1:-1;;;6022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6380:22:0;::::1;6358:110;;;::::0;-1:-1:-1;;;6358:110:0;;12980:2:1;6358:110:0::1;::::0;::::1;12962:21:1::0;13019:2;12999:18;;;12992:30;13058:34;13038:18;;;13031:62;-1:-1:-1;;;13109:18:1;;;13102:36;13155:19;;6358:110:0::1;12778:402:1::0;6358:110:0::1;6505:6;::::0;;6484:38:::1;::::0;-1:-1:-1;;;;;6484:38:0;;::::1;::::0;6505:6;::::1;::::0;6484:38:::1;::::0;::::1;6533:6;:17:::0;;-1:-1:-1;;;;;;6533:17:0::1;-1:-1:-1::0;;;;;6533:17:0;;;::::1;::::0;;;::::1;::::0;;6275:283::o;2068:132::-;2126:7;2153:39;2157:1;2160;2153:39;;;;;;;;;;;;;;;;;:3;:39::i;1470:136::-;1528:7;1555:43;1559:1;1562;1555:43;;;;;;;;;;;;;;;;;:3;:43::i;25451:337::-;-1:-1:-1;;;;;25544:19:0;;25536:68;;;;-1:-1:-1;;;25536:68:0;;13387:2:1;25536:68:0;;;13369:21:1;13426:2;13406:18;;;13399:30;13465:34;13445:18;;;13438:62;-1:-1:-1;;;13516:18:1;;;13509:34;13560:19;;25536:68:0;13185:400:1;25536:68:0;-1:-1:-1;;;;;25623:21:0;;25615:68;;;;-1:-1:-1;;;25615:68:0;;13792:2:1;25615:68:0;;;13774:21:1;13831:2;13811:18;;;13804:30;13870:34;13850:18;;;13843:62;-1:-1:-1;;;13921:18:1;;;13914:32;13963:19;;25615:68:0;13590:398:1;25615:68:0;-1:-1:-1;;;;;25696:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25748:32;;1847:25:1;;;25748:32:0;;1820:18:1;25748:32:0;;;;;;;25451:337;;;:::o;25796:3351::-;-1:-1:-1;;;;;25884:18:0;;25876:68;;;;-1:-1:-1;;;25876:68:0;;14195:2:1;25876:68:0;;;14177:21:1;14234:2;14214:18;;;14207:30;14273:34;14253:18;;;14246:62;-1:-1:-1;;;14324:18:1;;;14317:35;14369:19;;25876:68:0;13993:401:1;25876:68:0;-1:-1:-1;;;;;25963:16:0;;25955:64;;;;-1:-1:-1;;;25955:64:0;;14601:2:1;25955:64:0;;;14583:21:1;14640:2;14620:18;;;14613:30;14679:34;14659:18;;;14652:62;-1:-1:-1;;;14730:18:1;;;14723:33;14773:19;;25955:64:0;14399:399:1;25955:64:0;26047:1;26038:6;:10;26030:64;;;;-1:-1:-1;;;26030:64:0;;15005:2:1;26030:64:0;;;14987:21:1;15044:2;15024:18;;;15017:30;15083:34;15063:18;;;15056:62;-1:-1:-1;;;15134:18:1;;;15127:39;15183:19;;26030:64:0;14803:405:1;26030:64:0;26119:13;;-1:-1:-1;;;26119:13:0;;;;26115:134;;-1:-1:-1;;;;;26156:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;26184:22:0;;;;;;:18;:22;;;;;;;;26156:50;26148:89;;;;-1:-1:-1;;;26148:89:0;;15415:2:1;26148:89:0;;;15397:21:1;15454:2;15434:18;;;15427:30;15493:28;15473:18;;;15466:56;15539:18;;26148:89:0;15213:350:1;26148:89:0;26272:14;;;;26269:856;;;5941:7;5968:6;-1:-1:-1;;;;;26306:15:0;;;5968:6;;26306:15;;;;:32;;-1:-1:-1;5941:7:0;5968:6;-1:-1:-1;;;;;26325:13:0;;;5968:6;;26325:13;;26306:32;:52;;;;-1:-1:-1;;;;;;26342:16:0;;;;26306:52;:77;;;;-1:-1:-1;;;;;;26362:21:0;;26376:6;26362:21;;26306:77;:98;;;;-1:-1:-1;26388:16:0;;-1:-1:-1;;;26388:16:0;;;;26387:17;26306:98;26302:812;;;5941:7;5968:6;-1:-1:-1;;;;;26446:15:0;;;5968:6;;26446:15;;;;:38;;-1:-1:-1;26471:13:0;;-1:-1:-1;;;;;26465:19:0;;;26471:13;;26465:19;;26446:38;:76;;;;;26504:18;;26488:12;:34;26446:76;26443:189;;;-1:-1:-1;;;;;26547:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;26547:22:0;26565:4;26547:22;;;26597:15;;;26547;26597;26443:189;26672:14;;;;:49;;;;-1:-1:-1;;;;;;26690:31:0;;;;;;:25;:31;;;;;;;;26672:49;26668:163;;;26769:13;;26754:11;:28;;26746:65;;;;-1:-1:-1;;;26746:65:0;;15770:2:1;26746:65:0;;;15752:21:1;15809:2;15789:18;;;15782:30;15848:26;15828:18;;;15821:54;15892:18;;26746:65:0;15568:348:1;26746:65:0;-1:-1:-1;;;;;26887:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;26923:35:0;;;;;;:31;:35;;;;;;;;26922:36;26887:71;26883:216;;;27001:20;;26991:6;:30;;26983:96;;;;-1:-1:-1;;;26983:96:0;;16123:2:1;26983:96:0;;;16105:21:1;16162:2;16142:18;;;16135:30;16201:34;16181:18;;;16174:62;-1:-1:-1;;;16252:18:1;;;16245:51;16313:19;;26983:96:0;15921:417:1;26983:96:0;27145:25;27223:17;;27198:22;;27173;;:47;;;;:::i;:::-;:67;;;;:::i;:::-;27145:95;;27251:28;27282:24;27300:4;27282:9;:24::i;:::-;27372:23;;27442:16;;27251:55;;-1:-1:-1;27348:47:0;;;;-1:-1:-1;;;27442:16:0;;;;27441:17;:55;;;;-1:-1:-1;27475:21:0;;-1:-1:-1;;;27475:21:0;;;;27441:55;:100;;;;-1:-1:-1;27523:13:0;;27540:1;;27513:24;;-1:-1:-1;;;;;27523:13:0;27513:9;:24::i;:::-;:28;27441:100;:138;;;;;27578:1;27558:17;:21;27441:138;:178;;;;-1:-1:-1;;;;;;27597:22:0;;;;;;:18;:22;;;;;;;;27596:23;27441:178;:220;;;;-1:-1:-1;;;;;;27637:24:0;;;;;;:18;:24;;;;;;;;27636:25;27441:220;:266;;;;-1:-1:-1;;;;;;27678:29:0;;;;;;:25;:29;;;;;;;;27441:266;:306;;;;;27724:23;27441:306;27437:349;;;27764:10;:8;:10::i;:::-;-1:-1:-1;;;;;27919:24:0;;27798:12;27919:24;;;:18;:24;;;;;;27813:4;;27919:24;;;:50;;-1:-1:-1;;;;;;27947:22:0;;;;;;:18;:22;;;;;;;;27919:50;27915:1163;;;-1:-1:-1;15547:1:0;28016:15;:26;27996:5;27915:1163;;;-1:-1:-1;;;;;28099:31:0;;;;;;:25;:31;;;;;;;;28095:972;;;28151:14;:12;:14::i;:::-;28194:10;;28184:7;:20;28277:11;;28258:16;;28239;;:35;;28258:16;28239:35;:::i;:::-;:49;;;;:::i;:::-;28223:13;:65;15463:1;28307:15;:21;28095:972;;;-1:-1:-1;;;;;28389:29:0;;;;;;:25;:29;;;;;;;;28385:682;;;28439:14;:12;:14::i;:::-;28482:11;;28472:7;:21;28568:12;;28548:17;;28528;;:37;;28548:17;28528:37;:::i;:::-;:52;;;;:::i;:::-;28512:13;:68;15503:1;28599:15;:22;-1:-1:-1;;;;;28725:17:0;;-1:-1:-1;28725:17:0;;;:11;:17;;;;;;;;:56;;;;;28769:12;28747:18;;:34;;28725:56;28722:180;;;28815:7;;:11;;28825:1;28815:11;:::i;:::-;28805:7;:21;28865:13;;:17;;28881:1;28865:17;:::i;:::-;28849:13;:33;28722:180;28385:682;;;28992:14;:12;:14::i;:::-;15547:1;29025:15;:26;28385:682;29090:41;29105:4;29111:2;29115:6;29123:7;29090:14;:41::i;:::-;25865:3282;;;;25796:3351;;;:::o;1614:190::-;1700:7;1736:12;1728:6;;;;1720:29;;;;-1:-1:-1;;;1720:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1760:9:0;1772:5;1776:1;1772;:5;:::i;:::-;1760:17;1614:190;-1:-1:-1;;;;;1614:190:0:o;36687:164::-;36729:7;36750:15;36767;36786:19;:17;:19::i;:::-;36749:56;;-1:-1:-1;36749:56:0;-1:-1:-1;36823:20:0;36749:56;;36823:11;:20::i;:::-;36816:27;;;;36687:164;:::o;1283:179::-;1341:7;;1373:5;1377:1;1373;:5;:::i;:::-;1361:17;;1402:1;1397;:6;;1389:46;;;;-1:-1:-1;;;1389:46:0;;16545:2:1;1389:46:0;;;16527:21:1;16584:2;16564:18;;;16557:30;16623:29;16603:18;;;16596:57;16670:18;;1389:46:0;16343:351:1;35490:414:0;35549:7;35558;35567;35576;35585;35594;35615:23;35640:12;35654:18;35676:20;35688:7;35676:11;:20::i;:::-;35614:82;;;;;;35708:15;35725:23;35750:12;35766:50;35778:7;35787:4;35793:10;35805;:8;:10::i;:::-;35766:11;:50::i;:::-;35707:109;;;;-1:-1:-1;35707:109:0;;-1:-1:-1;35864:15:0;;-1:-1:-1;35880:4:0;;-1:-1:-1;35885:10:0;;-1:-1:-1;35490:414:0;;-1:-1:-1;;;;;35490:414:0:o;22653:324::-;-1:-1:-1;;;;;22736:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;22736:39:0;;;;;;;22786:38;22736:31;:39;22786:25;:38::i;:::-;22838:5;22835:35;;;22845:23;22863:4;22845:17;:23::i;:::-;22884:5;22880:34;;22891:21;22907:4;22891:15;:21::i;:::-;22929:40;;;-1:-1:-1;;;;;16885:32:1;;16867:51;;16961:14;;16954:22;16949:2;16934:18;;16927:50;22929:40:0;;16840:18:1;22929:40:0;;;;;;;;22653:324;;:::o;2208:276::-;2294:7;2329:12;2322:5;2314:28;;;;-1:-1:-1;;;2314:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2353:9:0;2365:5;2369:1;2365;:5;:::i;29155:2022::-;18772:16;:23;;-1:-1:-1;;;;18772:23:0;-1:-1:-1;;;18772:23:0;;;;29232:24:::1;29250:4;29232:9;:24::i;:::-;29206:50;;29275:25;29303:73;29353:22;;29303:45;29330:17;;29303:22;;:26;;:45;;;;:::i;:::-;:49:::0;::::1;:73::i;:::-;29275:101;;29446:26;29475:29;29502:1;29475:22;;:26;;:29;;;;:::i;:::-;29446:58:::0;-1:-1:-1;29515:29:0::1;29547:39;:15:::0;29446:58;29547:19:::1;:39::i;:::-;29515:71:::0;-1:-1:-1;29638:21:0::1;29672:42;29515:71:::0;29672:19:::1;:42::i;:::-;29736:21;29760:47;:21;29786:20:::0;29760:25:::1;:47::i;:::-;29736:71;;29828:26;29857:68;29907:17;29857:45;29900:1;29877:22;;29875:1;:24;;;;:::i;:::-;:26;;;;:::i;:::-;29857:13:::0;;:17:::1;:45::i;:::-;:49:::0;::::1;:68::i;:::-;29828:97;;29936:24;29963:66;30011:17;29963:43;30004:1;29981:22;;:24;;;;:::i;:::-;29963:13:::0;;:17:::1;:43::i;:66::-;29936:93;;30040:22;30065:61;30108:17;30065:38;30101:1;30083:17;;:19;;;;:::i;:::-;30065:13:::0;;:17:::1;:38::i;:61::-;30040:86;;30137:22;30162:61;30205:17;30162:38;30198:1;30180:17;;:19;;;;:::i;:::-;30162:13:::0;;:17:::1;:38::i;:61::-;30137:86:::0;-1:-1:-1;30244:26:0::1;30273:99;30355:16:::0;30273:77:::1;30137:86:::0;30273:77;30315:14;30273:77;:13;30291:18;30273:17:::1;:37::i;:::-;:41:::0;::::1;:57::i;:99::-;30410:1;30385:22;:26:::0;;;30422:22:::1;:26:::0;;;30459:17:::1;:21:::0;;;30527:12:::1;::::0;30519:53:::1;::::0;30244:128;;-1:-1:-1;30410:1:0;;-1:-1:-1;;;;;30527:12:0;;::::1;::::0;30553:14;;30410:1;30519:53;30410:1;30519:53;30553:14;30527:12;30519:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;30604:16:0::1;::::0;30596:59:::1;::::0;30501:71;;-1:-1:-1;;;;;;30604:16:0::1;::::0;30634;;30596:59:::1;::::0;;;30634:16;30604;30596:59:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;30687:12:0::1;::::0;30679:53:::1;::::0;30583:72;;-1:-1:-1;;;;;;30687:12:0::1;::::0;30713:14;;30679:53:::1;::::0;;;30713:14;30687:12;30679:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;30764:16:0::1;::::0;30756:61:::1;::::0;30666:66;;-1:-1:-1;;;;;;30764:16:0::1;::::0;30794:18;;30756:61:::1;::::0;;;30794:18;30764:16;30756:61:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30743:74;;;;;30848:52;30861:18;30881;30848:12;:52::i;:::-;30916:77;::::0;;17400:25:1;;;17456:2;17441:18;;17434:34;;;17484:18;;;17477:34;;;30916:77:0::1;::::0;17388:2:1;17373:18;30916:77:0::1;;;;;;;31078:21;:25:::0;31075:95:::1;;31119:39;31136:21;31119:16;:39::i;:::-;-1:-1:-1::0;;18800:16:0;:24;;-1:-1:-1;;;;18800:24:0;;;-1:-1:-1;;;;;;;;;;29155:2022:0:o;38666:235::-;38713:7;;:12;:34;;;;-1:-1:-1;38729:13:0;;:18;38713:34;38709:47;;;38666:235::o;38709:47::-;38786:7;;;38768:15;:25;38828:13;;;38804:21;:37;-1:-1:-1;38854:11:0;;;;38876:17;38666:235::o;32370:651::-;32483:7;32478:28;;32492:14;:12;:14::i;:::-;-1:-1:-1;;;;;32523:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;32547:22:0;;;;;;:11;:22;;;;;;;;32546:23;32523:46;32519:467;;;32586:48;32608:6;32616:9;32627:6;32586:21;:48::i;:::-;32519:467;;;-1:-1:-1;;;;;32657:19:0;;;;;;:11;:19;;;;;;;;32656:20;:46;;;;-1:-1:-1;;;;;;32680:22:0;;;;;;:11;:22;;;;;;;;32656:46;32652:334;;;32719:46;32739:6;32747:9;32758:6;32719:19;:46::i;32652:334::-;-1:-1:-1;;;;;32787:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;32810:22:0;;;;;;:11;:22;;;;;;;;32787:45;32783:203;;;32849:48;32871:6;32879:9;32890:6;32849:21;:48::i;32783:203::-;32930:44;32948:6;32956:9;32967:6;32930:17;:44::i;:::-;32998:15;38963;;38953:7;:25;39005:21;;38989:13;:37;38909:125;32998:15;32370:651;;;;:::o;36859:556::-;36957:7;;36910;;;;-1:-1:-1;;;36910:7:0;37011:289;37035:9;:16;37031:20;;37011:289;;;37101:7;37077;:21;37085:9;37095:1;37085:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37085:12:0;37077:21;;;;;;;;;;;;;:31;;:66;;;37136:7;37112;:21;37120:9;37130:1;37120:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37120:12:0;37112:21;;;;;;;;;;;;;:31;37077:66;37073:97;;;-1:-1:-1;;37153:7:0;;;-1:-1:-1;;;15117:15:0;-1:-1:-1;36859:556:0;-1:-1:-1;;36859:556:0:o;37073:97::-;37195:34;37207:7;:21;37215:9;37225:1;37215:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37215:12:0;37207:21;;;;;;;;;;;;;37195:7;;:11;:34::i;:::-;37185:44;;37254:34;37266:7;:21;37274:9;37284:1;37274:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37274:12:0;37266:21;;;;;;;;;;;;;37254:7;;:11;:34::i;:::-;37244:44;-1:-1:-1;37053:3:0;;;;:::i;:::-;;;;37011:289;;;-1:-1:-1;37324:7:0;;:20;;-1:-1:-1;;;37324:11:0;:20::i;:::-;37314:7;:30;37310:61;;;-1:-1:-1;;37354:7:0;;;-1:-1:-1;;;15117:15:0;-1:-1:-1;36859:556:0;-1:-1:-1;36859:556:0:o;37310:61::-;37390:7;;37399;;-1:-1:-1;36859:556:0;-1:-1:-1;36859:556:0:o;35912:330::-;35972:7;35981;35990;36010:12;36025:24;36041:7;36025:15;:24::i;:::-;36010:39;;36060:18;36081:30;36103:7;36081:21;:30::i;:::-;36060:51;-1:-1:-1;36122:23:0;36148:33;36060:51;36148:17;:7;36160:4;36148:11;:17::i;:33::-;36122:59;36217:4;;-1:-1:-1;36223:10:0;;-1:-1:-1;35912:330:0;;-1:-1:-1;;;35912:330:0:o;36250:429::-;36365:7;;;;36421:24;:7;36433:11;36421;:24::i;:::-;36403:42;-1:-1:-1;36456:12:0;36471:21;:4;36480:11;36471:8;:21::i;:::-;36456:36;-1:-1:-1;36503:18:0;36524:27;:10;36539:11;36524:14;:27::i;:::-;36503:48;-1:-1:-1;36562:23:0;36588:33;36503:48;36588:17;:7;36600:4;36588:11;:17::i;:33::-;36640:7;;;;-1:-1:-1;36666:4:0;;-1:-1:-1;36250:429:0;;-1:-1:-1;;;;;;;36250:429:0:o;31189:398::-;31282:16;;;31296:1;31282:16;;;;;;;;31258:21;;31282:16;;;;;;;;;;-1:-1:-1;31282:16:0;31258:40;;31327:4;31309;31314:1;31309:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31309:23:0;;;:7;;;;;;;;;;:23;;;;31353:15;;:22;;;-1:-1:-1;;;31353:22:0;;;;:15;;;;;:20;;:22;;;;;31309:7;;31353:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31343:4;31348:1;31343:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31343:32:0;;;:7;;;;;;;;;:32;31418:15;;31386:62;;31403:4;;31418:15;31436:11;31386:8;:62::i;:::-;31459:15;;:120;;-1:-1:-1;;;31459:120:0;;-1:-1:-1;;;;;31459:15:0;;;;:66;;:120;;31526:11;;31459:15;;31542:4;;31556;;31563:15;;31459:120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31247:340;31189:398;:::o;1812:248::-;1870:7;1894:6;1890:47;;-1:-1:-1;1924:1:0;1917:8;;1890:47;1949:9;1961:5;1965:1;1961;:5;:::i;:::-;1949:17;-1:-1:-1;1994:1:0;1985:5;1989:1;1949:17;1985:5;:::i;:::-;:10;1977:56;;;;-1:-1:-1;;;1977:56:0;;18909:2:1;1977:56:0;;;18891:21:1;18948:2;18928:18;;;18921:30;18987:34;18967:18;;;18960:62;-1:-1:-1;;;19038:18:1;;;19031:31;19079:19;;1977:56:0;18707:397:1;32080:282:0;32193:15;;32161:62;;32178:4;;-1:-1:-1;;;;;32193:15:0;32211:11;32161:8;:62::i;:::-;32234:15;;32320:16;;32234:120;;-1:-1:-1;;;32234:120:0;;32294:4;32234:120;;;19458:34:1;19508:18;;;19501:34;;;32234:15:0;19551:18:1;;;19544:34;;;19594:18;;;19587:34;-1:-1:-1;;;;;32320:16:0;;;19637:19:1;;;19630:44;32338:15:0;19690:19:1;;;19683:35;32234:15:0;;;:31;;32274:9;;19392:19:1;;32234:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32080:282;;:::o;31599:469::-;31744:16;;;31758:1;31744:16;;;;;;;;31720:21;;31744:16;;;;;;;;-1:-1:-1;;31781:15:0;;:22;;;-1:-1:-1;;;31781:22:0;;;;31720:40;;-1:-1:-1;;;;;;31781:15:0;;;;:20;;-1:-1:-1;31781:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31771:4;31776:1;31771:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31771:32:0;;;-1:-1:-1;;;;;31771:32:0;;;;;31832:4;31814;31819:1;31814:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31814:23:0;;;:7;;;;;;;;;:23;31876:15;;;:66;31950:6;31876:15;31961:4;31966:11;31979:24;:15;31999:3;31979:19;:24::i;:::-;31876:128;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32030:30;32047:6;32055:4;32030:30;;;;;;;:::i;34122:563::-;34225:15;34242:23;34267:12;34281:23;34306:12;34320:18;34342:19;34353:7;34342:10;:19::i;:::-;-1:-1:-1;;;;;34390:15:0;;;;;;:7;:15;;;;;;34224:137;;-1:-1:-1;34224:137:0;;-1:-1:-1;34224:137:0;;-1:-1:-1;34224:137:0;-1:-1:-1;34224:137:0;-1:-1:-1;34224:137:0;-1:-1:-1;34390:28:0;;34410:7;34390:19;:28::i;:::-;-1:-1:-1;;;;;34372:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34447:7;:15;;;;:28;;34467:7;34447:19;:28::i;:::-;-1:-1:-1;;;;;34429:15:0;;;;;;;:7;:15;;;;;;:46;;;;34507:18;;;;;;;:39;;34530:15;34507:22;:39::i;:::-;-1:-1:-1;;;;;34486:18:0;;;;;;:7;:18;;;;;:60;34557:26;34572:10;34557:14;:26::i;:::-;34594:23;34606:4;34612;34594:11;:23::i;:::-;34650:9;-1:-1:-1;;;;;34633:44:0;34642:6;-1:-1:-1;;;;;34633:44:0;;34661:15;34633:44;;;;1847:25:1;;1835:2;1820:18;;1701:177;34633:44:0;;;;;;;;34213:472;;;;;;34122:563;;;:::o;33539:575::-;33640:15;33657:23;33682:12;33696:23;33721:12;33735:18;33757:19;33768:7;33757:10;:19::i;:::-;-1:-1:-1;;;;;33805:15:0;;;;;;:7;:15;;;;;;33639:137;;-1:-1:-1;33639:137:0;;-1:-1:-1;33639:137:0;;-1:-1:-1;33639:137:0;-1:-1:-1;33639:137:0;-1:-1:-1;33639:137:0;-1:-1:-1;33805:28:0;;33639:137;33805:19;:28::i;:::-;-1:-1:-1;;;;;33787:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;33865:18;;;;;:7;:18;;;;;:39;;33888:15;33865:22;:39::i;:::-;-1:-1:-1;;;;;33844:18:0;;;;;;:7;:18;;;;;;;;:60;;;;33936:7;:18;;;;:39;;33959:15;33936:22;:39::i;34693:634::-;34796:15;34813:23;34838:12;34852:23;34877:12;34891:18;34913:19;34924:7;34913:10;:19::i;:::-;-1:-1:-1;;;;;34961:15:0;;;;;;:7;:15;;;;;;34795:137;;-1:-1:-1;34795:137:0;;-1:-1:-1;34795:137:0;;-1:-1:-1;34795:137:0;-1:-1:-1;34795:137:0;-1:-1:-1;34795:137:0;-1:-1:-1;34961:28:0;;34981:7;34961:19;:28::i;:::-;-1:-1:-1;;;;;34943:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35018:7;:15;;;;:28;;35038:7;35018:19;:28::i;33029:502::-;33128:15;33145:23;33170:12;33184:23;33209:12;33223:18;33245:19;33256:7;33245:10;:19::i;:::-;-1:-1:-1;;;;;33293:15:0;;;;;;:7;:15;;;;;;33127:137;;-1:-1:-1;33127:137:0;;-1:-1:-1;33127:137:0;;-1:-1:-1;33127:137:0;-1:-1:-1;33127:137:0;-1:-1:-1;33127:137:0;-1:-1:-1;33293:28:0;;33127:137;33293:19;:28::i;38378:130::-;38442:7;38469:31;38494:5;38469:20;38481:7;;38469;:11;;:20;;;;:::i;38516:142::-;38586:7;38613:37;38644:5;38613:26;38625:13;;38613:7;:11;;:26;;;;:::i;37423:947::-;15463:1;37489:15;;:22;37486:582;;;37585:13;;37566:16;;37553:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;37527:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;37661:13:0;;37647:11;;37634:24;;:10;:24;:::i;:::-;:40;;;;:::i;:::-;37613:17;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;37747:13:0;;37728:16;;37715:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;37689:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;37486:582:0;;-1:-1:-1;37486:582:0;;15503:1;37781:15;;:23;37778:290;;;37879:13;;37859:17;;37846:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;37820:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;37956:13:0;;37941:12;;37928:25;;:10;:25;:::i;:::-;:41;;;;:::i;:::-;37907:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;38043:13:0;;38023:17;;38010:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;37984:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;37778:290:0;38078:19;38100:10;:8;:10::i;:::-;38078:32;-1:-1:-1;38121:18:0;38142:27;:10;38078:32;38142:14;:27::i;:::-;38221:4;38205:22;;;;:7;:22;;;;;;38121:48;;-1:-1:-1;38205:38:0;;38121:48;38205:26;:38::i;:::-;38196:4;38180:22;;;;:7;:22;;;;;;;;:63;;;;38258:11;:26;;;;;;38254:108;;;38340:4;38324:22;;;;:7;:22;;;;;;:38;;38351:10;38324:26;:38::i;:::-;38315:4;38299:22;;;;:7;:22;;;;;:63;37475:895;;37423:947;:::o;35335:147::-;35413:7;;:17;;35425:4;35413:11;:17::i;:::-;35403:7;:27;35454:10;;:20;;35469:4;35454:14;:20::i;:::-;35441:10;:33;-1:-1:-1;;35335:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:180::-;675:6;728:2;716:9;707:7;703:23;699:32;696:52;;;744:1;741;734:12;696:52;-1:-1:-1;767:23:1;;616:180;-1:-1:-1;616:180:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;856:70;801:131;:::o;937:315::-;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1449:247::-;1508:6;1561:2;1549:9;1540:7;1536:23;1532:32;1529:52;;;1577:1;1574;1567:12;1529:52;1616:9;1603:23;1635:31;1660:5;1635:31;:::i;2342:456::-;2419:6;2427;2435;2488:2;2476:9;2467:7;2463:23;2459:32;2456:52;;;2504:1;2501;2494:12;2456:52;2543:9;2530:23;2562:31;2587:5;2562:31;:::i;:::-;2612:5;-1:-1:-1;2669:2:1;2654:18;;2641:32;2682:33;2641:32;2682:33;:::i;:::-;2342:456;;2734:7;;-1:-1:-1;;;2788:2:1;2773:18;;;;2760:32;;2342:456::o;3200:118::-;3286:5;3279:13;3272:21;3265:5;3262:32;3252:60;;3308:1;3305;3298:12;3323:309;3388:6;3396;3449:2;3437:9;3428:7;3424:23;3420:32;3417:52;;;3465:1;3462;3455:12;3417:52;3501:9;3488:23;3478:33;;3561:2;3550:9;3546:18;3533:32;3574:28;3596:5;3574:28;:::i;:::-;3621:5;3611:15;;;3323:309;;;;;:::o;3637:382::-;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;3944:2:1;3929:18;;3916:32;3957:30;3916:32;3957:30;:::i;4024:388::-;4092:6;4100;4153:2;4141:9;4132:7;4128:23;4124:32;4121:52;;;4169:1;4166;4159:12;4121:52;4208:9;4195:23;4227:31;4252:5;4227:31;:::i;:::-;4277:5;-1:-1:-1;4334:2:1;4319:18;;4306:32;4347:33;4306:32;4347:33;:::i;4417:385::-;4503:6;4511;4519;4527;4580:3;4568:9;4559:7;4555:23;4551:33;4548:53;;;4597:1;4594;4587:12;4548:53;-1:-1:-1;;4620:23:1;;;4690:2;4675:18;;4662:32;;-1:-1:-1;4741:2:1;4726:18;;4713:32;;4792:2;4777:18;4764:32;;-1:-1:-1;4417:385:1;-1:-1:-1;4417:385:1:o;4807:241::-;4863:6;4916:2;4904:9;4895:7;4891:23;4887:32;4884:52;;;4932:1;4929;4922:12;4884:52;4971:9;4958:23;4990:28;5012:5;4990:28;:::i;5053:356::-;5255:2;5237:21;;;5274:18;;;5267:30;5333:34;5328:2;5313:18;;5306:62;5400:2;5385:18;;5053:356::o;5414:127::-;5475:10;5470:3;5466:20;5463:1;5456:31;5506:4;5503:1;5496:15;5530:4;5527:1;5520:15;5546:168;5586:7;5652:1;5648;5644:6;5640:14;5637:1;5634:21;5629:1;5622:9;5615:17;5611:45;5608:71;;;5659:18;;:::i;:::-;-1:-1:-1;5699:9:1;;5546:168::o;5719:217::-;5759:1;5785;5775:132;;5829:10;5824:3;5820:20;5817:1;5810:31;5864:4;5861:1;5854:15;5892:4;5889:1;5882:15;5775:132;-1:-1:-1;5921:9:1;;5719:217::o;6704:127::-;6765:10;6760:3;6756:20;6753:1;6746:31;6796:4;6793:1;6786:15;6820:4;6817:1;6810:15;6836:125;6876:4;6904:1;6901;6898:8;6895:34;;;6909:18;;:::i;:::-;-1:-1:-1;6946:9:1;;6836:125::o;6966:127::-;7027:10;7022:3;7018:20;7015:1;7008:31;7058:4;7055:1;7048:15;7082:4;7079:1;7072:15;7098:135;7137:3;-1:-1:-1;;7158:17:1;;7155:43;;;7178:18;;:::i;:::-;-1:-1:-1;7225:1:1;7214:13;;7098:135::o;7954:128::-;7994:3;8025:1;8021:6;8018:1;8015:13;8012:39;;;8031:18;;:::i;:::-;-1:-1:-1;8067:9:1;;7954:128::o;9335:251::-;9405:6;9458:2;9446:9;9437:7;9433:23;9429:32;9426:52;;;9474:1;9471;9464:12;9426:52;9506:9;9500:16;9525:31;9550:5;9525:31;:::i;10832:184::-;10902:6;10955:2;10943:9;10934:7;10930:23;10926:32;10923:52;;;10971:1;10968;10961:12;10923:52;-1:-1:-1;10994:16:1;;10832:184;-1:-1:-1;10832:184:1:o;11300:245::-;11367:6;11420:2;11408:9;11399:7;11395:23;11391:32;11388:52;;;11436:1;11433;11426:12;11388:52;11468:9;11462:16;11487:28;11509:5;11487:28;:::i;17654:461::-;17707:3;17745:5;17739:12;17772:6;17767:3;17760:19;17798:4;17827:2;17822:3;17818:12;17811:19;;17864:2;17857:5;17853:14;17885:1;17895:195;17909:6;17906:1;17903:13;17895:195;;;17974:13;;-1:-1:-1;;;;;17970:39:1;17958:52;;18030:12;;;;18065:15;;;;18006:1;17924:9;17895:195;;;-1:-1:-1;18106:3:1;;17654:461;-1:-1:-1;;;;;17654:461:1:o;18120:582::-;18419:6;18408:9;18401:25;18462:6;18457:2;18446:9;18442:18;18435:34;18505:3;18500:2;18489:9;18485:18;18478:31;18382:4;18526:57;18578:3;18567:9;18563:19;18555:6;18526:57;:::i;:::-;-1:-1:-1;;;;;18619:32:1;;;;18614:2;18599:18;;18592:60;-1:-1:-1;18683:3:1;18668:19;18661:35;18518:65;18120:582;-1:-1:-1;;;18120:582:1:o;19729:306::-;19817:6;19825;19833;19886:2;19874:9;19865:7;19861:23;19857:32;19854:52;;;19902:1;19899;19892:12;19854:52;19931:9;19925:16;19915:26;;19981:2;19970:9;19966:18;19960:25;19950:35;;20025:2;20014:9;20010:18;20004:25;19994:35;;19729:306;;;;;:::o;20040:510::-;20311:6;20300:9;20293:25;20354:3;20349:2;20338:9;20334:18;20327:31;20274:4;20375:57;20427:3;20416:9;20412:19;20404:6;20375:57;:::i;:::-;-1:-1:-1;;;;;20468:32:1;;;;20463:2;20448:18;;20441:60;-1:-1:-1;20532:2:1;20517:18;20510:34;20367:65;20040:510;-1:-1:-1;;20040:510:1:o;20555:332::-;20762:6;20751:9;20744:25;20805:2;20800;20789:9;20785:18;20778:30;20725:4;20825:56;20877:2;20866:9;20862:18;20854:6;20825:56;:::i;:::-;20817:64;20555:332;-1:-1:-1;;;;20555:332:1:o

Swarm Source

ipfs://7fb8878f2a2345cde4ee873ff1d9cb944b292c84b7c4a6751d64376483d1c01b
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.