ETH Price: $3,560.34 (-1.43%)

Token

ERC-20: I Love You Coin (ILY)
 

Overview

Max Total Supply

250,000,000,000 ILY

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
53,281,849.23501302 ILY

Value
$0.00
0x39e0ac52eb79ddedf201b0eb0b23b82b68b691ab
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:
ILOVEYOU

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-17
*/

/**

I Love You Coin
Website: https://www.ilytoken.com/

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

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

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


interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    

}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }


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

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

        return c;
    }

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

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

library Address {

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

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

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


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

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

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

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

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

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

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

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

// pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract ILOVEYOU is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable private marketingWallet = payable(0x01aDA676E688BfB961893462ad1e22b4Caef785d); // Marketing Wallet
    address payable private crowdfundWallet = payable(0xE991A8F6511FC43514AdAfBFAa3c057B24BaAa17); // Crowd Fund Wallet
    address payable private devWallet = payable (0x01aDA676E688BfB961893462ad1e22b4Caef785d); // Dev Wallet
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    
    uint256 public deadBlocks = 2;
    uint256 public launchedAt = 0;
    

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isTrusted;
    address[] private _excluded;
    mapping (address => bool) internal authorizations;
   
    address DEAD = 0x000000000000000000000000000000000000dEaD;

    uint8 private _decimals = 8;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 250000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "I Love You Coin";
    string private _symbol = "ILY";

    //Below was originally _tTotal.div(1000).mul(5); //0.5%

    uint256 public _maxWalletToken = _tTotal.div(100).mul(3); //3%

    uint256 public _buyLiquidityFee = 50; //5%
    uint256 public _buyDevFee = 0;    //0%
    uint256 public _buyMarketingFee = 0;   //0%
    uint256 public _buyReflectionFee = 0;   //0%

    uint256 public _sellLiquidityFee = 80; //8%
    uint256 public _sellMarketingFee = 0;  //0%
    uint256 public _sellDevFee = 0;   //0%
    uint256 public _sellReflectionFee = 0;   //0%
    
    uint256 private crowdfundfee = 20;   //0% same for buys and sells
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private marketingFee = _buyMarketingFee;
    uint256 private devFee = _buyDevFee;
    uint256 private reflectionFee=_buyReflectionFee;


    uint256 private totalFee =
        liquidityFee.add(marketingFee).add(devFee).add(crowdfundfee);
    uint256 private currenttotalFee = totalFee;
    
    //Below was originally _tTotal.div(10000).mul(5); //0.05%

    uint256 public swapThreshold = _tTotal.div(10000).mul(3); //0.03%
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;
    
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {

        _rOwned[_msgSender()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isMaxWalletExempt[owner()] = true;
        _isMaxWalletExempt[address(this)] = true;
        _isMaxWalletExempt[uniswapV2Pair] = true;
        _isMaxWalletExempt[DEAD] = true;
        _isTrusted[owner()] = true;
        _isTrusted[uniswapV2Pair] = true;
        authorizations[msg.sender] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
        tradingOpen = _status;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
            deadBlocks = _deadBlocks;
        }
    }

    
    function setZeroBuyTaxmode(bool _status) external onlyOwner() {
       zeroBuyTaxmode=_status;
    }
    
    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            uniswapV2Pair = get_pair;
        }
        uniswapV2Router = _newRouter;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

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

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

    function excludeFromReward(address account) public onlyOwner() {

        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], "Sorry Buddy, Get Rekt");
        require(!_isSniper[from], "Sorry Buddy, Get Rekt");
        
        if(!authorizations[from]){
            require(tradingOpen,"Trading not open yet");
        }

         bool takeFee = false;
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

        if(launchedAt>0 && (!_isMaxWalletExempt[to] && !authorizations[from])){
                require(amount+ balanceOf(to)<=_maxWalletToken,
                    "Total Holding is currently limited");
        }

        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        if(tradingOpen && to == uniswapV2Pair) { //sell
            currenttotalFee= _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
            reflectionFee=_sellReflectionFee;
        }
        
        //antibot - first 2 blocks
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }

        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) { //buys
                    currenttotalFee=0;
             }
        }

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {
      
            uint256 contractTokenBalance = balanceOf(address(this));
            
            if(contractTokenBalance>=swapThreshold){
                    contractTokenBalance = swapThreshold;
                    swapTokens(contractTokenBalance);
            }
          
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        
        
        uint256 amountToLiquify = contractTokenBalance
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);

        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);
        
        swapTokensForEth(amountToSwap);

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        
        uint256 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );
         uint256 amountETHcrowdfund = amountETH.mul(crowdfundfee).div(
            totalETHFee
        );
        //Send to marketing wallet and dev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHcrowdfund,crowdfundWallet);
            sendETHToFee(amountETHdev,devWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }
    }
    
    function sendETHToFee(uint256 amount,address payable wallet) private {
        wallet.transfer(amount);
    }
    

   
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {

        uint256 _previousReflectionFee=reflectionFee;
        uint256 _previousTotalFee=currenttotalFee;
        if(!takeFee){
            reflectionFee = 0;
            currenttotalFee=0;
        }
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee){
            reflectionFee = _previousReflectionFee;
            currenttotalFee=_previousTotalFee;
        }
    }

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

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

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

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

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

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

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(reflectionFee).div(
            10**3
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(currenttotalFee).div(
            10**3
        );
    }
    
    function excludeMultiple(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isExcludedFromFee[addresses[i]] = true;
        }
    }
    
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setWallets(address _marketingWallet,address _devWallet) external onlyOwner() {
        marketingWallet = payable(_marketingWallet);
        devWallet = payable(_devWallet);
    }


    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }
    
    function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            if(!_isTrusted[addresses[i]]){
                _isSniper[addresses[i]] = status;
            }
        }
    }
    
    function manage_trusted(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isTrusted[addresses[i]]=true;
        }
    }
        
    function withDrawLeftoverETH(address payable receipient) public onlyOwner {
        receipient.transfer(address(this).balance);
    }

    function withdrawStuckTokens(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000);
    }

    function setMaxWalletExempt(address _addr) external onlyOwner {
        _isMaxWalletExempt[_addr] = true;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
    }

    function airdrop(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow

        uint256 SCCC = tokens* 10**_decimals * addresses.length;

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(from,addresses[i],(tokens* 10**_decimals));
        }
    }

    function setTaxesBuy(uint256 _reflectionFee, uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee,uint256 _crowdfundfee) external onlyOwner {
       
        _buyLiquidityFee = _liquidityFee;
        _buyMarketingFee = _marketingFee;
        _buyDevFee = _devFee;
        _buyReflectionFee= _reflectionFee;

        reflectionFee= _reflectionFee;
        liquidityFee = _liquidityFee;
        devFee = _devFee;
        marketingFee = _marketingFee;
        crowdfundfee = _crowdfundfee;
        totalFee = liquidityFee.add(marketingFee).add(devFee).add(crowdfundfee);
        require(totalFee.add(_buyReflectionFee) <= 500, "Must keep taxes below 50%");
    }

     function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function setTaxesSell(uint256 _reflectionFee,uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee) external onlyOwner {
        _sellLiquidityFee = _liquidityFee;
        _sellMarketingFee = _marketingFee;
        _sellDevFee = _devFee;
        _sellReflectionFee= _reflectionFee;
        require(_sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee).add(_sellReflectionFee).add(crowdfundfee) <= 500, "Must keep taxes below 50%");
    }
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"_buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"manage_trusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_crowdfundfee","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b03199081167301ada676e688bfb961893462ad1e22b4caef785d90811790925560048054821673e991a8f6511fc43514adafbfaa3c057b24baaa171790556005805490911690911790556002600a9081556000600b55601280547408000000000000000000000000000000000000dead6001600160a81b03199091161790819055620000a791600160a01b90910460ff169062000930565b620000b890643a35294400620009ef565b6013819055620000cb9060001962000a68565b620000d99060001962000a11565b60145560408051808201909152600f8082526e24902637bb32902cb7ba9021b7b4b760891b602090920191825262000114916016916200078c565b5060408051808201909152600380825262494c5960e81b602090920191825262000141916017916200078c565b506200017960036200016560646013546200060f60201b620020381790919060201c565b6200066260201b6200207a1790919060201c565b60185560326019556000601a556000601b556000601c556050601d556000601e556000601f5560006020556014602155601954602255601b54602355601a54602455601c5460255562000201602154620001ed602454620001ed602354602254620006ed60201b620020f91790919060201c565b620006ed60201b620020f91790919060201c565b6026556026546027556200022e6003620001656127106013546200060f60201b620020381790919060201c565b602855602a805461ffff60a81b191690553480156200024c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506014543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620002f057600080fd5b505afa15801562000305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032b919062000832565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037457600080fd5b505afa15801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000832565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003f857600080fd5b505af11580156200040d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000433919062000832565b602a80546001600160a01b03199081166001600160a01b0393841617909155602980549091169183169190911790556001600c60006200047b6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600c909252812080549092166001908117909255600d90620004d46000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155602a54821684528284208054861682179055601254909116835290822080549093168117909255600f90620005566000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055602a549091168152600f83528181208054851660019081179091553382526011909352208054909216179055620005b83390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6013546040516200060091815260200190565b60405180910390a35062000aab565b60006200065983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200075060201b60201c565b90505b92915050565b60008262000673575060006200065c565b6000620006818385620009ef565b905082620006908583620008d0565b14620006595760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620006fc8385620008b5565b905083811015620006595760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006e4565b60008183620007745760405162461bcd60e51b8152600401620006e491906200085d565b506000620007838486620008d0565b95945050505050565b8280546200079a9062000a2b565b90600052602060002090601f016020900481019282620007be576000855562000809565b82601f10620007d957805160ff191683800117855562000809565b8280016001018555821562000809579182015b8281111562000809578251825591602001919060010190620007ec565b50620008179291506200081b565b5090565b5b808211156200081757600081556001016200081c565b6000602082840312156200084557600080fd5b81516001600160a01b03811681146200065957600080fd5b600060208083528351808285015260005b818110156200088c578581018301518582016040015282016200086e565b818111156200089f576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115620008cb57620008cb62000a7f565b500190565b600082620008e257620008e262000a95565b500490565b600181815b80851115620009285781600019048211156200090c576200090c62000a7f565b808516156200091a57918102915b93841c9390800290620008ec565b509250929050565b60006200065960ff8416836000826200094c575060016200065c565b816200095b575060006200065c565b81600181146200097457600281146200097f576200099f565b60019150506200065c565b60ff84111562000993576200099362000a7f565b50506001821b6200065c565b5060208310610133831016604e8410600b8410161715620009c4575081810a6200065c565b620009d08383620008e7565b8060001904821115620009e757620009e762000a7f565b029392505050565b600081600019048311821515161562000a0c5762000a0c62000a7f565b500290565b60008282101562000a265762000a2662000a7f565b500390565b600181811c9082168062000a4057607f821691505b6020821081141562000a6257634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a7a5762000a7a62000a95565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b613aa58062000abb6000396000f3fe60806040526004361061037a5760003560e01c806371b9189c116101d1578063b6a5d7de11610102578063dd62ed3e116100a0578063f259c57b1161006f578063f259c57b14610a2e578063f2fde38b14610a4e578063fabb0b4f14610a6e578063ffb54a9914610a8457600080fd5b8063dd62ed3e14610988578063ea2f0b37146109ce578063eafb5a3c146109ee578063f0b37c0414610a0e57600080fd5b8063c8607952116100dc578063c860795214610926578063c9cf77891461093c578063d3f6a15714610952578063dc44b6a01461097257600080fd5b8063b6a5d7de146108da578063bf56b371146108fa578063c5d241891461091057600080fd5b80638da5cb5b1161016f578063a1ac727f11610149578063a1ac727f1461085a578063a3b84b6b1461087a578063a457c2d71461089a578063a9059cbb146108ba57600080fd5b80638da5cb5b146108075780638f4590d21461082557806395d89b411461084557600080fd5b806378109e54116101ab57806378109e541461078257806384530c461461079857806388790a68146107b857806388f82020146107ce57600080fd5b806371b9189c1461072c578063743942b61461074c5780637598f8bc1461076c57600080fd5b8063313ce567116102ab5780634b01547f11610249578063620158521161022357806362015852146106c15780636ce37fa0146106d757806370a08231146106f7578063715018a61461071757600080fd5b80634b01547f1461066157806352390c02146106815780635d54c0af146106a157600080fd5b80633bd5d173116102855780633bd5d173146105eb578063401aa5c01461060b5780634549b0391461062157806349bd5a5e1461064157600080fd5b8063313ce5671461057f5780633685d419146105ab57806339509351146105cb57600080fd5b806318160ddd116103185780632691bc80116102f25780632691bc80146104fe5780632d4103d61461051f5780632d8381191461053f5780632dd5efe71461055f57600080fd5b806318160ddd146104a957806323b872dd146104be57806325b86edf146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60285481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610aa5565b6040516103a6919061371f565b3480156103dd57600080fd5b506103f16103ec3660046135c7565b610b37565b005b3480156103ff57600080fd5b5061041361040e3660046134aa565b610b91565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e36600461339a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060155461039c565b34801561047d57600080fd5b50602954610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060135461039c565b3480156104ca57600080fd5b506104136104d936600461340d565b610ba8565b3480156104ea57600080fd5b506103f16104f93660046133d4565b610c11565b34801561050a57600080fd5b50602a5461041390600160b01b900460ff1681565b34801561052b57600080fd5b506103f161053a3660046135a9565b610d41565b34801561054b57600080fd5b5061039c61055a3660046135c7565b610dcc565b34801561056b57600080fd5b506103f161057a36600461339a565b610e50565b34801561058b57600080fd5b50601254600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105b757600080fd5b506103f16105c636600461339a565b610e9e565b3480156105d757600080fd5b506104136105e63660046134aa565b611051565b3480156105f757600080fd5b506103f16106063660046135c7565b611087565b34801561061757600080fd5b5061039c601c5481565b34801561062d57600080fd5b5061039c61063c3660046135f9565b611171565b34801561064d57600080fd5b50602a54610491906001600160a01b031681565b34801561066d57600080fd5b506103f161067c36600461356f565b6111fe565b34801561068d57600080fd5b506103f161069c36600461339a565b611246565b3480156106ad57600080fd5b506103f16106bc366004613518565b611330565b3480156106cd57600080fd5b5061039c601a5481565b3480156106e357600080fd5b506103f16106f236600461366e565b611416565b34801561070357600080fd5b5061039c61071236600461339a565b6114bd565b34801561072357600080fd5b506103f161151c565b34801561073857600080fd5b506103f16107473660046134d6565b611590565b34801561075857600080fd5b506103f161076736600461339a565b61162f565b34801561077857600080fd5b5061039c60205481565b34801561078e57600080fd5b5061039c60185481565b3480156107a457600080fd5b506103f16107b33660046134d6565b61168e565b3480156107c457600080fd5b5061039c601d5481565b3480156107da57600080fd5b506104136107e936600461339a565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561081357600080fd5b506000546001600160a01b0316610491565b34801561083157600080fd5b506103f161084036600461361e565b611728565b34801561085157600080fd5b506103c4611772565b34801561086657600080fd5b506103f161087536600461344e565b611781565b34801561088657600080fd5b506103f16108953660046136a0565b611915565b3480156108a657600080fd5b506104136108b53660046134aa565b6119e2565b3480156108c657600080fd5b506104136108d53660046134aa565b611a31565b3480156108e657600080fd5b506103f16108f536600461339a565b611a3e565b34801561090657600080fd5b5061039c600b5481565b34801561091c57600080fd5b5061039c601b5481565b34801561093257600080fd5b5061039c601e5481565b34801561094857600080fd5b5061039c601f5481565b34801561095e57600080fd5b506103f161096d3660046133d4565b611a8c565b34801561097e57600080fd5b5061039c60195481565b34801561099457600080fd5b5061039c6109a33660046133d4565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109da57600080fd5b506103f16109e936600461339a565b611ae4565b3480156109fa57600080fd5b506103f1610a0936600461339a565b611b2f565b348015610a1a57600080fd5b506103f1610a2936600461339a565b611eb5565b348015610a3a57600080fd5b506103f1610a4936600461339a565b611f00565b348015610a5a57600080fd5b506103f1610a6936600461339a565b611f4e565b348015610a7a57600080fd5b5061039c600a5481565b348015610a9057600080fd5b50602a5461041390600160a81b900460ff1681565b606060168054610ab490613964565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613964565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b8152600401610b6190613774565b60405180910390fd5b610b8b81610b856103e860135461203890919063ffffffff16565b9061207a565b60185550565b6000610b9e338484612158565b5060015b92915050565b6000610bb584848461227c565b610c078433610c0285604051806060016040528060288152602001613a23602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612772565b612158565b5060019392505050565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b8152600401610b6190613774565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb591906135e0565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d0357600080fd5b505af1158015610d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3b919061358c565b50505050565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b8152600401610b6190613774565b602a805460ff60a81b1916600160a81b84151502179055610d8b30611246565b602a54610da0906001600160a01b0316611246565b602a54600160a81b900460ff168015610db95750600b54155b15610dc85743600b55600a8190555b5050565b6000601454821115610e335760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b61565b6000610e3d6127ac565b9050610e498382612038565b9392505050565b6000546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314610ec85760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b0381166000908152600e602052604090205460ff16610f305760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b61565b60005b601054811015610dc857816001600160a01b031660108281548110610f5a57610f5a6139e6565b6000918252602090912001546001600160a01b0316141561103f5760108054610f859060019061394d565b81548110610f9557610f956139e6565b600091825260209091200154601080546001600160a01b039092169183908110610fc157610fc16139e6565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff191690556010805480611019576110196139d0565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110498161399f565b915050610f33565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b9e918590610c0290866120f9565b336000818152600e602052604090205460ff16156110fc5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b61565b6000611107836127cf565b505050506001600160a01b0384166000908152600660205260409020549192506111339190508261281e565b6001600160a01b038316600090815260066020526040902055601454611159908261281e565b60145560155461116990846120f9565b601555505050565b60006013548311156111c55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b61565b816111e45760006111d5846127cf565b50939550610ba2945050505050565b60006111ef846127cf565b50929550610ba2945050505050565b6000546001600160a01b031633146112285760405162461bcd60e51b8152600401610b6190613774565b602a8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112705760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b038116600090815260066020526040902054156112ca576001600160a01b0381166000908152600660205260409020546112b090610dcc565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b0316331461135a5760405162461bcd60e51b8152600401610b6190613774565b60005b82811015610d3b57600f600085858481811061137b5761137b6139e6565b9050602002016020810190611390919061339a565b6001600160a01b0316815260208101919091526040016000205460ff166114065781600960008686858181106113c8576113c86139e6565b90506020020160208101906113dd919061339a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b61140f8161399f565b905061135d565b6000546001600160a01b031633146114405760405162461bcd60e51b8152600401610b6190613774565b601d839055601e829055601f81905560208490556021546101f4906114739061146d878186818a8a6120f9565b906120f9565b1115610d3b5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b6001600160a01b0381166000908152600e602052604081205460ff16156114fa57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610ba290610dcc565b6000546001600160a01b031633146115465760405162461bcd60e51b8152600401610b6190613774565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610b6190613774565b60005b8181101561162a576001600c60008585858181106115dd576115dd6139e6565b90506020020160208101906115f2919061339a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116238161399f565b90506115bd565b505050565b6000546001600160a01b031633146116595760405162461bcd60e51b8152600401610b6190613774565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610dc8573d6000803e3d6000fd5b6000546001600160a01b031633146116b85760405162461bcd60e51b8152600401610b6190613774565b60005b8181101561162a576001600f60008585858181106116db576116db6139e6565b90506020020160208101906116f0919061339a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117218161399f565b90506116bb565b6000546001600160a01b031633146117525760405162461bcd60e51b8152600401610b6190613774565b8082601354611761919061392e565b61176b919061381e565b6028555050565b606060178054610ab490613964565b6000546001600160a01b031633146117ab5760405162461bcd60e51b8152600401610b6190613774565b6107d182106118135760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b61565b601254600090839061183090600160a01b900460ff16600a613883565b61183a908461392e565b611844919061392e565b905080611850866114bd565b101561189e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b61565b60005b8381101561190d576118fb868686848181106118bf576118bf6139e6565b90506020020160208101906118d4919061339a565b6012546118ec90600160a01b900460ff16600a613883565b6118f6908761392e565b61227c565b806119058161399f565b9150506118a1565b505050505050565b6000546001600160a01b0316331461193f5760405162461bcd60e51b8152600401610b6190613774565b6019849055601b839055601a829055601c8590556025859055602284905560248290556023839055602181905561197c8161146d848188886120f9565b6026819055601c546101f491611991916120f9565b11156119db5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b5050505050565b6000610b9e3384610c0285604051806060016040528060258152602001613a4b602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612772565b6000610b9e33848461227c565b6000546001600160a01b03163314611a685760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000546001600160a01b03163314611ab65760405162461bcd60e51b8152600401610b6190613774565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611b0e5760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611b595760405162461bcd60e51b8152600401610b6190613774565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9957600080fd5b505afa158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd191906133b7565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c1957600080fd5b505afa158015611c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5191906133b7565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906133b7565b90506001600160a01b038116611e7557816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d1857600080fd5b505afa158015611d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5091906133b7565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9857600080fd5b505afa158015611dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd091906133b7565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e1857600080fd5b505af1158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5091906133b7565b602a80546001600160a01b0319166001600160a01b0392909216919091179055611e91565b602a80546001600160a01b0319166001600160a01b0383161790555b50602980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611edf5760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6000546001600160a01b03163314611f2a5760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611f785760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b038116611fdd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b61565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612860565b60008261208957506000610ba2565b6000612095838561392e565b9050826120a2858361381e565b14610e495760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b61565b6000806121068385613806565b905083811015610e495760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b61565b6001600160a01b0383166121ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b61565b6001600160a01b03821661221b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b61565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122e05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b61565b6001600160a01b0382166123425760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b61565b600081116123a45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b61565b6001600160a01b03821660009081526009602052604090205460ff16156124055760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526009602052604090205460ff16156124665760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526011602052604090205460ff166124d657602a54600160a81b900460ff166124d65760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b61565b602a546000906001600160a01b03858116911614806125025750602a546001600160a01b038481169116145b801561254a57506001600160a01b0384166000908152600c602052604090205460ff168061254857506001600160a01b0383166000908152600c602052604090205460ff165b155b15612553575060015b6000600b541180156125a257506001600160a01b0383166000908152600d602052604090205460ff161580156125a257506001600160a01b03841660009081526011602052604090205460ff16155b15612616576018546125b3846114bd565b6125bd9084613806565b11156126165760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b61565b602654602755601c54602555602a54600160a81b900460ff1680156126485750602a546001600160a01b038481169116145b156126745761266a601f5461146d601e54601d546120f990919063ffffffff16565b6027556020546025555b6000600b54118015612694575043600a54600b546126929190613806565b115b156126bd576001600160a01b0383166000908152600960205260409020805460ff191660011790555b602a54600160b01b900460ff161561270057602a54600160a81b900460ff1680156126f55750602a546001600160a01b038581169116145b156127005760006027555b602a54600160a01b900460ff161580156127235750602a54600160a81b900460ff165b801561273c5750602a546001600160a01b038481169116145b1561276657600061274c306114bd565b9050602854811061276457506028546127648161288e565b505b610d3b848484846129ed565b600081848411156127965760405162461bcd60e51b8152600401610b61919061371f565b5060006127a3848661394d565b95945050505050565b60008060006127b9612b19565b90925090506127c88282612038565b9250505090565b60008060008060008060008060006127e68a612c9b565b92509250925060008060006128048d86866127ff6127ac565b612cdd565b919f909e50909c50959a5093985091965092945050505050565b6000610e4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612772565b600081836128815760405162461bcd60e51b8152600401610b61919061371f565b5060006127a3848661381e565b602a805460ff60a01b1916600160a01b1790556026546022546000916128c4916002916128be918290879061207a565b90612038565b905060006128d2838361281e565b90506128dd81612d2d565b60225447906000906128fd906128f4906002612038565b6026549061281e565b9050600061291f60026128be846128be6022548861207a90919063ffffffff16565b9050600061293c836128be6024548761207a90919063ffffffff16565b90506000612959846128be6023548861207a90919063ffffffff16565b90506000612976856128be6021548961207a90919063ffffffff16565b90504780156129c4576003546129969084906001600160a01b0316612ecf565b6004546129ad9083906001600160a01b0316612ecf565b6005546129c49085906001600160a01b0316612ecf565b88156129d4576129d48986612f05565b5050602a805460ff60a01b191690555050505050505050565b60255460275482612a0357600060258190556027555b6001600160a01b0386166000908152600e602052604090205460ff168015612a4457506001600160a01b0385166000908152600e602052604090205460ff16155b15612a5957612a54868686612fe2565b612b05565b6001600160a01b0386166000908152600e602052604090205460ff16158015612a9a57506001600160a01b0385166000908152600e602052604090205460ff165b15612aaa57612a54868686613108565b6001600160a01b0386166000908152600e602052604090205460ff168015612aea57506001600160a01b0385166000908152600e602052604090205460ff165b15612afa57612a548686866131b1565b612b05868686613224565b8261190d5760259190915560275550505050565b6014546013546000918291825b601054811015612c6b57826006600060108481548110612b4857612b486139e6565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612bb35750816007600060108481548110612b8c57612b8c6139e6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612bc957601454601354945094505050509091565b612c0f6006600060108481548110612be357612be36139e6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061281e565b9250612c576007600060108481548110612c2b57612c2b6139e6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061281e565b915080612c638161399f565b915050612b26565b50601354601454612c7b91612038565b821015612c92576014546013549350935050509091565b90939092509050565b600080600080612caa85613268565b90506000612cb786613285565b90506000612ccf82612cc9898661281e565b9061281e565b979296509094509092505050565b6000808080612cec888661207a565b90506000612cfa888761207a565b90506000612d08888861207a565b90506000612d1a82612cc9868661281e565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6257612d626139e6565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612db657600080fd5b505afa158015612dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dee91906133b7565b81600181518110612e0157612e016139e6565b6001600160a01b039283166020918202929092010152602954612e279130911684612158565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e609085906000908690309042906004016137ca565b600060405180830381600087803b158015612e7a57600080fd5b505af1158015612e8e573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612ec39291906137a9565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561162a573d6000803e3d6000fd5b602954612f1d9030906001600160a01b031684612158565b6029546001600160a01b031663f305d719823085600080612f466000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612fa957600080fd5b505af1158015612fbd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119db9190613640565b600080600080600080612ff4876127cf565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613026908861281e565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613055908761281e565b6001600160a01b03808b1660009081526006602052604080822093909355908a168152205461308490866120f9565b6001600160a01b0389166000908152600660205260409020556130a6816132a2565b6130b0848361332a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130f591815260200190565b60405180910390a3505050505050505050565b60008060008060008061311a876127cf565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061314c908761281e565b6001600160a01b03808b16600090815260066020908152604080832094909455918b1681526007909152205461318290846120f9565b6001600160a01b03891660009081526007602090815260408083209390935560069052205461308490866120f9565b6000806000806000806131c3876127cf565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506131f5908861281e565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461314c908761281e565b600080600080600080613236876127cf565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613055908761281e565b6000610ba26103e86128be6025548561207a90919063ffffffff16565b6000610ba26103e86128be6027548561207a90919063ffffffff16565b60006132ac6127ac565b905060006132ba838361207a565b306000908152600660205260409020549091506132d790826120f9565b30600090815260066020908152604080832093909355600e9052205460ff161561162a573060009081526007602052604090205461331590846120f9565b30600090815260076020526040902055505050565b601454613337908361281e565b60145560155461334790826120f9565b6015555050565b60008083601f84011261336057600080fd5b50813567ffffffffffffffff81111561337857600080fd5b6020830191508360208260051b850101111561339357600080fd5b9250929050565b6000602082840312156133ac57600080fd5b8135610e49816139fc565b6000602082840312156133c957600080fd5b8151610e49816139fc565b600080604083850312156133e757600080fd5b82356133f2816139fc565b91506020830135613402816139fc565b809150509250929050565b60008060006060848603121561342257600080fd5b833561342d816139fc565b9250602084013561343d816139fc565b929592945050506040919091013590565b6000806000806060858703121561346457600080fd5b843561346f816139fc565b9350602085013567ffffffffffffffff81111561348b57600080fd5b6134978782880161334e565b9598909750949560400135949350505050565b600080604083850312156134bd57600080fd5b82356134c8816139fc565b946020939093013593505050565b600080602083850312156134e957600080fd5b823567ffffffffffffffff81111561350057600080fd5b61350c8582860161334e565b90969095509350505050565b60008060006040848603121561352d57600080fd5b833567ffffffffffffffff81111561354457600080fd5b6135508682870161334e565b909450925050602084013561356481613a14565b809150509250925092565b60006020828403121561358157600080fd5b8135610e4981613a14565b60006020828403121561359e57600080fd5b8151610e4981613a14565b600080604083850312156135bc57600080fd5b82356134c881613a14565b6000602082840312156135d957600080fd5b5035919050565b6000602082840312156135f257600080fd5b5051919050565b6000806040838503121561360c57600080fd5b82359150602083013561340281613a14565b6000806040838503121561363157600080fd5b50508035926020909101359150565b60008060006060848603121561365557600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561368457600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156136b857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600081518084526020808501945080840160005b838110156137145781516001600160a01b0316875295820195908201906001016136ef565b509495945050505050565b600060208083528351808285015260005b8181101561374c57858101830151858201604001528201613730565b8181111561375e576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006137c260408301846136db565b949350505050565b85815284602082015260a0604082015260006137e960a08301866136db565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613819576138196139ba565b500190565b60008261383b57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561387b578160001904821115613861576138616139ba565b8085161561386e57918102915b93841c9390800290613845565b509250929050565b6000610e4960ff84168360008261389c57506001610ba2565b816138a957506000610ba2565b81600181146138bf57600281146138c9576138e5565b6001915050610ba2565b60ff8411156138da576138da6139ba565b50506001821b610ba2565b5060208310610133831016604e8410600b8410161715613908575081810a610ba2565b6139128383613840565b8060001904821115613926576139266139ba565b029392505050565b6000816000190483118215151615613948576139486139ba565b500290565b60008282101561395f5761395f6139ba565b500390565b600181811c9082168061397857607f821691505b6020821081141561399957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156139b3576139b36139ba565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114613a1157600080fd5b50565b8015158114613a1157600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a3e73d89f3ab2ec9e49ca983b0f2af1436c178ea3640c1b7cee737b352b8d09764736f6c63430008070033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c806371b9189c116101d1578063b6a5d7de11610102578063dd62ed3e116100a0578063f259c57b1161006f578063f259c57b14610a2e578063f2fde38b14610a4e578063fabb0b4f14610a6e578063ffb54a9914610a8457600080fd5b8063dd62ed3e14610988578063ea2f0b37146109ce578063eafb5a3c146109ee578063f0b37c0414610a0e57600080fd5b8063c8607952116100dc578063c860795214610926578063c9cf77891461093c578063d3f6a15714610952578063dc44b6a01461097257600080fd5b8063b6a5d7de146108da578063bf56b371146108fa578063c5d241891461091057600080fd5b80638da5cb5b1161016f578063a1ac727f11610149578063a1ac727f1461085a578063a3b84b6b1461087a578063a457c2d71461089a578063a9059cbb146108ba57600080fd5b80638da5cb5b146108075780638f4590d21461082557806395d89b411461084557600080fd5b806378109e54116101ab57806378109e541461078257806384530c461461079857806388790a68146107b857806388f82020146107ce57600080fd5b806371b9189c1461072c578063743942b61461074c5780637598f8bc1461076c57600080fd5b8063313ce567116102ab5780634b01547f11610249578063620158521161022357806362015852146106c15780636ce37fa0146106d757806370a08231146106f7578063715018a61461071757600080fd5b80634b01547f1461066157806352390c02146106815780635d54c0af146106a157600080fd5b80633bd5d173116102855780633bd5d173146105eb578063401aa5c01461060b5780634549b0391461062157806349bd5a5e1461064157600080fd5b8063313ce5671461057f5780633685d419146105ab57806339509351146105cb57600080fd5b806318160ddd116103185780632691bc80116102f25780632691bc80146104fe5780632d4103d61461051f5780632d8381191461053f5780632dd5efe71461055f57600080fd5b806318160ddd146104a957806323b872dd146104be57806325b86edf146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60285481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610aa5565b6040516103a6919061371f565b3480156103dd57600080fd5b506103f16103ec3660046135c7565b610b37565b005b3480156103ff57600080fd5b5061041361040e3660046134aa565b610b91565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e36600461339a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060155461039c565b34801561047d57600080fd5b50602954610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060135461039c565b3480156104ca57600080fd5b506104136104d936600461340d565b610ba8565b3480156104ea57600080fd5b506103f16104f93660046133d4565b610c11565b34801561050a57600080fd5b50602a5461041390600160b01b900460ff1681565b34801561052b57600080fd5b506103f161053a3660046135a9565b610d41565b34801561054b57600080fd5b5061039c61055a3660046135c7565b610dcc565b34801561056b57600080fd5b506103f161057a36600461339a565b610e50565b34801561058b57600080fd5b50601254600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105b757600080fd5b506103f16105c636600461339a565b610e9e565b3480156105d757600080fd5b506104136105e63660046134aa565b611051565b3480156105f757600080fd5b506103f16106063660046135c7565b611087565b34801561061757600080fd5b5061039c601c5481565b34801561062d57600080fd5b5061039c61063c3660046135f9565b611171565b34801561064d57600080fd5b50602a54610491906001600160a01b031681565b34801561066d57600080fd5b506103f161067c36600461356f565b6111fe565b34801561068d57600080fd5b506103f161069c36600461339a565b611246565b3480156106ad57600080fd5b506103f16106bc366004613518565b611330565b3480156106cd57600080fd5b5061039c601a5481565b3480156106e357600080fd5b506103f16106f236600461366e565b611416565b34801561070357600080fd5b5061039c61071236600461339a565b6114bd565b34801561072357600080fd5b506103f161151c565b34801561073857600080fd5b506103f16107473660046134d6565b611590565b34801561075857600080fd5b506103f161076736600461339a565b61162f565b34801561077857600080fd5b5061039c60205481565b34801561078e57600080fd5b5061039c60185481565b3480156107a457600080fd5b506103f16107b33660046134d6565b61168e565b3480156107c457600080fd5b5061039c601d5481565b3480156107da57600080fd5b506104136107e936600461339a565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561081357600080fd5b506000546001600160a01b0316610491565b34801561083157600080fd5b506103f161084036600461361e565b611728565b34801561085157600080fd5b506103c4611772565b34801561086657600080fd5b506103f161087536600461344e565b611781565b34801561088657600080fd5b506103f16108953660046136a0565b611915565b3480156108a657600080fd5b506104136108b53660046134aa565b6119e2565b3480156108c657600080fd5b506104136108d53660046134aa565b611a31565b3480156108e657600080fd5b506103f16108f536600461339a565b611a3e565b34801561090657600080fd5b5061039c600b5481565b34801561091c57600080fd5b5061039c601b5481565b34801561093257600080fd5b5061039c601e5481565b34801561094857600080fd5b5061039c601f5481565b34801561095e57600080fd5b506103f161096d3660046133d4565b611a8c565b34801561097e57600080fd5b5061039c60195481565b34801561099457600080fd5b5061039c6109a33660046133d4565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109da57600080fd5b506103f16109e936600461339a565b611ae4565b3480156109fa57600080fd5b506103f1610a0936600461339a565b611b2f565b348015610a1a57600080fd5b506103f1610a2936600461339a565b611eb5565b348015610a3a57600080fd5b506103f1610a4936600461339a565b611f00565b348015610a5a57600080fd5b506103f1610a6936600461339a565b611f4e565b348015610a7a57600080fd5b5061039c600a5481565b348015610a9057600080fd5b50602a5461041390600160a81b900460ff1681565b606060168054610ab490613964565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613964565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b8152600401610b6190613774565b60405180910390fd5b610b8b81610b856103e860135461203890919063ffffffff16565b9061207a565b60185550565b6000610b9e338484612158565b5060015b92915050565b6000610bb584848461227c565b610c078433610c0285604051806060016040528060288152602001613a23602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612772565b612158565b5060019392505050565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b8152600401610b6190613774565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb591906135e0565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d0357600080fd5b505af1158015610d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3b919061358c565b50505050565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b8152600401610b6190613774565b602a805460ff60a81b1916600160a81b84151502179055610d8b30611246565b602a54610da0906001600160a01b0316611246565b602a54600160a81b900460ff168015610db95750600b54155b15610dc85743600b55600a8190555b5050565b6000601454821115610e335760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b61565b6000610e3d6127ac565b9050610e498382612038565b9392505050565b6000546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314610ec85760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b0381166000908152600e602052604090205460ff16610f305760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b61565b60005b601054811015610dc857816001600160a01b031660108281548110610f5a57610f5a6139e6565b6000918252602090912001546001600160a01b0316141561103f5760108054610f859060019061394d565b81548110610f9557610f956139e6565b600091825260209091200154601080546001600160a01b039092169183908110610fc157610fc16139e6565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff191690556010805480611019576110196139d0565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110498161399f565b915050610f33565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b9e918590610c0290866120f9565b336000818152600e602052604090205460ff16156110fc5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b61565b6000611107836127cf565b505050506001600160a01b0384166000908152600660205260409020549192506111339190508261281e565b6001600160a01b038316600090815260066020526040902055601454611159908261281e565b60145560155461116990846120f9565b601555505050565b60006013548311156111c55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b61565b816111e45760006111d5846127cf565b50939550610ba2945050505050565b60006111ef846127cf565b50929550610ba2945050505050565b6000546001600160a01b031633146112285760405162461bcd60e51b8152600401610b6190613774565b602a8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112705760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b038116600090815260066020526040902054156112ca576001600160a01b0381166000908152600660205260409020546112b090610dcc565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b0316331461135a5760405162461bcd60e51b8152600401610b6190613774565b60005b82811015610d3b57600f600085858481811061137b5761137b6139e6565b9050602002016020810190611390919061339a565b6001600160a01b0316815260208101919091526040016000205460ff166114065781600960008686858181106113c8576113c86139e6565b90506020020160208101906113dd919061339a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b61140f8161399f565b905061135d565b6000546001600160a01b031633146114405760405162461bcd60e51b8152600401610b6190613774565b601d839055601e829055601f81905560208490556021546101f4906114739061146d878186818a8a6120f9565b906120f9565b1115610d3b5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b6001600160a01b0381166000908152600e602052604081205460ff16156114fa57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610ba290610dcc565b6000546001600160a01b031633146115465760405162461bcd60e51b8152600401610b6190613774565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610b6190613774565b60005b8181101561162a576001600c60008585858181106115dd576115dd6139e6565b90506020020160208101906115f2919061339a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116238161399f565b90506115bd565b505050565b6000546001600160a01b031633146116595760405162461bcd60e51b8152600401610b6190613774565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610dc8573d6000803e3d6000fd5b6000546001600160a01b031633146116b85760405162461bcd60e51b8152600401610b6190613774565b60005b8181101561162a576001600f60008585858181106116db576116db6139e6565b90506020020160208101906116f0919061339a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117218161399f565b90506116bb565b6000546001600160a01b031633146117525760405162461bcd60e51b8152600401610b6190613774565b8082601354611761919061392e565b61176b919061381e565b6028555050565b606060178054610ab490613964565b6000546001600160a01b031633146117ab5760405162461bcd60e51b8152600401610b6190613774565b6107d182106118135760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b61565b601254600090839061183090600160a01b900460ff16600a613883565b61183a908461392e565b611844919061392e565b905080611850866114bd565b101561189e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b61565b60005b8381101561190d576118fb868686848181106118bf576118bf6139e6565b90506020020160208101906118d4919061339a565b6012546118ec90600160a01b900460ff16600a613883565b6118f6908761392e565b61227c565b806119058161399f565b9150506118a1565b505050505050565b6000546001600160a01b0316331461193f5760405162461bcd60e51b8152600401610b6190613774565b6019849055601b839055601a829055601c8590556025859055602284905560248290556023839055602181905561197c8161146d848188886120f9565b6026819055601c546101f491611991916120f9565b11156119db5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b5050505050565b6000610b9e3384610c0285604051806060016040528060258152602001613a4b602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612772565b6000610b9e33848461227c565b6000546001600160a01b03163314611a685760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000546001600160a01b03163314611ab65760405162461bcd60e51b8152600401610b6190613774565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611b0e5760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611b595760405162461bcd60e51b8152600401610b6190613774565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9957600080fd5b505afa158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd191906133b7565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c1957600080fd5b505afa158015611c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5191906133b7565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906133b7565b90506001600160a01b038116611e7557816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d1857600080fd5b505afa158015611d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5091906133b7565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9857600080fd5b505afa158015611dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd091906133b7565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e1857600080fd5b505af1158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5091906133b7565b602a80546001600160a01b0319166001600160a01b0392909216919091179055611e91565b602a80546001600160a01b0319166001600160a01b0383161790555b50602980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611edf5760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6000546001600160a01b03163314611f2a5760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611f785760405162461bcd60e51b8152600401610b6190613774565b6001600160a01b038116611fdd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b61565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612860565b60008261208957506000610ba2565b6000612095838561392e565b9050826120a2858361381e565b14610e495760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b61565b6000806121068385613806565b905083811015610e495760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b61565b6001600160a01b0383166121ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b61565b6001600160a01b03821661221b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b61565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122e05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b61565b6001600160a01b0382166123425760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b61565b600081116123a45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b61565b6001600160a01b03821660009081526009602052604090205460ff16156124055760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526009602052604090205460ff16156124665760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526011602052604090205460ff166124d657602a54600160a81b900460ff166124d65760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b61565b602a546000906001600160a01b03858116911614806125025750602a546001600160a01b038481169116145b801561254a57506001600160a01b0384166000908152600c602052604090205460ff168061254857506001600160a01b0383166000908152600c602052604090205460ff165b155b15612553575060015b6000600b541180156125a257506001600160a01b0383166000908152600d602052604090205460ff161580156125a257506001600160a01b03841660009081526011602052604090205460ff16155b15612616576018546125b3846114bd565b6125bd9084613806565b11156126165760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b61565b602654602755601c54602555602a54600160a81b900460ff1680156126485750602a546001600160a01b038481169116145b156126745761266a601f5461146d601e54601d546120f990919063ffffffff16565b6027556020546025555b6000600b54118015612694575043600a54600b546126929190613806565b115b156126bd576001600160a01b0383166000908152600960205260409020805460ff191660011790555b602a54600160b01b900460ff161561270057602a54600160a81b900460ff1680156126f55750602a546001600160a01b038581169116145b156127005760006027555b602a54600160a01b900460ff161580156127235750602a54600160a81b900460ff165b801561273c5750602a546001600160a01b038481169116145b1561276657600061274c306114bd565b9050602854811061276457506028546127648161288e565b505b610d3b848484846129ed565b600081848411156127965760405162461bcd60e51b8152600401610b61919061371f565b5060006127a3848661394d565b95945050505050565b60008060006127b9612b19565b90925090506127c88282612038565b9250505090565b60008060008060008060008060006127e68a612c9b565b92509250925060008060006128048d86866127ff6127ac565b612cdd565b919f909e50909c50959a5093985091965092945050505050565b6000610e4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612772565b600081836128815760405162461bcd60e51b8152600401610b61919061371f565b5060006127a3848661381e565b602a805460ff60a01b1916600160a01b1790556026546022546000916128c4916002916128be918290879061207a565b90612038565b905060006128d2838361281e565b90506128dd81612d2d565b60225447906000906128fd906128f4906002612038565b6026549061281e565b9050600061291f60026128be846128be6022548861207a90919063ffffffff16565b9050600061293c836128be6024548761207a90919063ffffffff16565b90506000612959846128be6023548861207a90919063ffffffff16565b90506000612976856128be6021548961207a90919063ffffffff16565b90504780156129c4576003546129969084906001600160a01b0316612ecf565b6004546129ad9083906001600160a01b0316612ecf565b6005546129c49085906001600160a01b0316612ecf565b88156129d4576129d48986612f05565b5050602a805460ff60a01b191690555050505050505050565b60255460275482612a0357600060258190556027555b6001600160a01b0386166000908152600e602052604090205460ff168015612a4457506001600160a01b0385166000908152600e602052604090205460ff16155b15612a5957612a54868686612fe2565b612b05565b6001600160a01b0386166000908152600e602052604090205460ff16158015612a9a57506001600160a01b0385166000908152600e602052604090205460ff165b15612aaa57612a54868686613108565b6001600160a01b0386166000908152600e602052604090205460ff168015612aea57506001600160a01b0385166000908152600e602052604090205460ff165b15612afa57612a548686866131b1565b612b05868686613224565b8261190d5760259190915560275550505050565b6014546013546000918291825b601054811015612c6b57826006600060108481548110612b4857612b486139e6565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612bb35750816007600060108481548110612b8c57612b8c6139e6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612bc957601454601354945094505050509091565b612c0f6006600060108481548110612be357612be36139e6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061281e565b9250612c576007600060108481548110612c2b57612c2b6139e6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061281e565b915080612c638161399f565b915050612b26565b50601354601454612c7b91612038565b821015612c92576014546013549350935050509091565b90939092509050565b600080600080612caa85613268565b90506000612cb786613285565b90506000612ccf82612cc9898661281e565b9061281e565b979296509094509092505050565b6000808080612cec888661207a565b90506000612cfa888761207a565b90506000612d08888861207a565b90506000612d1a82612cc9868661281e565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6257612d626139e6565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612db657600080fd5b505afa158015612dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dee91906133b7565b81600181518110612e0157612e016139e6565b6001600160a01b039283166020918202929092010152602954612e279130911684612158565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e609085906000908690309042906004016137ca565b600060405180830381600087803b158015612e7a57600080fd5b505af1158015612e8e573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612ec39291906137a9565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561162a573d6000803e3d6000fd5b602954612f1d9030906001600160a01b031684612158565b6029546001600160a01b031663f305d719823085600080612f466000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612fa957600080fd5b505af1158015612fbd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119db9190613640565b600080600080600080612ff4876127cf565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613026908861281e565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613055908761281e565b6001600160a01b03808b1660009081526006602052604080822093909355908a168152205461308490866120f9565b6001600160a01b0389166000908152600660205260409020556130a6816132a2565b6130b0848361332a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130f591815260200190565b60405180910390a3505050505050505050565b60008060008060008061311a876127cf565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061314c908761281e565b6001600160a01b03808b16600090815260066020908152604080832094909455918b1681526007909152205461318290846120f9565b6001600160a01b03891660009081526007602090815260408083209390935560069052205461308490866120f9565b6000806000806000806131c3876127cf565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506131f5908861281e565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461314c908761281e565b600080600080600080613236876127cf565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613055908761281e565b6000610ba26103e86128be6025548561207a90919063ffffffff16565b6000610ba26103e86128be6027548561207a90919063ffffffff16565b60006132ac6127ac565b905060006132ba838361207a565b306000908152600660205260409020549091506132d790826120f9565b30600090815260066020908152604080832093909355600e9052205460ff161561162a573060009081526007602052604090205461331590846120f9565b30600090815260076020526040902055505050565b601454613337908361281e565b60145560155461334790826120f9565b6015555050565b60008083601f84011261336057600080fd5b50813567ffffffffffffffff81111561337857600080fd5b6020830191508360208260051b850101111561339357600080fd5b9250929050565b6000602082840312156133ac57600080fd5b8135610e49816139fc565b6000602082840312156133c957600080fd5b8151610e49816139fc565b600080604083850312156133e757600080fd5b82356133f2816139fc565b91506020830135613402816139fc565b809150509250929050565b60008060006060848603121561342257600080fd5b833561342d816139fc565b9250602084013561343d816139fc565b929592945050506040919091013590565b6000806000806060858703121561346457600080fd5b843561346f816139fc565b9350602085013567ffffffffffffffff81111561348b57600080fd5b6134978782880161334e565b9598909750949560400135949350505050565b600080604083850312156134bd57600080fd5b82356134c8816139fc565b946020939093013593505050565b600080602083850312156134e957600080fd5b823567ffffffffffffffff81111561350057600080fd5b61350c8582860161334e565b90969095509350505050565b60008060006040848603121561352d57600080fd5b833567ffffffffffffffff81111561354457600080fd5b6135508682870161334e565b909450925050602084013561356481613a14565b809150509250925092565b60006020828403121561358157600080fd5b8135610e4981613a14565b60006020828403121561359e57600080fd5b8151610e4981613a14565b600080604083850312156135bc57600080fd5b82356134c881613a14565b6000602082840312156135d957600080fd5b5035919050565b6000602082840312156135f257600080fd5b5051919050565b6000806040838503121561360c57600080fd5b82359150602083013561340281613a14565b6000806040838503121561363157600080fd5b50508035926020909101359150565b60008060006060848603121561365557600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561368457600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156136b857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600081518084526020808501945080840160005b838110156137145781516001600160a01b0316875295820195908201906001016136ef565b509495945050505050565b600060208083528351808285015260005b8181101561374c57858101830151858201604001528201613730565b8181111561375e576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006137c260408301846136db565b949350505050565b85815284602082015260a0604082015260006137e960a08301866136db565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613819576138196139ba565b500190565b60008261383b57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561387b578160001904821115613861576138616139ba565b8085161561386e57918102915b93841c9390800290613845565b509250929050565b6000610e4960ff84168360008261389c57506001610ba2565b816138a957506000610ba2565b81600181146138bf57600281146138c9576138e5565b6001915050610ba2565b60ff8411156138da576138da6139ba565b50506001821b610ba2565b5060208310610133831016604e8410600b8410161715613908575081810a610ba2565b6139128383613840565b8060001904821115613926576139266139ba565b029392505050565b6000816000190483118215151615613948576139486139ba565b500290565b60008282101561395f5761395f6139ba565b500390565b600181811c9082168061397857607f821691505b6020821081141561399957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156139b3576139b36139ba565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114613a1157600080fd5b50565b8015158114613a1157600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a3e73d89f3ab2ec9e49ca983b0f2af1436c178ea3640c1b7cee737b352b8d09764736f6c63430008070033

Deployed Bytecode Sourcemap

14467:24297:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16991:56;;;;;;;;;;;;;;;;;;;17673:25:1;;;17661:2;17646:18;16991:56:0;;;;;;;;19389:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36324:175::-;;;;;;;;;;-1:-1:-1;36324:175:0;;;;;:::i;:::-;;:::i;:::-;;20301:161;;;;;;;;;;-1:-1:-1;20301:161:0;;;;;:::i;:::-;;:::i;:::-;;;9342:14:1;;9335:22;9317:41;;9305:2;9290:18;20301:161:0;9177:187:1;35395:106:0;;;;;;;;;;-1:-1:-1;35395:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;35475:18:0;35451:4;35475:18;;;:9;:18;;;;;;;;;35395:106;21422:87;;;;;;;;;;-1:-1:-1;21491:10:0;;21422:87;;17067:41;;;;;;;;;;-1:-1:-1;17067:41:0;;;;-1:-1:-1;;;;;17067:41:0;;;;;;-1:-1:-1;;;;;7933:32:1;;;7915:51;;7903:2;7888:18;17067:41:0;7769:203:1;19666:95:0;;;;;;;;;;-1:-1:-1;19746:7:0;;19666:95;;20470:313;;;;;;;;;;-1:-1:-1;20470:313:0;;;;;:::i;:::-;;:::i;36139:177::-;;;;;;;;;;-1:-1:-1;36139:177:0;;;;;:::i;:::-;;:::i;17218:34::-;;;;;;;;;;-1:-1:-1;17218:34:0;;;;-1:-1:-1;;;17218:34:0;;;;;;18393:337;;;;;;;;;;-1:-1:-1;18393:337:0;;;;;:::i;:::-;;:::i;22354:253::-;;;;;;;;;;-1:-1:-1;22354:253:0;;;;;:::i;:::-;;:::i;36507:113::-;;;;;;;;;;-1:-1:-1;36507:113:0;;;;;:::i;:::-;;:::i;19575:83::-;;;;;;;;;;-1:-1:-1;19641:9:0;;-1:-1:-1;;;19641:9:0;;;;19575:83;;18805:4:1;18793:17;;;18775:36;;18763:2;18748:18;19575:83:0;18633:184:1;22886:479:0;;;;;;;;;;-1:-1:-1;22886:479:0;;;;;:::i;:::-;;:::i;20791:218::-;;;;;;;;;;-1:-1:-1;20791:218:0;;;;;:::i;:::-;;:::i;21521:377::-;;;;;;;;;;-1:-1:-1;21521:377:0;;;;;:::i;:::-;;:::i;16238:36::-;;;;;;;;;;;;;;;;21910:436;;;;;;;;;;-1:-1:-1;21910:436:0;;;;;:::i;:::-;;:::i;17115:28::-;;;;;;;;;;-1:-1:-1;17115:28:0;;;;-1:-1:-1;;;;;17115:28:0;;;18744:102;;;;;;;;;;-1:-1:-1;18744:102:0;;;;;:::i;:::-;;:::i;22615:263::-;;;;;;;;;;-1:-1:-1;22615:263:0;;;;;:::i;:::-;;:::i;35513:267::-;;;;;;;;;;-1:-1:-1;35513:267:0;;;;;:::i;:::-;;:::i;16145:29::-;;;;;;;;;;;;;;;;38215:454;;;;;;;;;;-1:-1:-1;38215:454:0;;;;;:::i;:::-;;:::i;19769:198::-;;;;;;;;;;-1:-1:-1;19769:198:0;;;;;:::i;:::-;;:::i;6098:148::-;;;;;;;;;;;;;:::i;34719:198::-;;;;;;;;;;-1:-1:-1;34719:198:0;;;;;:::i;:::-;;:::i;35996:135::-;;;;;;;;;;-1:-1:-1;35996:135:0;;;;;:::i;:::-;;:::i;16432:37::-;;;;;;;;;;;;;;;;16027:56;;;;;;;;;;;;;;;;35792:188;;;;;;;;;;-1:-1:-1;35792:188:0;;;;;:::i;:::-;;:::i;16290:37::-;;;;;;;;;;;;;;;;21294:120;;;;;;;;;;-1:-1:-1;21294:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21386:20:0;21362:4;21386:20;;;:11;:20;;;;;;;;;21294:120;5873:79;;;;;;;;;;-1:-1:-1;5911:7:0;5938:6;-1:-1:-1;;;;;5938:6:0;5873:79;;36628:178;;;;;;;;;;-1:-1:-1;36628:178:0;;;;;:::i;:::-;;:::i;19480:87::-;;;;;;;;;;;;;:::i;36814:496::-;;;;;;;;;;-1:-1:-1;36814:496:0;;;;;:::i;:::-;;:::i;37318:681::-;;;;;;;;;;-1:-1:-1;37318:681:0;;;;;:::i;:::-;;:::i;21017:269::-;;;;;;;;;;-1:-1:-1;21017:269:0;;;;;:::i;:::-;;:::i;19975:167::-;;;;;;;;;;-1:-1:-1;19975:167:0;;;;;:::i;:::-;;:::i;38008:94::-;;;;;;;;;;-1:-1:-1;38008:94:0;;;;;:::i;:::-;;:::i;15211:29::-;;;;;;;;;;;;;;;;16189:35;;;;;;;;;;;;;;;;16339:36;;;;;;;;;;;;;;;;16388:30;;;;;;;;;;;;;;;;35057:190;;;;;;;;;;-1:-1:-1;35057:190:0;;;;;:::i;:::-;;:::i;16097:36::-;;;;;;;;;;;;;;;;20150:143;;;;;;;;;;-1:-1:-1;20150:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20258:18:0;;;20231:7;20258:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20150:143;34935:110;;;;;;;;;;-1:-1:-1;34935:110:0;;;;;:::i;:::-;;:::i;18858:523::-;;;;;;;;;;-1:-1:-1;18858:523:0;;;;;:::i;:::-;;:::i;38110:97::-;;;;;;;;;;-1:-1:-1;38110:97:0;;;;;:::i;:::-;;:::i;34599:112::-;;;;;;;;;;-1:-1:-1;34599:112:0;;;;;:::i;:::-;;:::i;6254:244::-;;;;;;;;;;-1:-1:-1;6254:244:0;;;;;:::i;:::-;;:::i;15175:29::-;;;;;;;;;;;;;;;;17180:31;;;;;;;;;;-1:-1:-1;17180:31:0;;;;-1:-1:-1;;;17180:31:0;;;;;;19389:83;19426:13;19459:5;19452:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19389:83;:::o;36324:175::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;;;;;;;;;36445:46:::1;36467:23;36445:17;36457:4;36445:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;36427:15;:64:::0;-1:-1:-1;36324:175:0:o;20301:161::-;20376:4;20393:39;257:10;20416:7;20425:6;20393:8;:39::i;:::-;-1:-1:-1;20450:4:0;20301:161;;;;;:::o;20470:313::-;20568:4;20585:36;20595:6;20603:9;20614:6;20585:9;:36::i;:::-;20632:121;20641:6;257:10;20663:89;20701:6;20663:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20663:19:0;;;;;;:11;:19;;;;;;;;257:10;20663:33;;;;;;;;;;:37;:89::i;:::-;20632:8;:121::i;:::-;-1:-1:-1;20771:4:0;20470:313;;;;;:::o;36139:177::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;36240:30:::1;::::0;-1:-1:-1;;;36240:30:0;;36264:4:::1;36240:30;::::0;::::1;7915:51:1::0;36222:15:0::1;::::0;-1:-1:-1;;;;;36240:15:0;::::1;::::0;::::1;::::0;7888:18:1;;36240:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36281:27;::::0;-1:-1:-1;;;36281:27:0;;-1:-1:-1;;;;;8478:32:1;;;36281:27:0::1;::::0;::::1;8460:51:1::0;8527:18;;;8520:34;;;36222:48:0;;-1:-1:-1;36281:14:0;;::::1;::::0;::::1;::::0;8433:18:1;;36281:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36211:105;36139:177:::0;;:::o;18393:337::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;18480:11:::1;:21:::0;;-1:-1:-1;;;;18480:21:0::1;-1:-1:-1::0;;;18480:21:0;::::1;;;;::::0;;18512:32:::1;18538:4;18512:17;:32::i;:::-;18573:13;::::0;18555:32:::1;::::0;-1:-1:-1;;;;;18573:13:0::1;18555:17;:32::i;:::-;18601:11;::::0;-1:-1:-1;;;18601:11:0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;18616:10:0::1;::::0;:15;18601:30:::1;18598:125;;;18660:12;18647:10;:25:::0;18687:10:::1;:24:::0;;;18598:125:::1;18393:337:::0;;:::o;22354:253::-;22420:7;22459;;22448;:18;;22440:73;;;;-1:-1:-1;;;22440:73:0;;10812:2:1;22440:73:0;;;10794:21:1;10851:2;10831:18;;;10824:30;10890:34;10870:18;;;10863:62;-1:-1:-1;;;10941:18:1;;;10934:40;10991:19;;22440:73:0;10610:406:1;22440:73:0;22524:19;22547:10;:8;:10::i;:::-;22524:33;-1:-1:-1;22575:24:0;:7;22524:33;22575:11;:24::i;:::-;22568:31;22354:253;-1:-1:-1;;;22354:253:0:o;36507:113::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36580:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;36580:32:0::1;36608:4;36580:32;::::0;;36507:113::o;22886:479::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22968:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22960:60;;;::::0;-1:-1:-1;;;22960:60:0;;12389:2:1;22960:60:0::1;::::0;::::1;12371:21:1::0;12428:2;12408:18;;;12401:30;12467:29;12447:18;;;12440:57;12514:18;;22960:60:0::1;12187:351:1::0;22960:60:0::1;23036:9;23031:327;23055:9;:16:::0;23051:20;::::1;23031:327;;;23113:7;-1:-1:-1::0;;;;;23097:23:0::1;:9;23107:1;23097:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23097:12:0::1;:23;23093:254;;;23156:9;23166:16:::0;;:20:::1;::::0;23185:1:::1;::::0;23166:20:::1;:::i;:::-;23156:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23141:9:::1;:12:::0;;-1:-1:-1;;;;;23156:31:0;;::::1;::::0;23151:1;;23141:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23141:46:0::1;-1:-1:-1::0;;;;;23141:46:0;;::::1;;::::0;;23206:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23245:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23245:28:0::1;::::0;;23292:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23292:15:0;;;;;-1:-1:-1;;;;;;23292:15:0::1;::::0;;;;;18393:337;;:::o;23093:254::-:1;23073:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23031:327;;20791:218:::0;257:10;20879:4;20928:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20928:34:0;;;;;;;;;;20879:4;;20896:83;;20919:7;;20928:50;;20967:10;20928:38;:50::i;21521:377::-;257:10;21573:14;21622:19;;;:11;:19;;;;;;;;21621:20;21613:77;;;;-1:-1:-1;;;21613:77:0;;17316:2:1;21613:77:0;;;17298:21:1;17355:2;17335:18;;;17328:30;17394:34;17374:18;;;17367:62;-1:-1:-1;;;17445:18:1;;;17438:42;17497:19;;21613:77:0;17114:408:1;21613:77:0;21702:15;21726:19;21737:7;21726:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21774:15:0;;;;;;:7;:15;;;;;;21701:44;;-1:-1:-1;21774:28:0;;:15;-1:-1:-1;21701:44:0;21774:19;:28::i;:::-;-1:-1:-1;;;;;21756:15:0;;;;;;:7;:15;;;;;:46;21823:7;;:20;;21835:7;21823:11;:20::i;:::-;21813:7;:30;21867:10;;:23;;21882:7;21867:14;:23::i;:::-;21854:10;:36;-1:-1:-1;;;21521:377:0:o;21910:436::-;22000:7;22039;;22028;:18;;22020:62;;;;-1:-1:-1;;;22020:62:0;;13805:2:1;22020:62:0;;;13787:21:1;13844:2;13824:18;;;13817:30;13883:33;13863:18;;;13856:61;13934:18;;22020:62:0;13603:355:1;22020:62:0;22098:17;22093:246;;22133:15;22157:19;22168:7;22157:10;:19::i;:::-;-1:-1:-1;22132:44:0;;-1:-1:-1;22191:14:0;;-1:-1:-1;;;;;22191:14:0;22093:246;22240:23;22271:19;22282:7;22271:10;:19::i;:::-;-1:-1:-1;22238:52:0;;-1:-1:-1;22305:22:0;;-1:-1:-1;;;;;22305:22:0;18744:102;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;18816:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;18816:22:0::1;-1:-1:-1::0;;;;18816:22:0;;::::1;::::0;;;::::1;::::0;;18744:102::o;22615:263::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22694:16:0;::::1;22713:1;22694:16:::0;;;:7:::1;:16;::::0;;;;;:20;22691:108:::1;;-1:-1:-1::0;;;;;22770:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22750:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22731:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22691:108:::1;-1:-1:-1::0;;;;;22809:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22809:27:0::1;22832:4;22809:27:::0;;::::1;::::0;;;22847:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22847:23:0::1;::::0;;::::1;::::0;;22615:263::o;35513:267::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;35613:9:::1;35608:165;35624:20:::0;;::::1;35608:165;;;35670:10;:24;35681:9;;35691:1;35681:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35670:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35670:24:0;;::::1;;35666:96;;35740:6;35714:9;:23;35724:9;;35734:1;35724:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35714:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35714:23:0;:32;;-1:-1:-1;;35714:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35666:96:::1;35646:3;::::0;::::1;:::i;:::-;;;35608:165;;38215:454:::0;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;38352:17:::1;:33:::0;;;38396:17:::1;:33:::0;;;38440:11:::1;:21:::0;;;38472:18:::1;:34:::0;;;38611:12:::1;::::0;38628:3:::1;::::0;38525:99:::1;::::0;:81:::1;38492:14:::0;38525:81;38454:7;38525:81;38372:13;38416;38525:21:::1;:40::i;:::-;:44:::0;::::1;:57::i;:99::-;:106;;38517:144;;;::::0;-1:-1:-1;;;38517:144:0;;12745:2:1;38517:144:0::1;::::0;::::1;12727:21:1::0;12784:2;12764:18;;;12757:30;-1:-1:-1;;;12803:18:1;;;12796:55;12868:18;;38517:144:0::1;12543:349:1::0;19769:198:0;-1:-1:-1;;;;;19859:20:0;;19835:7;19859:20;;;:11;:20;;;;;;;;19855:49;;;-1:-1:-1;;;;;;19888:16:0;;;;;:7;:16;;;;;;;19769:198::o;19855:49::-;-1:-1:-1;;;;;19942:16:0;;;;;;:7;:16;;;;;;19922:37;;:19;:37::i;6098:148::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;6205:1:::1;6189:6:::0;;6168:40:::1;::::0;-1:-1:-1;;;;;6189:6:0;;::::1;::::0;6168:40:::1;::::0;6205:1;;6168:40:::1;6236:1;6219:19:::0;;-1:-1:-1;;;;;;6219:19:0::1;::::0;;6098:148::o;34719:198::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;34806:9:::1;34801:109;34817:20:::0;;::::1;34801:109;;;34894:4;34859:18;:32;34878:9;;34888:1;34878:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34859:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34859:32:0;:39;;-1:-1:-1;;34859:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34839:3:::1;::::0;::::1;:::i;:::-;;;34801:109;;;;34719:198:::0;;:::o;35996:135::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;36081:42:::1;::::0;-1:-1:-1;;;;;36081:19:0;::::1;::::0;36101:21:::1;36081:42:::0;::::1;;;::::0;::::1;::::0;;;36101:21;36081:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;35792:188:::0;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;35879:9:::1;35874:99;35890:20:::0;;::::1;35874:99;;;35957:4;35932:10;:24;35943:9;;35953:1;35943:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35932:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35932:24:0;:29;;-1:-1:-1;;35932:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35912:3:::1;::::0;::::1;:::i;:::-;;;35874:99;;36628:178:::0;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;36782:16:::1;36762;36752:7;;:26;;;;:::i;:::-;36751:47;;;;:::i;:::-;36735:13;:63:::0;-1:-1:-1;;36628:178:0:o;19480:87::-;19519:13;19552:7;19545:14;;;;;:::i;36814:496::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;36950:4:::1;36931:23:::0;::::1;36923:81;;;::::0;-1:-1:-1;;;36923:81:0;;14514:2:1;36923:81:0::1;::::0;::::1;14496:21:1::0;14553:2;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;-1:-1:-1;;;14643:18:1;;;14636:44;14697:19;;36923:81:0::1;14312:410:1::0;36923:81:0::1;37067:9;::::0;37040:12:::1;::::0;37079:9;;37063:13:::1;::::0;-1:-1:-1;;;37067:9:0;::::1;;;37063:2;:13;:::i;:::-;37055:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;37040:55;;37135:4;37116:15;37126:4;37116:9;:15::i;:::-;:23;;37108:63;;;::::0;-1:-1:-1;;;37108:63:0;;13449:2:1;37108:63:0::1;::::0;::::1;13431:21:1::0;13488:2;13468:18;;;13461:30;13527:29;13507:18;;;13500:57;13574:18;;37108:63:0::1;13247:351:1::0;37108:63:0::1;37188:6;37184:119;37198:20:::0;;::::1;37184:119;;;37239:52;37249:4;37254:9;;37264:1;37254:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37280:9;::::0;37276:13:::1;::::0;-1:-1:-1;;;37280:9:0;::::1;;;37276:2;:13;:::i;:::-;37268:21;::::0;:6;:21:::1;:::i;:::-;37239:9;:52::i;:::-;37220:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37184:119;;;;36910:400;36814:496:::0;;;;:::o;37318:681::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;37486:16:::1;:32:::0;;;37529:16:::1;:32:::0;;;37572:10:::1;:20:::0;;;37603:17:::1;:33:::0;;;37649:13:::1;:29:::0;;;37689:12:::1;:28:::0;;;37728:6:::1;:16:::0;;;37755:12:::1;:28:::0;;;37794:12:::1;:28:::0;;;37844:60:::1;37809:13:::0;37844:42:::1;37585:7:::0;37844:42;37505:13;37548;37844:16:::1;:30::i;:60::-;37833:8;:71:::0;;;37936:17:::1;::::0;37958:3:::1;::::0;37923:31:::1;::::0;:12:::1;:31::i;:::-;:38;;37915:76;;;::::0;-1:-1:-1;;;37915:76:0;;12745:2:1;37915:76:0::1;::::0;::::1;12727:21:1::0;12784:2;12764:18;;;12757:30;-1:-1:-1;;;12803:18:1;;;12796:55;12868:18;;37915:76:0::1;12543:349:1::0;37915:76:0::1;37318:681:::0;;;;;:::o;21017:269::-;21110:4;21127:129;257:10;21150:7;21159:96;21198:15;21159:96;;;;;;;;;;;;;;;;;257:10;21159:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21159:34:0;;;;;;;;;;;;:38;:96::i;19975:167::-;20053:4;20070:42;257:10;20094:9;20105:6;20070:9;:42::i;38008:94::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38068:19:0::1;;::::0;;;:14:::1;:19;::::0;;;;:26;;-1:-1:-1;;38068:26:0::1;38090:4;38068:26;::::0;;38008:94::o;35057:190::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;35154:15:::1;:43:::0;;-1:-1:-1;;;;;35154:43:0;;::::1;-1:-1:-1::0;;;;;;35154:43:0;;::::1;;::::0;;;35208:9:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;35057:190::o;34935:110::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35002:27:0::1;35032:5;35002:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35002:35:0::1;::::0;;34935:110::o;18858:523::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;18931:29:::1;18982:9;18931:61;;19003:16;19040:10;-1:-1:-1::0;;;;;19040:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19022:47:0::1;;19078:4;19085:10;-1:-1:-1::0;;;;;19085:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19022:81;::::0;-1:-1:-1;;;;;;19022:81:0::1;::::0;;;;;;-1:-1:-1;;;;;8207:15:1;;;19022:81:0::1;::::0;::::1;8189:34:1::0;8259:15;;8239:18;;;8232:43;8124:18;;19022:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19003:100:::0;-1:-1:-1;;;;;;19118:22:0;::::1;19114:221;;19191:10;-1:-1:-1::0;;;;;19191:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19173:50:0::1;;19232:4;19239:10;-1:-1:-1::0;;;;;19239:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19173:84;::::0;-1:-1:-1;;;;;;19173:84:0::1;::::0;;;;;;-1:-1:-1;;;;;8207:15:1;;;19173:84:0::1;::::0;::::1;8189:34:1::0;8259:15;;8239:18;;;8232:43;8124:18;;19173:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19157:13;:100:::0;;-1:-1:-1;;;;;;19157:100:0::1;-1:-1:-1::0;;;;;19157:100:0;;;::::1;::::0;;;::::1;::::0;;19114:221:::1;;;19299:13;:24:::0;;-1:-1:-1;;;;;;19299:24:0::1;-1:-1:-1::0;;;;;19299:24:0;::::1;;::::0;;19114:221:::1;-1:-1:-1::0;19345:15:0::1;:28:::0;;-1:-1:-1;;;;;;19345:28:0::1;-1:-1:-1::0;;;;;19345:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;18858:523:0:o;38110:97::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38172:19:0::1;38194:5;38172:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;38172:27:0::1;::::0;;38110:97::o;34599:112::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34669:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34669:34:0::1;34699:4;34669:34;::::0;;34599:112::o;6254:244::-;6007:6;;-1:-1:-1;;;;;6007:6:0;257:10;6007:22;5999:67;;;;-1:-1:-1;;;5999:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6343:22:0;::::1;6335:73;;;::::0;-1:-1:-1;;;6335:73:0;;11223:2:1;6335:73:0::1;::::0;::::1;11205:21:1::0;11262:2;11242:18;;;11235:30;11301:34;11281:18;;;11274:62;-1:-1:-1;;;11352:18:1;;;11345:36;11398:19;;6335:73:0::1;11021:402:1::0;6335:73:0::1;6445:6;::::0;;6424:38:::1;::::0;-1:-1:-1;;;;;6424:38:0;;::::1;::::0;6445:6;::::1;::::0;6424:38:::1;::::0;::::1;6473:6;:17:::0;;-1:-1:-1;;;;;;6473:17:0::1;-1:-1:-1::0;;;;;6473:17:0;;;::::1;::::0;;;::::1;::::0;;6254:244::o;2032:132::-;2090:7;2117:39;2121:1;2124;2117:39;;;;;;;;;;;;;;;;;:3;:39::i;1772:250::-;1830:7;1854:6;1850:47;;-1:-1:-1;1884:1:0;1877:8;;1850:47;1909:9;1921:5;1925:1;1921;:5;:::i;:::-;1909:17;-1:-1:-1;1954:1:0;1945:5;1949:1;1909:17;1945:5;:::i;:::-;:10;1937:56;;;;-1:-1:-1;;;1937:56:0;;14929:2:1;1937:56:0;;;14911:21:1;14968:2;14948:18;;;14941:30;15007:34;14987:18;;;14980:62;-1:-1:-1;;;15058:18:1;;;15051:31;15099:19;;1937:56:0;14727:397:1;1239:181:0;1297:7;;1329:5;1333:1;1329;:5;:::i;:::-;1317:17;;1358:1;1353;:6;;1345:46;;;;-1:-1:-1;;;1345:46:0;;12033:2:1;1345:46:0;;;12015:21:1;12072:2;12052:18;;;12045:30;12111:29;12091:18;;;12084:57;12158:18;;1345:46:0;11831:351:1;23373:337:0;-1:-1:-1;;;;;23466:19:0;;23458:68;;;;-1:-1:-1;;;23458:68:0;;16911:2:1;23458:68:0;;;16893:21:1;16950:2;16930:18;;;16923:30;16989:34;16969:18;;;16962:62;-1:-1:-1;;;17040:18:1;;;17033:34;17084:19;;23458:68:0;16709:400:1;23458:68:0;-1:-1:-1;;;;;23545:21:0;;23537:68;;;;-1:-1:-1;;;23537:68:0;;11630:2:1;23537:68:0;;;11612:21:1;11669:2;11649:18;;;11642:30;11708:34;11688:18;;;11681:62;-1:-1:-1;;;11759:18:1;;;11752:32;11801:19;;23537:68:0;11428:398:1;23537:68:0;-1:-1:-1;;;;;23618:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23670:32;;17673:25:1;;;23670:32:0;;17646:18:1;23670:32:0;;;;;;;23373:337;;;:::o;23718:2059::-;-1:-1:-1;;;;;23840:18:0;;23832:68;;;;-1:-1:-1;;;23832:68:0;;16102:2:1;23832:68:0;;;16084:21:1;16141:2;16121:18;;;16114:30;16180:34;16160:18;;;16153:62;-1:-1:-1;;;16231:18:1;;;16224:35;16276:19;;23832:68:0;15900:401:1;23832:68:0;-1:-1:-1;;;;;23919:16:0;;23911:64;;;;-1:-1:-1;;;23911:64:0;;10408:2:1;23911:64:0;;;10390:21:1;10447:2;10427:18;;;10420:30;10486:34;10466:18;;;10459:62;-1:-1:-1;;;10537:18:1;;;10530:33;10580:19;;23911:64:0;10206:399:1;23911:64:0;24003:1;23994:6;:10;23986:64;;;;-1:-1:-1;;;23986:64:0;;15692:2:1;23986:64:0;;;15674:21:1;15731:2;15711:18;;;15704:30;15770:34;15750:18;;;15743:62;-1:-1:-1;;;15821:18:1;;;15814:39;15870:19;;23986:64:0;15490:405:1;23986:64:0;-1:-1:-1;;;;;24070:13:0;;;;;;:9;:13;;;;;;;;24069:14;24061:48;;;;-1:-1:-1;;;24061:48:0;;13099:2:1;24061:48:0;;;13081:21:1;13138:2;13118:18;;;13111:30;-1:-1:-1;;;13157:18:1;;;13150:51;13218:18;;24061:48:0;12897:345:1;24061:48:0;-1:-1:-1;;;;;24129:15:0;;;;;;:9;:15;;;;;;;;24128:16;24120:50;;;;-1:-1:-1;;;24120:50:0;;13099:2:1;24120:50:0;;;13081:21:1;13138:2;13118:18;;;13111:30;-1:-1:-1;;;13157:18:1;;;13150:51;13218:18;;24120:50:0;12897:345:1;24120:50:0;-1:-1:-1;;;;;24195:20:0;;;;;;:14;:20;;;;;;;;24191:95;;24239:11;;-1:-1:-1;;;24239:11:0;;;;24231:43;;;;-1:-1:-1;;;24231:43:0;;14165:2:1;24231:43:0;;;14147:21:1;14204:2;14184:18;;;14177:30;-1:-1:-1;;;14223:18:1;;;14216:50;14283:18;;24231:43:0;13963:344:1;24231:43:0;24376:13;;24299:12;;-1:-1:-1;;;;;24370:19:0;;;24376:13;;24370:19;;:40;;-1:-1:-1;24397:13:0;;-1:-1:-1;;;;;24393:17:0;;;24397:13;;24393:17;24370:40;24369:99;;;;-1:-1:-1;;;;;;24417:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24445:22:0;;;;;;:18;:22;;;;;;;;24417:50;24415:53;24369:99;24364:148;;;-1:-1:-1;24496:4:0;24364:148;24538:1;24527:10;;:12;:66;;;;-1:-1:-1;;;;;;24545:22:0;;;;;;:18;:22;;;;;;;;24544:23;:48;;;;-1:-1:-1;;;;;;24572:20:0;;;;;;:14;:20;;;;;;;;24571:21;24544:48;24524:207;;;24644:15;;24629:13;24639:2;24629:9;:13::i;:::-;24621:21;;:6;:21;:::i;:::-;:38;;24613:106;;;;-1:-1:-1;;;24613:106:0;;16508:2:1;24613:106:0;;;16490:21:1;16547:2;16527:18;;;16520:30;16586:34;16566:18;;;16559:62;-1:-1:-1;;;16637:18:1;;;16630:32;16679:19;;24613:106:0;16306:398:1;24613:106:0;24759:8;;24743:15;:24;24792:17;;24778:13;:31;24825:11;;-1:-1:-1;;;24825:11:0;;;;:34;;;;-1:-1:-1;24846:13:0;;-1:-1:-1;;;;;24840:19:0;;;24846:13;;24840:19;24825:34;24822:194;;;24900:57;24945:11;;24900:40;24922:17;;24900;;:21;;:40;;;;:::i;:57::-;24883:15;:74;24986:18;;24972:13;:32;24822:194;25086:1;25075:10;;:12;:56;;;;;25119:12;25105:10;;25092;;:23;;;;:::i;:::-;25091:40;25075:56;25072:109;;;-1:-1:-1;;;;;25151:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;25151:18:0;25165:4;25151:18;;;25072:109;25196:14;;-1:-1:-1;;;25196:14:0;;;;25193:150;;;25230:11;;-1:-1:-1;;;25230:11:0;;;;:36;;;;-1:-1:-1;25253:13:0;;-1:-1:-1;;;;;25245:21:0;;;25253:13;;25245:21;25230:36;25227:105;;;25314:1;25298:15;:17;25227:105;25376:6;;-1:-1:-1;;;25376:6:0;;;;25375:7;:22;;;;-1:-1:-1;25386:11:0;;-1:-1:-1;;;25386:11:0;;;;25375:22;:45;;;;-1:-1:-1;25407:13:0;;-1:-1:-1;;;;;25401:19:0;;;25407:13;;25401:19;25375:45;25371:350;;;25445:28;25476:24;25494:4;25476:9;:24::i;:::-;25445:55;;25554:13;;25532:20;:35;25529:169;;-1:-1:-1;25614:13:0;;25650:32;25614:13;25650:10;:32::i;:::-;25422:299;25371:350;25731:38;25746:4;25751:2;25754:6;25761:7;25731:14;:38::i;1572:192::-;1658:7;1694:12;1686:6;;;;1678:29;;;;-1:-1:-1;;;1678:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1718:9:0;1730:5;1734:1;1730;:5;:::i;:::-;1718:17;1572:192;-1:-1:-1;;;;;1572:192:0:o;33136:163::-;33177:7;33198:15;33215;33234:19;:17;:19::i;:::-;33197:56;;-1:-1:-1;33197:56:0;-1:-1:-1;33271:20:0;33197:56;;33271:11;:20::i;:::-;33264:27;;;;33136:163;:::o;31934:419::-;31993:7;32002;32011;32020;32029;32038;32059:23;32084:12;32098:18;32120:20;32132:7;32120:11;:20::i;:::-;32058:82;;;;;;32152:15;32169:23;32194:12;32210:50;32222:7;32231:4;32237:10;32249;:8;:10::i;:::-;32210:11;:50::i;:::-;32151:109;;;;-1:-1:-1;32151:109:0;;-1:-1:-1;32311:15:0;;-1:-1:-1;32328:4:0;;-1:-1:-1;32334:10:0;;-1:-1:-1;31934:419:0;;-1:-1:-1;;;;;31934:419:0:o;1428:136::-;1486:7;1513:43;1517:1;1520;1513:43;;;;;;;;;;;;;;;;;:3;:43::i;2172:278::-;2258:7;2293:12;2286:5;2278:28;;;;-1:-1:-1;;;2278:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2317:9:0;2329:5;2333:1;2329;:5;:::i;25785:1372::-;17485:6;:13;;-1:-1:-1;;;;17485:13:0;-1:-1:-1;;;17485:13:0;;;25983:8:::1;::::0;25951:12:::1;::::0;17485:13;;25912:101:::1;::::0;26011:1:::1;::::0;25912:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;25886:127:::0;-1:-1:-1;26026:20:0::1;26049:41;:20:::0;25886:127;26049:24:::1;:41::i;:::-;26026:64;;26111:30;26128:12;26111:16;:30::i;:::-;26243:12;::::0;26174:21:::1;::::0;26154:17:::1;::::0;26230:33:::1;::::0;26243:19:::1;::::0;26260:1:::1;26243:16;:19::i;:::-;26230:8;::::0;;:12:::1;:33::i;:::-;26208:55;;26276:26;26305:93;26396:1;26305:72;26365:11;26305:41;26333:12;;26305:9;:27;;:41;;;;:::i;:93::-;26276:122;;26419:20;26442:38;26468:11;26442:21;26456:6;;26442:9;:13;;:21;;;;:::i;:38::-;26419:61;;26491:26;26520:68;26566:11;26520:27;26534:12;;26520:9;:13;;:27;;;;:::i;:68::-;26491:97;;26600:26;26629:68;26675:11;26629:27;26643:12;;26629:9;:13;;:27;;;;:::i;:68::-;26600:97:::0;-1:-1:-1;26788:21:0::1;26823:22:::0;;26820:216:::1;;26894:15;::::0;26862:48:::1;::::0;26875:18;;-1:-1:-1;;;;;26894:15:0::1;26862:12;:48::i;:::-;26957:15;::::0;26925:48:::1;::::0;26938:18;;-1:-1:-1;;;;;26957:15:0::1;26925:12;:48::i;:::-;27014:9;::::0;26988:36:::1;::::0;27001:12;;-1:-1:-1;;;;;27014:9:0::1;26988:12;:36::i;:::-;27050:19:::0;;27046:104:::1;;27090:48;27103:15;27119:18;27090:12;:48::i;:::-;-1:-1:-1::0;;17521:6:0;:14;;-1:-1:-1;;;;17521:14:0;;;-1:-1:-1;;;;;;;;25785:1372:0:o;28500:943::-;28640:13;;28690:15;;28720:7;28716:88;;28759:1;28743:13;:17;;;28775:15;:17;28716:88;-1:-1:-1;;;;;28828:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28852:22:0;;;;;;:11;:22;;;;;;;;28851:23;28828:46;28824:467;;;28891:48;28913:6;28921:9;28932:6;28891:21;:48::i;:::-;28824:467;;;-1:-1:-1;;;;;28962:19:0;;;;;;:11;:19;;;;;;;;28961:20;:46;;;;-1:-1:-1;;;;;;28985:22:0;;;;;;:11;:22;;;;;;;;28961:46;28957:334;;;29024:46;29044:6;29052:9;29063:6;29024:19;:46::i;28957:334::-;-1:-1:-1;;;;;29092:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29115:22:0;;;;;;:11;:22;;;;;;;;29092:45;29088:203;;;29154:48;29176:6;29184:9;29195:6;29154:21;:48::i;29088:203::-;29235:44;29253:6;29261:9;29272:6;29235:17;:44::i;:::-;29315:7;29311:125;;29338:13;:38;;;;29391:15;:33;-1:-1:-1;;;;28500:943:0:o;33307:561::-;33404:7;;33440;;33357;;;;;33464:289;33488:9;:16;33484:20;;33464:289;;;33554:7;33530;:21;33538:9;33548:1;33538:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33538:12:0;33530:21;;;;;;;;;;;;;:31;;:66;;;33589:7;33565;:21;33573:9;33583:1;33573:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33573:12:0;33565:21;;;;;;;;;;;;;:31;33530:66;33526:97;;;33606:7;;33615;;33598:25;;;;;;;33307:561;;:::o;33526:97::-;33648:34;33660:7;:21;33668:9;33678:1;33668:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33668:12:0;33660:21;;;;;;;;;;;;;33648:7;;:11;:34::i;:::-;33638:44;;33707:34;33719:7;:21;33727:9;33737:1;33727:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33727:12:0;33719:21;;;;;;;;;;;;;33707:7;;:11;:34::i;:::-;33697:44;-1:-1:-1;33506:3:0;;;;:::i;:::-;;;;33464:289;;;-1:-1:-1;33789:7:0;;33777;;:20;;:11;:20::i;:::-;33767:7;:30;33763:61;;;33807:7;;33816;;33799:25;;;;;;33307:561;;:::o;33763:61::-;33843:7;;33852;;-1:-1:-1;33307:561:0;-1:-1:-1;33307:561:0:o;32361:330::-;32421:7;32430;32439;32459:12;32474:24;32490:7;32474:15;:24::i;:::-;32459:39;;32509:18;32530:30;32552:7;32530:21;:30::i;:::-;32509:51;-1:-1:-1;32571:23:0;32597:33;32509:51;32597:17;:7;32609:4;32597:11;:17::i;:::-;:21;;:33::i;:::-;32571:59;32666:4;;-1:-1:-1;32672:10:0;;-1:-1:-1;32361:330:0;;-1:-1:-1;;;32361:330:0:o;32699:429::-;32814:7;;;;32870:24;:7;32882:11;32870;:24::i;:::-;32852:42;-1:-1:-1;32905:12:0;32920:21;:4;32929:11;32920:8;:21::i;:::-;32905:36;-1:-1:-1;32952:18:0;32973:27;:10;32988:11;32973:14;:27::i;:::-;32952:48;-1:-1:-1;33011:23:0;33037:33;32952:48;33037:17;:7;33049:4;33037:11;:17::i;:33::-;33089:7;;;;-1:-1:-1;33115:4:0;;-1:-1:-1;32699:429:0;;-1:-1:-1;;;;;;;32699:429:0:o;27299:666::-;27449:16;;;27463:1;27449:16;;;;;;;;27425:21;;27449:16;;;;;;;;;;-1:-1:-1;27449:16:0;27425:40;;27494:4;27476;27481:1;27476:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27476:23:0;;;:7;;;;;;;;;;:23;;;;27520:15;;:22;;;-1:-1:-1;;;27520:22:0;;;;:15;;;;;:20;;:22;;;;;27476:7;;27520:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27510:4;27515:1;27510:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27510:32:0;;;:7;;;;;;;;;:32;27587:15;;27555:62;;27572:4;;27587:15;27605:11;27555:8;:62::i;:::-;27656:15;;:240;;-1:-1:-1;;;27656:240:0;;-1:-1:-1;;;;;27656:15:0;;;;:66;;:240;;27737:11;;27656:15;;27807:4;;27834;;27870:15;;27656:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27922:35;27939:11;27952:4;27922:35;;;;;;;:::i;:::-;;;;;;;;27354:611;27299:666;:::o;27169:111::-;27249:23;;-1:-1:-1;;;;;27249:15:0;;;:23;;;;;27265:6;;27249:23;;;;27265:6;27249:15;:23;;;;;;;;;;;;;;;;;;;27979:513;28159:15;;28127:62;;28144:4;;-1:-1:-1;;;;;28159:15:0;28177:11;28127:8;:62::i;:::-;28232:15;;-1:-1:-1;;;;;28232:15:0;:31;28271:9;28304:4;28324:11;28232:15;;28436:7;5911;5938:6;-1:-1:-1;;;;;5938:6:0;;5873:79;28436:7;28232:252;;;;;;-1:-1:-1;;;;;;28232:252:0;;;-1:-1:-1;;;;;8924:15:1;;;28232:252:0;;;8906:34:1;8956:18;;;8949:34;;;;8999:18;;;8992:34;;;;9042:18;;;9035:34;9106:15;;;9085:19;;;9078:44;28458:15:0;9138:19:1;;;9131:35;8840:19;;28232:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30555:566::-;30658:15;30675:23;30700:12;30714:23;30739:12;30753:18;30775:19;30786:7;30775:10;:19::i;:::-;-1:-1:-1;;;;;30823:15:0;;;;;;:7;:15;;;;;;30657:137;;-1:-1:-1;30657:137:0;;-1:-1:-1;30657:137:0;;-1:-1:-1;30657:137:0;-1:-1:-1;30657:137:0;-1:-1:-1;30657:137:0;-1:-1:-1;30823:28:0;;30843:7;30823:19;:28::i;:::-;-1:-1:-1;;;;;30805:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30880:7;:15;;;;:28;;30900:7;30880:19;:28::i;:::-;-1:-1:-1;;;;;30862:15:0;;;;;;;:7;:15;;;;;;:46;;;;30940:18;;;;;;;:39;;30963:15;30940:22;:39::i;:::-;-1:-1:-1;;;;;30919:18:0;;;;;;:7;:18;;;;;:60;30993:26;31008:10;30993:14;:26::i;:::-;31030:23;31042:4;31048;31030:11;:23::i;:::-;31086:9;-1:-1:-1;;;;;31069:44:0;31078:6;-1:-1:-1;;;;;31069:44:0;;31097:15;31069:44;;;;17673:25:1;;17661:2;17646:18;;17527:177;31069:44:0;;;;;;;;30646:475;;;;;;30555:566;;;:::o;29961:586::-;30062:15;30079:23;30104:12;30118:23;30143:12;30157:18;30179:19;30190:7;30179:10;:19::i;:::-;-1:-1:-1;;;;;30227:15:0;;;;;;:7;:15;;;;;;30061:137;;-1:-1:-1;30061:137:0;;-1:-1:-1;30061:137:0;;-1:-1:-1;30061:137:0;-1:-1:-1;30061:137:0;-1:-1:-1;30061:137:0;-1:-1:-1;30227:28:0;;30061:137;30227:19;:28::i;:::-;-1:-1:-1;;;;;30209:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30287:18;;;;;:7;:18;;;;;:39;;30310:15;30287:22;:39::i;:::-;-1:-1:-1;;;;;30266:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30358:7;:18;;;;:39;;30381:15;30358:22;:39::i;31129:642::-;31232:15;31249:23;31274:12;31288:23;31313:12;31327:18;31349:19;31360:7;31349:10;:19::i;:::-;-1:-1:-1;;;;;31397:15:0;;;;;;:7;:15;;;;;;31231:137;;-1:-1:-1;31231:137:0;;-1:-1:-1;31231:137:0;;-1:-1:-1;31231:137:0;-1:-1:-1;31231:137:0;-1:-1:-1;31231:137:0;-1:-1:-1;31397:28:0;;31417:7;31397:19;:28::i;:::-;-1:-1:-1;;;;;31379:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31454:7;:15;;;;:28;;31474:7;31454:19;:28::i;29451:502::-;29550:15;29567:23;29592:12;29606:23;29631:12;29645:18;29667:19;29678:7;29667:10;:19::i;:::-;-1:-1:-1;;;;;29715:15:0;;;;;;:7;:15;;;;;;29549:137;;-1:-1:-1;29549:137:0;;-1:-1:-1;29549:137:0;;-1:-1:-1;29549:137:0;-1:-1:-1;29549:137:0;-1:-1:-1;29549:137:0;-1:-1:-1;29715:28:0;;29549:137;29715:19;:28::i;34247:160::-;34311:7;34338:61;34383:5;34338:26;34350:13;;34338:7;:11;;:26;;;;:::i;34419:168::-;34489:7;34516:63;34563:5;34516:28;34528:15;;34516:7;:11;;:28;;;;:::i;33880:355::-;33943:19;33966:10;:8;:10::i;:::-;33943:33;-1:-1:-1;33987:18:0;34008:27;:10;33943:33;34008:14;:27::i;:::-;34087:4;34071:22;;;;:7;:22;;;;;;33987:48;;-1:-1:-1;34071:38:0;;33987:48;34071:26;:38::i;:::-;34062:4;34046:22;;;;:7;:22;;;;;;;;:63;;;;34123:11;:26;;;;;;34120:107;;;34205:4;34189:22;;;;:7;:22;;;;;;:38;;34216:10;34189:26;:38::i;:::-;34180:4;34164:22;;;;:7;:22;;;;;:63;33932:303;;33880:355;:::o;31779:147::-;31857:7;;:17;;31869:4;31857:11;:17::i;:::-;31847:7;:27;31898:10;;:20;;31913:4;31898:14;:20::i;:::-;31885:10;:33;-1:-1:-1;;31779:147:0:o;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:247::-;445:6;498:2;486:9;477:7;473:23;469:32;466:52;;;514:1;511;504:12;466:52;553:9;540:23;572:31;597:5;572:31;:::i;638:251::-;708:6;761:2;749:9;740:7;736:23;732:32;729:52;;;777:1;774;767:12;729:52;809:9;803:16;828:31;853:5;828:31;:::i;1154:388::-;1222:6;1230;1283:2;1271:9;1262:7;1258:23;1254:32;1251:52;;;1299:1;1296;1289:12;1251:52;1338:9;1325:23;1357:31;1382:5;1357:31;:::i;:::-;1407:5;-1:-1:-1;1464:2:1;1449:18;;1436:32;1477:33;1436:32;1477:33;:::i;:::-;1529:7;1519:17;;;1154:388;;;;;:::o;1547:456::-;1624:6;1632;1640;1693:2;1681:9;1672:7;1668:23;1664:32;1661:52;;;1709:1;1706;1699:12;1661:52;1748:9;1735:23;1767:31;1792:5;1767:31;:::i;:::-;1817:5;-1:-1:-1;1874:2:1;1859:18;;1846:32;1887:33;1846:32;1887:33;:::i;:::-;1547:456;;1939:7;;-1:-1:-1;;;1993:2:1;1978:18;;;;1965:32;;1547:456::o;2008:640::-;2112:6;2120;2128;2136;2189:2;2177:9;2168:7;2164:23;2160:32;2157:52;;;2205:1;2202;2195:12;2157:52;2244:9;2231:23;2263:31;2288:5;2263:31;:::i;:::-;2313:5;-1:-1:-1;2369:2:1;2354:18;;2341:32;2396:18;2385:30;;2382:50;;;2428:1;2425;2418:12;2382:50;2467:70;2529:7;2520:6;2509:9;2505:22;2467:70;:::i;:::-;2008:640;;2556:8;;-1:-1:-1;2441:96:1;;2638:2;2623:18;2610:32;;2008:640;-1:-1:-1;;;;2008:640:1:o;2653:315::-;2721:6;2729;2782:2;2770:9;2761:7;2757:23;2753:32;2750:52;;;2798:1;2795;2788:12;2750:52;2837:9;2824:23;2856:31;2881:5;2856:31;:::i;:::-;2906:5;2958:2;2943:18;;;;2930:32;;-1:-1:-1;;;2653:315:1:o;2973:437::-;3059:6;3067;3120:2;3108:9;3099:7;3095:23;3091:32;3088:52;;;3136:1;3133;3126:12;3088:52;3176:9;3163:23;3209:18;3201:6;3198:30;3195:50;;;3241:1;3238;3231:12;3195:50;3280:70;3342:7;3333:6;3322:9;3318:22;3280:70;:::i;:::-;3369:8;;3254:96;;-1:-1:-1;2973:437:1;-1:-1:-1;;;;2973:437:1:o;3415:566::-;3507:6;3515;3523;3576:2;3564:9;3555:7;3551:23;3547:32;3544:52;;;3592:1;3589;3582:12;3544:52;3632:9;3619:23;3665:18;3657:6;3654:30;3651:50;;;3697:1;3694;3687:12;3651:50;3736:70;3798:7;3789:6;3778:9;3774:22;3736:70;:::i;:::-;3825:8;;-1:-1:-1;3710:96:1;-1:-1:-1;;3910:2:1;3895:18;;3882:32;3923:28;3882:32;3923:28;:::i;:::-;3970:5;3960:15;;;3415:566;;;;;:::o;3986:241::-;4042:6;4095:2;4083:9;4074:7;4070:23;4066:32;4063:52;;;4111:1;4108;4101:12;4063:52;4150:9;4137:23;4169:28;4191:5;4169:28;:::i;4232:245::-;4299:6;4352:2;4340:9;4331:7;4327:23;4323:32;4320:52;;;4368:1;4365;4358:12;4320:52;4400:9;4394:16;4419:28;4441:5;4419:28;:::i;4482:309::-;4547:6;4555;4608:2;4596:9;4587:7;4583:23;4579:32;4576:52;;;4624:1;4621;4614:12;4576:52;4663:9;4650:23;4682:28;4704:5;4682:28;:::i;5202:180::-;5261:6;5314:2;5302:9;5293:7;5289:23;5285:32;5282:52;;;5330:1;5327;5320:12;5282:52;-1:-1:-1;5353:23:1;;5202:180;-1:-1:-1;5202:180:1:o;5387:184::-;5457:6;5510:2;5498:9;5489:7;5485:23;5481:32;5478:52;;;5526:1;5523;5516:12;5478:52;-1:-1:-1;5549:16:1;;5387:184;-1:-1:-1;5387:184:1:o;5576:309::-;5641:6;5649;5702:2;5690:9;5681:7;5677:23;5673:32;5670:52;;;5718:1;5715;5708:12;5670:52;5754:9;5741:23;5731:33;;5814:2;5803:9;5799:18;5786:32;5827:28;5849:5;5827:28;:::i;5890:248::-;5958:6;5966;6019:2;6007:9;5998:7;5994:23;5990:32;5987:52;;;6035:1;6032;6025:12;5987:52;-1:-1:-1;;6058:23:1;;;6128:2;6113:18;;;6100:32;;-1:-1:-1;5890:248:1:o;6143:306::-;6231:6;6239;6247;6300:2;6288:9;6279:7;6275:23;6271:32;6268:52;;;6316:1;6313;6306:12;6268:52;6345:9;6339:16;6329:26;;6395:2;6384:9;6380:18;6374:25;6364:35;;6439:2;6428:9;6424:18;6418:25;6408:35;;6143:306;;;;;:::o;6454:385::-;6540:6;6548;6556;6564;6617:3;6605:9;6596:7;6592:23;6588:33;6585:53;;;6634:1;6631;6624:12;6585:53;-1:-1:-1;;6657:23:1;;;6727:2;6712:18;;6699:32;;-1:-1:-1;6778:2:1;6763:18;;6750:32;;6829:2;6814:18;6801:32;;-1:-1:-1;6454:385:1;-1:-1:-1;6454:385:1:o;6844:454::-;6939:6;6947;6955;6963;6971;7024:3;7012:9;7003:7;6999:23;6995:33;6992:53;;;7041:1;7038;7031:12;6992:53;-1:-1:-1;;7064:23:1;;;7134:2;7119:18;;7106:32;;-1:-1:-1;7185:2:1;7170:18;;7157:32;;7236:2;7221:18;;7208:32;;-1:-1:-1;7287:3:1;7272:19;7259:33;;-1:-1:-1;6844:454:1;-1:-1:-1;6844:454:1:o;7303:461::-;7356:3;7394:5;7388:12;7421:6;7416:3;7409:19;7447:4;7476:2;7471:3;7467:12;7460:19;;7513:2;7506:5;7502:14;7534:1;7544:195;7558:6;7555:1;7552:13;7544:195;;;7623:13;;-1:-1:-1;;;;;7619:39:1;7607:52;;7679:12;;;;7714:15;;;;7655:1;7573:9;7544:195;;;-1:-1:-1;7755:3:1;;7303:461;-1:-1:-1;;;;;7303:461:1:o;9604:597::-;9716:4;9745:2;9774;9763:9;9756:21;9806:6;9800:13;9849:6;9844:2;9833:9;9829:18;9822:34;9874:1;9884:140;9898:6;9895:1;9892:13;9884:140;;;9993:14;;;9989:23;;9983:30;9959:17;;;9978:2;9955:26;9948:66;9913:10;;9884:140;;;10042:6;10039:1;10036:13;10033:91;;;10112:1;10107:2;10098:6;10087:9;10083:22;10079:31;10072:42;10033:91;-1:-1:-1;10185:2:1;10164:15;-1:-1:-1;;10160:29:1;10145:45;;;;10192:2;10141:54;;9604:597;-1:-1:-1;;;9604:597:1:o;15129:356::-;15331:2;15313:21;;;15350:18;;;15343:30;15409:34;15404:2;15389:18;;15382:62;15476:2;15461:18;;15129:356::o;17709:332::-;17916:6;17905:9;17898:25;17959:2;17954;17943:9;17939:18;17932:30;17879:4;17979:56;18031:2;18020:9;18016:18;18008:6;17979:56;:::i;:::-;17971:64;17709:332;-1:-1:-1;;;;17709:332:1:o;18046:582::-;18345:6;18334:9;18327:25;18388:6;18383:2;18372:9;18368:18;18361:34;18431:3;18426:2;18415:9;18411:18;18404:31;18308:4;18452:57;18504:3;18493:9;18489:19;18481:6;18452:57;:::i;:::-;-1:-1:-1;;;;;18545:32:1;;;;18540:2;18525:18;;18518:60;-1:-1:-1;18609:3:1;18594:19;18587:35;18444:65;18046:582;-1:-1:-1;;;18046:582:1:o;18822:128::-;18862:3;18893:1;18889:6;18886:1;18883:13;18880:39;;;18899:18;;:::i;:::-;-1:-1:-1;18935:9:1;;18822:128::o;18955:217::-;18995:1;19021;19011:132;;19065:10;19060:3;19056:20;19053:1;19046:31;19100:4;19097:1;19090:15;19128:4;19125:1;19118:15;19011:132;-1:-1:-1;19157:9:1;;18955:217::o;19177:422::-;19266:1;19309:5;19266:1;19323:270;19344:7;19334:8;19331:21;19323:270;;;19403:4;19399:1;19395:6;19391:17;19385:4;19382:27;19379:53;;;19412:18;;:::i;:::-;19462:7;19452:8;19448:22;19445:55;;;19482:16;;;;19445:55;19561:22;;;;19521:15;;;;19323:270;;;19327:3;19177:422;;;;;:::o;19604:140::-;19662:5;19691:47;19732:4;19722:8;19718:19;19712:4;19798:5;19828:8;19818:80;;-1:-1:-1;19869:1:1;19883:5;;19818:80;19917:4;19907:76;;-1:-1:-1;19954:1:1;19968:5;;19907:76;19999:4;20017:1;20012:59;;;;20085:1;20080:130;;;;19992:218;;20012:59;20042:1;20033:10;;20056:5;;;20080:130;20117:3;20107:8;20104:17;20101:43;;;20124:18;;:::i;:::-;-1:-1:-1;;20180:1:1;20166:16;;20195:5;;19992:218;;20294:2;20284:8;20281:16;20275:3;20269:4;20266:13;20262:36;20256:2;20246:8;20243:16;20238:2;20232:4;20229:12;20225:35;20222:77;20219:159;;;-1:-1:-1;20331:19:1;;;20363:5;;20219:159;20410:34;20435:8;20429:4;20410:34;:::i;:::-;20480:6;20476:1;20472:6;20468:19;20459:7;20456:32;20453:58;;;20491:18;;:::i;:::-;20529:20;;19749:806;-1:-1:-1;;;19749:806:1:o;20560:168::-;20600:7;20666:1;20662;20658:6;20654:14;20651:1;20648:21;20643:1;20636:9;20629:17;20625:45;20622:71;;;20673:18;;:::i;:::-;-1:-1:-1;20713:9:1;;20560:168::o;20733:125::-;20773:4;20801:1;20798;20795:8;20792:34;;;20806:18;;:::i;:::-;-1:-1:-1;20843:9:1;;20733:125::o;20863:380::-;20942:1;20938:12;;;;20985;;;21006:61;;21060:4;21052:6;21048:17;21038:27;;21006:61;21113:2;21105:6;21102:14;21082:18;21079:38;21076:161;;;21159:10;21154:3;21150:20;21147:1;21140:31;21194:4;21191:1;21184:15;21222:4;21219:1;21212:15;21076:161;;20863:380;;;:::o;21248:135::-;21287:3;-1:-1:-1;;21308:17:1;;21305:43;;;21328:18;;:::i;:::-;-1:-1:-1;21375:1:1;21364:13;;21248:135::o;21388:127::-;21449:10;21444:3;21440:20;21437:1;21430:31;21480:4;21477:1;21470:15;21504:4;21501:1;21494:15;21520:127;21581:10;21576:3;21572:20;21569:1;21562:31;21612:4;21609:1;21602:15;21636:4;21633:1;21626:15;21652:127;21713:10;21708:3;21704:20;21701:1;21694:31;21744:4;21741:1;21734:15;21768:4;21765:1;21758:15;21916:131;-1:-1:-1;;;;;21991:31:1;;21981:42;;21971:70;;22037:1;22034;22027:12;21971:70;21916:131;:::o;22052:118::-;22138:5;22131:13;22124:21;22117:5;22114:32;22104:60;;22160:1;22157;22150:12

Swarm Source

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