ETH Price: $2,874.41 (-10.25%)
Gas: 13 Gwei

Token

The Fight (FIGHT)
 

Overview

Max Total Supply

1,000,000,000 FIGHT

Holders

35

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,610,902.322282852 FIGHT

Value
$0.00
0x060182dfbbd2f45bf9ab5658a1cef9de4df0e2a8
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:
TheFightERC

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-21
*/

/*

    • https://www.thefight.bet/
    • https://docs.thefight.bet/
    • https://twitter.com/TheFightETH
    • http://t.me/TheFightETH
 
*/

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

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;
    }
}

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

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

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

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

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

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event 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;
}

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

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

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

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

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

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

    uint8 private _decimals = 9;
    uint256 public deadBlocks = 2;
    uint256 public launchedAt = 0;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public _maxWalletToken = _tTotal.div(1000).mul(10); //2% for first few mins

    uint256 public _buyLiquidityFee = 0;    
    uint256 public _buymarketdevFee = 90;   
    uint256 public _buyReflectionFee = 0;

    uint256 public _sellLiquidityFee = 0; 
    uint256 public _sellmarketdevFee = 400;  
    uint256 public _sellReflectionFee = 0;
      
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private marketdevFee = _buymarketdevFee;
    uint256 private reflectionFee=_buyReflectionFee;

    uint256 private totalFee = liquidityFee.add(marketdevFee);
    uint256 private currenttotalFee = totalFee;
    
    uint256 public swapThreshold = _tTotal.div(10000).mul(20); //0.2% 

    bool inSwap;
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    bool private antiBotmode = true;

    string private _name = "The Fight";
    string private _symbol = "FIGHT";
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address payable private marketdevWallet = payable (0xb7C7Eb7dC5104950c4a3311015FF9dec48dD191d); // marketdev Wallet
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isTrusted;
    address[] private _excluded;

    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;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    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 _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 transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(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], "REKT");
        require(!_isSniper[from], "REKT");
        if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading
        
        bool takeFee = false;
        //take fee on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

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

        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        if(tradingOpen && to == uniswapV2Pair) { //sell
            currenttotalFee= _sellLiquidityFee.add(_sellmarketdevFee);
            reflectionFee=_sellReflectionFee;
        }
        
        //antibot
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }
        
        //only bot 
        if(launchedAt>0 && from!= owner() && block.number <= (launchedAt + deadBlocks)  && antiBotmode){
                currenttotalFee=990;    //99%
        }

        //buys
        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) { 
                    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 _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 _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 _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);
    }

    //Swap and send 
    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 amountETHmarketdev = amountETH.mul(marketdevFee).div(totalETHFee);
        //Send to marketdev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHmarketdev,marketdevWallet);
        }
        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
        );
    }

    //-------------------Private View-------------------
    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 _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 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
        );
    }

    //-------------------Public View-------------------
    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 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 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 isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    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;
        }
    }

    //-------------------only Owner-------------------
    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 openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
        tradingOpen = _status;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
            deadBlocks = _deadBlocks;
        }
    }
    
    function setZeroBuyTaxActive(bool _status) external onlyOwner() {
       zeroBuyTaxmode=_status;
    }

    function setAntiBotActive(bool _status) external onlyOwner() {
       antiBotmode=_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 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 setWallet(address _marketdevWallet) external onlyOwner() {
        marketdevWallet = payable(_marketdevWallet);
    }
    
    function manage_Rekt(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++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 withdrawStuck(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

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

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

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

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

        require(addresses.length < 801,"GAS Error: max airdrop limit is 500 addresses"); // to prevent overflow
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

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

        require(balanceOf(msg.sender) >= SCCC, "Not enough tokens in wallet");

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

    function multiTransfer_fixed( 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(msg.sender) >= SCCC, "Not enough tokens in wallet");

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

        }
    }

    function setTaxBuy(uint256 _bReflectionFee, uint256 _bLiquidityFee, uint256 _bMarketdevFee) external onlyOwner {
       
        _buyLiquidityFee = _bLiquidityFee;
        _buymarketdevFee = _bMarketdevFee;
        _buyReflectionFee= _bReflectionFee;

        reflectionFee= _bReflectionFee;
        liquidityFee = _bLiquidityFee;
        marketdevFee = _bMarketdevFee;
        totalFee = liquidityFee.add(marketdevFee);
    }

    function setTaxSell(uint256 _sReflectionFee,uint256 _sLiquidityFee, uint256 _sMarketdevFee) external onlyOwner {
        _sellLiquidityFee = _sLiquidityFee;
        _sellmarketdevFee = _sMarketdevFee;
        _sellReflectionFee= _sReflectionFee;
    }
     //to recieve ETH uniswapV2Router
    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":"_buyLiquidityFee","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":"_buymarketdevFee","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":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellmarketdevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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_Rekt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"manage_trusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"multiTransfer_fixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"bool","name":"_status","type":"bool"}],"name":"setAntiBotActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","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":"_bReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_bLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_bMarketdevFee","type":"uint256"}],"name":"setTaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_sLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sMarketdevFee","type":"uint256"}],"name":"setTaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketdevWallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxActive","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":[],"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":"withdrawStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526003805460ff1916600990811790915560026004555f6005556200002a90600a6200078e565b6200003a90633b9aca006200079e565b60068190556200004c905f19620007cc565b62000059905f19620007e2565b6007556006546200007c90600a9062000075906103e862000509565b906200055b565b6009555f600a55605a600b555f600c555f600d55610190600e555f600f55600a54601055600b54601155600c54601255620000c5601154601054620005e560201b90919060201c565b60138190556014908155600654620000e69190620000759061271062000509565b6015556016805463ffffff0019166301000000179055604080518082019091526009815268151a1948119a59da1d60ba1b60208201526017906200012b908262000898565b50604080518082019091526005815264119251d21560da1b602082015260189062000157908262000898565b50601b80546001600160a01b031990811673b7c7eb7dc5104950c4a3311015ff9dec48dd191d17909155601c805490911661dead1790553480156200019a575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600754335f908152601d602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa1580156200023f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000265919062000960565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d7919062000960565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000322573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000348919062000960565b601a80546001600160a01b03199081166001600160a01b039384161790915560198054909116918316919091179055600160215f6200038e5f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff199586161790553081526021909252812080549092166001908117909255602290620003e55f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790553081526022909352818320805485166001908117909155601a54821684528284208054861682179055601c54909116835290822080549093168117909255602490620004655f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055601a5490911681526024909252902080549091166001179055620004b33390565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620004fa91815260200190565b60405180910390a35062000a01565b5f6200055283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200064760201b60201c565b90505b92915050565b5f825f036200056c57505f62000555565b5f6200057983856200079e565b90508262000588858362000988565b14620005525760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b5f80620005f383856200099e565b905083811015620005525760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620005dc565b5f81836200066a5760405162461bcd60e51b8152600401620005dc9190620009b4565b505f62000678848662000988565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620006d557815f1904821115620006b957620006b962000681565b80851615620006c757918102915b93841c93908002906200069a565b509250929050565b5f82620006ed5750600162000555565b81620006fb57505f62000555565b81600181146200071457600281146200071f576200073f565b600191505062000555565b60ff84111562000733576200073362000681565b50506001821b62000555565b5060208310610133831016604e8410600b841016171562000764575081810a62000555565b62000770838362000695565b805f190482111562000786576200078662000681565b029392505050565b5f6200055260ff841683620006dd565b808202811582820484141762000555576200055562000681565b634e487b7160e01b5f52601260045260245ffd5b5f82620007dd57620007dd620007b8565b500690565b8181038181111562000555576200055562000681565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200082157607f821691505b6020821081036200084057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000893575f81815260208120601f850160051c810160208610156200086e5750805b601f850160051c820191505b818110156200088f578281556001016200087a565b5050505b505050565b81516001600160401b03811115620008b457620008b4620007f8565b620008cc81620008c584546200080c565b8462000846565b602080601f83116001811462000902575f8415620008ea5750858301515b5f19600386901b1c1916600185901b1785556200088f565b5f85815260208120601f198616915b82811015620009325788860151825594840194600190910190840162000911565b50858210156200095057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000971575f80fd5b81516001600160a01b038116811462000552575f80fd5b5f82620009995762000999620007b8565b500490565b8082018082111562000555576200055562000681565b5f6020808352835180828501525f5b81811015620009e157858101830151858201604001528201620009c3565b505f604082860101526040601f19601f8301168501019250505092915050565b6138a48062000a0f5f395ff3fe608060405260043610610344575f3560e01c806370a08231116101bd578063a457c2d7116100f2578063ea2f0b3711610092578063f2fde38b1161006d578063f2fde38b14610992578063f3b1e83b146109b1578063fabb0b4f146109c6578063ffb54a99146109db575f80fd5b8063ea2f0b3714610935578063eafb5a3c14610954578063f259c57b14610973575f80fd5b8063cb46accc116100cd578063cb46accc1461089e578063dc44b6a0146108bd578063dd62ed3e146108d2578063deaa59df14610916575f80fd5b8063a457c2d71461084b578063a9059cbb1461086a578063bf56b37114610889575f80fd5b80637dfd50a21161015d57806388f820201161013857806388f82020146107c55780638da5cb5b146107fc5780638f4590d21461081857806395d89b4114610837575f80fd5b80637dfd50a21461077257806384530c461461079157806388790a68146107b0575f80fd5b806372fdf6ee1161019857806372fdf6ee14610714578063743942b6146107295780637598f8bc1461074857806378109e541461075d575f80fd5b806370a08231146106c2578063715018a6146106e157806371b9189c146106f5575f80fd5b80632d8381191161029357806343b127a6116102335780634eeaf4581161020e5780634eeaf4581461064657806352390c02146106655780635d0044ca14610684578063632e5442146106a3575f80fd5b806343b127a6146105e95780634549b0391461060857806349bd5a5e14610627575f80fd5b80633685d4191161026e5780633685d4191461057757806339509351146105965780633bd5d173146105b5578063401aa5c0146105d4575f80fd5b80632d838119146105185780632dd5efe714610537578063313ce56714610556575f80fd5b806318160ddd116102fe5780632691bc80116102d95780632691bc801461049c57806328a23cd1146104bb5780632a720e33146104da5780632d4103d6146104f9575f80fd5b806318160ddd146104485780631e89d5451461045c57806323b872dd1461047d575f80fd5b80630445b6671461034f57806306fdde0314610377578063095ea7b3146103985780630f3a325f146103c757806313114a9d146103fd5780631694505e14610411575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b5061036460155481565b6040519081526020015b60405180910390f35b348015610382575f80fd5b5061038b6109f9565b60405161036e9190613195565b3480156103a3575f80fd5b506103b76103b23660046131f7565b610a89565b604051901515815260200161036e565b3480156103d2575f80fd5b506103b76103e1366004613221565b6001600160a01b03165f90815260208052604090205460ff1690565b348015610408575f80fd5b50600854610364565b34801561041c575f80fd5b50601954610430906001600160a01b031681565b6040516001600160a01b03909116815260200161036e565b348015610453575f80fd5b50600654610364565b348015610467575f80fd5b5061047b610476366004613284565b610a9f565b005b348015610488575f80fd5b506103b76104973660046132eb565b610cd6565b3480156104a7575f80fd5b506016546103b79062010000900460ff1681565b3480156104c6575f80fd5b5061047b6104d5366004613329565b610d3d565b3480156104e5575f80fd5b5061047b6104f436600461336d565b610e48565b348015610504575f80fd5b5061047b6105133660046133c0565b610edd565b348015610523575f80fd5b506103646105323660046133dc565b610f61565b348015610542575f80fd5b5061047b610551366004613221565b610fe3565b348015610561575f80fd5b5060035460405160ff909116815260200161036e565b348015610582575f80fd5b5061047b610591366004613221565b61102f565b3480156105a1575f80fd5b506103b76105b03660046131f7565b6111d9565b3480156105c0575f80fd5b5061047b6105cf3660046133dc565b61120e565b3480156105df575f80fd5b50610364600c5481565b3480156105f4575f80fd5b5061047b6106033660046133f3565b6112f4565b348015610613575f80fd5b5061036461062236600461341c565b61134d565b348015610632575f80fd5b50601a54610430906001600160a01b031681565b348015610651575f80fd5b5061047b6106603660046133f3565b6113d7565b348015610670575f80fd5b5061047b61067f366004613221565b61140e565b34801561068f575f80fd5b5061047b61069e3660046133dc565b6114f3565b3480156106ae575f80fd5b5061047b6106bd36600461343f565b611543565b3480156106cd575f80fd5b506103646106dc366004613221565b6116c0565b3480156106ec575f80fd5b5061047b61171c565b348015610700575f80fd5b5061047b61070f366004613487565b61178d565b34801561071f575f80fd5b50610364600b5481565b348015610734575f80fd5b5061047b610743366004613221565b611828565b348015610753575f80fd5b50610364600f5481565b348015610768575f80fd5b5061036460095481565b34801561077d575f80fd5b5061047b61078c3660046134c6565b611883565b34801561079c575f80fd5b5061047b6107ab366004613487565b6118ca565b3480156107bb575f80fd5b50610364600d5481565b3480156107d0575f80fd5b506103b76107df366004613221565b6001600160a01b03165f9081526023602052604090205460ff1690565b348015610807575f80fd5b505f546001600160a01b0316610430565b348015610823575f80fd5b5061047b6108323660046134e1565b611960565b348015610842575f80fd5b5061038b6119a9565b348015610856575f80fd5b506103b76108653660046131f7565b6119b8565b348015610875575f80fd5b506103b76108843660046131f7565b611a05565b348015610894575f80fd5b5061036460055481565b3480156108a9575f80fd5b5061047b6108b83660046134c6565b611a11565b3480156108c8575f80fd5b50610364600a5481565b3480156108dd575f80fd5b506103646108ec366004613329565b6001600160a01b039182165f908152601f6020908152604080832093909416825291909152205490565b348015610921575f80fd5b5061047b610930366004613221565b611a56565b348015610940575f80fd5b5061047b61094f366004613221565b611aa1565b34801561095f575f80fd5b5061047b61096e366004613221565b611aea565b34801561097e575f80fd5b5061047b61098d366004613221565b611e06565b34801561099d575f80fd5b5061047b6109ac366004613221565b611e52565b3480156109bc575f80fd5b50610364600e5481565b3480156109d1575f80fd5b5061036460045481565b3480156109e6575f80fd5b506016546103b790610100900460ff1681565b606060178054610a0890613501565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3490613501565b8015610a7f5780601f10610a5657610100808354040283529160200191610a7f565b820191905f5260205f20905b815481529060010190602001808311610a6257829003601f168201915b5050505050905090565b5f610a95338484611f39565b5060015b92915050565b5f546001600160a01b03163314610ad15760405162461bcd60e51b8152600401610ac890613539565b60405180910390fd5b6103218310610b385760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610ac8565b828114610b985760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610ac8565b5f805b84811015610bf557600354610bb49060ff16600a613662565b848483818110610bc657610bc6613670565b90506020020135610bd79190613684565b610be1908361369b565b915080610bed816136ae565b915050610b9b565b5080610c00336116c0565b1015610c4e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610ac8565b5f5b84811015610cce57610cbc33878784818110610c6e57610c6e613670565b9050602002016020810190610c839190613221565b600354610c949060ff16600a613662565b878786818110610ca657610ca6613670565b90506020020135610cb79190613684565b61205c565b80610cc6816136ae565b915050610c50565b505050505050565b5f610ce284848461205c565b610d338433610d2e85604051806060016040528060288152602001613822602891396001600160a01b038a165f908152601f602090815260408083203384529091529020549190612587565b611f39565b5060019392505050565b5f546001600160a01b03163314610d665760405162461bcd60e51b8152600401610ac890613539565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce91906136c6565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015610e1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4291906136dd565b50505050565b5f546001600160a01b03163314610e715760405162461bcd60e51b8152600401610ac890613539565b5f5b82811015610e42578160205f868685818110610e9157610e91613670565b9050602002016020810190610ea69190613221565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055610ed6816136ae565b9050610e73565b5f546001600160a01b03163314610f065760405162461bcd60e51b8152600401610ac890613539565b6016805461ff00191661010084151502179055610f223061140e565b601a54610f37906001600160a01b031661140e565b601654610100900460ff168015610f4e5750600554155b15610f5d574360055560048190555b5050565b5f600754821115610fc75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ac8565b5f610fd06125bf565b9050610fdc83826125e0565b9392505050565b5f546001600160a01b0316331461100c5760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b03165f908152602260205260409020805460ff19166001179055565b5f546001600160a01b031633146110585760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b0381165f9081526023602052604090205460ff166110bf5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ac8565b5f5b602554811015610f5d57816001600160a01b0316602582815481106110e8576110e8613670565b5f918252602090912001546001600160a01b0316036111c75760258054611111906001906136f8565b8154811061112157611121613670565b5f91825260209091200154602580546001600160a01b03909216918390811061114c5761114c613670565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff1916905560258054806111a3576111a361370b565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b806111d1816136ae565b9150506110c1565b335f818152601f602090815260408083206001600160a01b03871684529091528120549091610a95918590610d2e9086612621565b335f8181526023602052604090205460ff16156112825760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610ac8565b5f61128c8361267f565b505050506001600160a01b0384165f908152601d60205260409020549192506112b7919050826126c7565b6001600160a01b0383165f908152601d60205260409020556007546112dc90826126c7565b6007556008546112ec9084612621565b600855505050565b5f546001600160a01b0316331461131d5760405162461bcd60e51b8152600401610ac890613539565b600a829055600b819055600c8390556012839055601082905560118190556113458282612621565b601355505050565b5f6006548311156113a05760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ac8565b816113be575f6113af8461267f565b50939550610a99945050505050565b5f6113c88461267f565b50929550610a99945050505050565b5f546001600160a01b031633146114005760405162461bcd60e51b8152600401610ac890613539565b600d91909155600e55600f55565b5f546001600160a01b031633146114375760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b0381165f908152601d60205260409020541561148e576001600160a01b0381165f908152601d602052604090205461147590610f61565b6001600160a01b0382165f908152601e60205260409020555b6001600160a01b03165f818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b5f546001600160a01b0316331461151c5760405162461bcd60e51b8152600401610ac890613539565b61153d816115376103e86006546125e090919063ffffffff16565b90612708565b60095550565b5f546001600160a01b0316331461156c5760405162461bcd60e51b8152600401610ac890613539565b6107d182106115d45760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610ac8565b6003545f9083906115e99060ff16600a613662565b6115f39084613684565b6115fd9190613684565b905080611609336116c0565b10156116575760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610ac8565b5f5b838110156116b9576116a73386868481811061167757611677613670565b905060200201602081019061168c9190613221565b60035461169d9060ff16600a613662565b610cb79087613684565b806116b1816136ae565b915050611659565b5050505050565b6001600160a01b0381165f9081526023602052604081205460ff16156116fb57506001600160a01b03165f908152601e602052604090205490565b6001600160a01b0382165f908152601d6020526040902054610a9990610f61565b5f546001600160a01b031633146117455760405162461bcd60e51b8152600401610ac890613539565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146117b65760405162461bcd60e51b8152600401610ac890613539565b5f5b8181101561182357600160215f8585858181106117d7576117d7613670565b90506020020160208101906117ec9190613221565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905561181c816136ae565b90506117b8565b505050565b5f546001600160a01b031633146118515760405162461bcd60e51b8152600401610ac890613539565b6040516001600160a01b038216904780156108fc02915f818181858888f19350505050158015610f5d573d5f803e3d5ffd5b5f546001600160a01b031633146118ac5760405162461bcd60e51b8152600401610ac890613539565b6016805491151563010000000263ff00000019909216919091179055565b5f546001600160a01b031633146118f35760405162461bcd60e51b8152600401610ac890613539565b5f5b8181101561182357600160245f85858581811061191457611914613670565b90506020020160208101906119299190613221565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055611959816136ae565b90506118f5565b5f546001600160a01b031633146119895760405162461bcd60e51b8152600401610ac890613539565b80826006546119989190613684565b6119a2919061371f565b6015555050565b606060188054610a0890613501565b5f610a953384610d2e8560405180606001604052806025815260200161384a60259139335f908152601f602090815260408083206001600160a01b038d1684529091529020549190612587565b5f610a9533848461205c565b5f546001600160a01b03163314611a3a5760405162461bcd60e51b8152600401610ac890613539565b60168054911515620100000262ff000019909216919091179055565b5f546001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610ac890613539565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314611aca5760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b03165f908152602160205260409020805460ff19169055565b5f546001600160a01b03163314611b135760405162461bcd60e51b8152600401610ac890613539565b5f8190505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b78919061373e565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be7919061373e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611c30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c54919061373e565b90506001600160a01b038116611dc657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc4919061373e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d33919061373e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611d7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da1919061373e565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611de2565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b5f546001600160a01b03163314611e2f5760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b03165f908152602160205260409020805460ff19166001179055565b5f546001600160a01b03163314611e7b5760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b038116611ee05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac8565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f9b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac8565b6001600160a01b038216611ffc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac8565b6001600160a01b038381165f818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ac8565b6001600160a01b0382166121225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ac8565b5f81116121835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ac8565b6001600160a01b0382165f90815260208052604090205460ff16156121d35760405162461bcd60e51b8152600401610ac890602080825260049082015263149152d560e21b604082015260600190565b6001600160a01b0383165f90815260208052604090205460ff16156122235760405162461bcd60e51b8152600401610ac890602080825260049082015263149152d560e21b604082015260600190565b5f546001600160a01b0384811691161480159061224d57505f546001600160a01b03838116911614155b156122a957601654610100900460ff166122a95760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610ac8565b601a545f906001600160a01b03858116911614806122d45750601a546001600160a01b038481169116145b801561231a57506001600160a01b0384165f9081526021602052604090205460ff168061231857506001600160a01b0383165f9081526021602052604090205460ff165b155b15612323575060015b5f60055411801561236457506001600160a01b0383165f9081526022602052604090205460ff1615801561236457505f546001600160a01b03858116911614155b801561237e57504360045460055461237c919061369b565b115b156123f25760095461238f846116c0565b612399908461369b565b11156123f25760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610ac8565b601354601455600c54601255601654610100900460ff1680156124225750601a546001600160a01b038481169116145b1561244057600e54600d5461243691612621565b601455600f546012555b5f60055411801561245f57504360045460055461245d919061369b565b115b15612486576001600160a01b0383165f9081526020805260409020805460ff191660011790555b5f6005541180156124a457505f546001600160a01b03858116911614155b80156124bf57506004546005546124bb919061369b565b4311155b80156124d457506016546301000000900460ff165b156124e0576103de6014555b60165462010000900460ff161561251f57601654610100900460ff1680156125155750601a546001600160a01b038581169116145b1561251f575f6014555b60165460ff161580156125395750601654610100900460ff165b80156125525750601a546001600160a01b038481169116145b1561257b575f612561306116c0565b90506015548110612579575060155461257981612786565b505b610e428484848461286d565b5f81848411156125aa5760405162461bcd60e51b8152600401610ac89190613195565b505f6125b684866136f8565b95945050505050565b5f805f6125ca612992565b90925090506125d982826125e0565b9250505090565b5f610fdc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b0b565b5f8061262d838561369b565b905083811015610fdc5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ac8565b5f805f805f805f805f6126918a612b37565b9250925092505f805f6126ad8d86866126a86125bf565b612b75565b919f909e50909c50959a5093985091965092945050505050565b5f610fdc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612587565b5f825f0361271757505f610a99565b5f6127228385613684565b90508261272f858361371f565b14610fdc5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ac8565b6016805460ff191660011790556013546010545f916127b5916002916127af9182908790612708565b906125e0565b90505f6127c283836126c7565b90506127cd81612bc1565b60105447905f906127ec906127e39060026125e0565b601354906126c7565b90505f61280d60026127af846127af6010548861270890919063ffffffff16565b90505f612829836127af6011548761270890919063ffffffff16565b905047801561284957601b546128499083906001600160a01b0316612d4a565b8615612859576128598784612d7d565b50506016805460ff19169055505050505050565b60125460145482612882575f60128190556014555b6001600160a01b0386165f9081526023602052604090205460ff1680156128c157506001600160a01b0385165f9081526023602052604090205460ff16155b156128d6576128d1868686612e47565b61297e565b6001600160a01b0386165f9081526023602052604090205460ff1615801561291557506001600160a01b0385165f9081526023602052604090205460ff165b15612925576128d1868686612f66565b6001600160a01b0386165f9081526023602052604090205460ff16801561296357506001600160a01b0385165f9081526023602052604090205460ff165b15612973576128d1868686613009565b61297e868686613077565b82610cce5760129190915560145550505050565b6007546006545f918291825b602554811015612adb5782601d5f602584815481106129bf576129bf613670565b5f9182526020808320909101546001600160a01b031683528201929092526040019020541180612a27575081601e5f60258481548110612a0157612a01613670565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a3d57600754600654945094505050509091565b612a81601d5f60258481548110612a5657612a56613670565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205484906126c7565b9250612ac7601e5f60258481548110612a9c57612a9c613670565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205483906126c7565b915080612ad3816136ae565b91505061299e565b50600654600754612aeb916125e0565b821015612b02576007546006549350935050509091565b90939092509050565b5f8183612b2b5760405162461bcd60e51b8152600401610ac89190613195565b505f6125b6848661371f565b5f805f80612b44856130b7565b90505f612b50866130d3565b90505f612b6782612b6189866126c7565b906126c7565b979296509094509092505050565b5f808080612b838886612708565b90505f612b908887612708565b90505f612b9d8888612708565b90505f612bae82612b6186866126c7565b939b939a50919850919650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612bf457612bf4613670565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c6f919061373e565b81600181518110612c8257612c82613670565b6001600160a01b039283166020918202929092010152601954612ca89130911684611f39565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ce09085905f9086903090429060040161379b565b5f604051808303815f87803b158015612cf7575f80fd5b505af1158015612d09573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d3e9291906137d6565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084905f818181858888f19350505050158015611823573d5f803e3d5ffd5b601954612d959030906001600160a01b031684611f39565b6019546001600160a01b031663f305d7198230855f80612dbc5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612e22573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906116b991906137f6565b5f805f805f80612e568761267f565b6001600160a01b038f165f908152601e6020526040902054959b50939950919750955093509150612e8790886126c7565b6001600160a01b038a165f908152601e6020908152604080832093909355601d90522054612eb590876126c7565b6001600160a01b03808b165f908152601d602052604080822093909355908a1681522054612ee39086612621565b6001600160a01b0389165f908152601d6020526040902055612f04816130ef565b612f0e8483613171565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f5391815260200190565b60405180910390a3505050505050505050565b5f805f805f80612f758761267f565b6001600160a01b038f165f908152601d6020526040902054959b50939950919750955093509150612fa690876126c7565b6001600160a01b03808b165f908152601d6020908152604080832094909455918b168152601e9091522054612fdb9084612621565b6001600160a01b0389165f908152601e6020908152604080832093909355601d90522054612ee39086612621565b5f805f805f806130188761267f565b6001600160a01b038f165f908152601e6020526040902054959b5093995091975095509350915061304990886126c7565b6001600160a01b038a165f908152601e6020908152604080832093909355601d90522054612fa690876126c7565b5f805f805f806130868761267f565b6001600160a01b038f165f908152601d6020526040902054959b50939950919750955093509150612eb590876126c7565b5f610a996103e86127af6012548561270890919063ffffffff16565b5f610a996103e86127af6014548561270890919063ffffffff16565b5f6130f86125bf565b90505f6131058383612708565b305f908152601d60205260409020549091506131219082612621565b305f908152601d602090815260408083209390935560239052205460ff161561182357305f908152601e602052604090205461315d9084612621565b305f908152601e6020526040902055505050565b60075461317e90836126c7565b60075560085461318e9082612621565b6008555050565b5f6020808352835180828501525f5b818110156131c0578581018301518582016040015282016131a4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131f4575f80fd5b50565b5f8060408385031215613208575f80fd5b8235613213816131e0565b946020939093013593505050565b5f60208284031215613231575f80fd5b8135610fdc816131e0565b5f8083601f84011261324c575f80fd5b50813567ffffffffffffffff811115613263575f80fd5b6020830191508360208260051b850101111561327d575f80fd5b9250929050565b5f805f8060408587031215613297575f80fd5b843567ffffffffffffffff808211156132ae575f80fd5b6132ba8883890161323c565b909650945060208701359150808211156132d2575f80fd5b506132df8782880161323c565b95989497509550505050565b5f805f606084860312156132fd575f80fd5b8335613308816131e0565b92506020840135613318816131e0565b929592945050506040919091013590565b5f806040838503121561333a575f80fd5b8235613345816131e0565b91506020830135613355816131e0565b809150509250929050565b80151581146131f4575f80fd5b5f805f6040848603121561337f575f80fd5b833567ffffffffffffffff811115613395575f80fd5b6133a18682870161323c565b90945092505060208401356133b581613360565b809150509250925092565b5f80604083850312156133d1575f80fd5b823561321381613360565b5f602082840312156133ec575f80fd5b5035919050565b5f805f60608486031215613405575f80fd5b505081359360208301359350604090920135919050565b5f806040838503121561342d575f80fd5b82359150602083013561335581613360565b5f805f60408486031215613451575f80fd5b833567ffffffffffffffff811115613467575f80fd5b6134738682870161323c565b909790965060209590950135949350505050565b5f8060208385031215613498575f80fd5b823567ffffffffffffffff8111156134ae575f80fd5b6134ba8582860161323c565b90969095509350505050565b5f602082840312156134d6575f80fd5b8135610fdc81613360565b5f80604083850312156134f2575f80fd5b50508035926020909101359150565b600181811c9082168061351557607f821691505b60208210810361353357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156135bc57815f19048211156135a2576135a261356e565b808516156135af57918102915b93841c9390800290613587565b509250929050565b5f826135d257506001610a99565b816135de57505f610a99565b81600181146135f457600281146135fe5761361a565b6001915050610a99565b60ff84111561360f5761360f61356e565b50506001821b610a99565b5060208310610133831016604e8410600b841016171561363d575081810a610a99565b6136478383613582565b805f190482111561365a5761365a61356e565b029392505050565b5f610fdc60ff8416836135c4565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417610a9957610a9961356e565b80820180821115610a9957610a9961356e565b5f600182016136bf576136bf61356e565b5060010190565b5f602082840312156136d6575f80fd5b5051919050565b5f602082840312156136ed575f80fd5b8151610fdc81613360565b81810381811115610a9957610a9961356e565b634e487b7160e01b5f52603160045260245ffd5b5f8261373957634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561374e575f80fd5b8151610fdc816131e0565b5f8151808452602080850194508084015f5b838110156137905781516001600160a01b03168752958201959082019060010161376b565b509495945050505050565b85815284602082015260a060408201525f6137b960a0830186613759565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f6137ee6040830184613759565b949350505050565b5f805f60608486031215613808575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122066ebce0cb601a36b5d3592b8f0d491dc730372f362dd3768e867b1ce68e678e364736f6c63430008150033

Deployed Bytecode

0x608060405260043610610344575f3560e01c806370a08231116101bd578063a457c2d7116100f2578063ea2f0b3711610092578063f2fde38b1161006d578063f2fde38b14610992578063f3b1e83b146109b1578063fabb0b4f146109c6578063ffb54a99146109db575f80fd5b8063ea2f0b3714610935578063eafb5a3c14610954578063f259c57b14610973575f80fd5b8063cb46accc116100cd578063cb46accc1461089e578063dc44b6a0146108bd578063dd62ed3e146108d2578063deaa59df14610916575f80fd5b8063a457c2d71461084b578063a9059cbb1461086a578063bf56b37114610889575f80fd5b80637dfd50a21161015d57806388f820201161013857806388f82020146107c55780638da5cb5b146107fc5780638f4590d21461081857806395d89b4114610837575f80fd5b80637dfd50a21461077257806384530c461461079157806388790a68146107b0575f80fd5b806372fdf6ee1161019857806372fdf6ee14610714578063743942b6146107295780637598f8bc1461074857806378109e541461075d575f80fd5b806370a08231146106c2578063715018a6146106e157806371b9189c146106f5575f80fd5b80632d8381191161029357806343b127a6116102335780634eeaf4581161020e5780634eeaf4581461064657806352390c02146106655780635d0044ca14610684578063632e5442146106a3575f80fd5b806343b127a6146105e95780634549b0391461060857806349bd5a5e14610627575f80fd5b80633685d4191161026e5780633685d4191461057757806339509351146105965780633bd5d173146105b5578063401aa5c0146105d4575f80fd5b80632d838119146105185780632dd5efe714610537578063313ce56714610556575f80fd5b806318160ddd116102fe5780632691bc80116102d95780632691bc801461049c57806328a23cd1146104bb5780632a720e33146104da5780632d4103d6146104f9575f80fd5b806318160ddd146104485780631e89d5451461045c57806323b872dd1461047d575f80fd5b80630445b6671461034f57806306fdde0314610377578063095ea7b3146103985780630f3a325f146103c757806313114a9d146103fd5780631694505e14610411575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b5061036460155481565b6040519081526020015b60405180910390f35b348015610382575f80fd5b5061038b6109f9565b60405161036e9190613195565b3480156103a3575f80fd5b506103b76103b23660046131f7565b610a89565b604051901515815260200161036e565b3480156103d2575f80fd5b506103b76103e1366004613221565b6001600160a01b03165f90815260208052604090205460ff1690565b348015610408575f80fd5b50600854610364565b34801561041c575f80fd5b50601954610430906001600160a01b031681565b6040516001600160a01b03909116815260200161036e565b348015610453575f80fd5b50600654610364565b348015610467575f80fd5b5061047b610476366004613284565b610a9f565b005b348015610488575f80fd5b506103b76104973660046132eb565b610cd6565b3480156104a7575f80fd5b506016546103b79062010000900460ff1681565b3480156104c6575f80fd5b5061047b6104d5366004613329565b610d3d565b3480156104e5575f80fd5b5061047b6104f436600461336d565b610e48565b348015610504575f80fd5b5061047b6105133660046133c0565b610edd565b348015610523575f80fd5b506103646105323660046133dc565b610f61565b348015610542575f80fd5b5061047b610551366004613221565b610fe3565b348015610561575f80fd5b5060035460405160ff909116815260200161036e565b348015610582575f80fd5b5061047b610591366004613221565b61102f565b3480156105a1575f80fd5b506103b76105b03660046131f7565b6111d9565b3480156105c0575f80fd5b5061047b6105cf3660046133dc565b61120e565b3480156105df575f80fd5b50610364600c5481565b3480156105f4575f80fd5b5061047b6106033660046133f3565b6112f4565b348015610613575f80fd5b5061036461062236600461341c565b61134d565b348015610632575f80fd5b50601a54610430906001600160a01b031681565b348015610651575f80fd5b5061047b6106603660046133f3565b6113d7565b348015610670575f80fd5b5061047b61067f366004613221565b61140e565b34801561068f575f80fd5b5061047b61069e3660046133dc565b6114f3565b3480156106ae575f80fd5b5061047b6106bd36600461343f565b611543565b3480156106cd575f80fd5b506103646106dc366004613221565b6116c0565b3480156106ec575f80fd5b5061047b61171c565b348015610700575f80fd5b5061047b61070f366004613487565b61178d565b34801561071f575f80fd5b50610364600b5481565b348015610734575f80fd5b5061047b610743366004613221565b611828565b348015610753575f80fd5b50610364600f5481565b348015610768575f80fd5b5061036460095481565b34801561077d575f80fd5b5061047b61078c3660046134c6565b611883565b34801561079c575f80fd5b5061047b6107ab366004613487565b6118ca565b3480156107bb575f80fd5b50610364600d5481565b3480156107d0575f80fd5b506103b76107df366004613221565b6001600160a01b03165f9081526023602052604090205460ff1690565b348015610807575f80fd5b505f546001600160a01b0316610430565b348015610823575f80fd5b5061047b6108323660046134e1565b611960565b348015610842575f80fd5b5061038b6119a9565b348015610856575f80fd5b506103b76108653660046131f7565b6119b8565b348015610875575f80fd5b506103b76108843660046131f7565b611a05565b348015610894575f80fd5b5061036460055481565b3480156108a9575f80fd5b5061047b6108b83660046134c6565b611a11565b3480156108c8575f80fd5b50610364600a5481565b3480156108dd575f80fd5b506103646108ec366004613329565b6001600160a01b039182165f908152601f6020908152604080832093909416825291909152205490565b348015610921575f80fd5b5061047b610930366004613221565b611a56565b348015610940575f80fd5b5061047b61094f366004613221565b611aa1565b34801561095f575f80fd5b5061047b61096e366004613221565b611aea565b34801561097e575f80fd5b5061047b61098d366004613221565b611e06565b34801561099d575f80fd5b5061047b6109ac366004613221565b611e52565b3480156109bc575f80fd5b50610364600e5481565b3480156109d1575f80fd5b5061036460045481565b3480156109e6575f80fd5b506016546103b790610100900460ff1681565b606060178054610a0890613501565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3490613501565b8015610a7f5780601f10610a5657610100808354040283529160200191610a7f565b820191905f5260205f20905b815481529060010190602001808311610a6257829003601f168201915b5050505050905090565b5f610a95338484611f39565b5060015b92915050565b5f546001600160a01b03163314610ad15760405162461bcd60e51b8152600401610ac890613539565b60405180910390fd5b6103218310610b385760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610ac8565b828114610b985760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610ac8565b5f805b84811015610bf557600354610bb49060ff16600a613662565b848483818110610bc657610bc6613670565b90506020020135610bd79190613684565b610be1908361369b565b915080610bed816136ae565b915050610b9b565b5080610c00336116c0565b1015610c4e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610ac8565b5f5b84811015610cce57610cbc33878784818110610c6e57610c6e613670565b9050602002016020810190610c839190613221565b600354610c949060ff16600a613662565b878786818110610ca657610ca6613670565b90506020020135610cb79190613684565b61205c565b80610cc6816136ae565b915050610c50565b505050505050565b5f610ce284848461205c565b610d338433610d2e85604051806060016040528060288152602001613822602891396001600160a01b038a165f908152601f602090815260408083203384529091529020549190612587565b611f39565b5060019392505050565b5f546001600160a01b03163314610d665760405162461bcd60e51b8152600401610ac890613539565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce91906136c6565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015610e1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4291906136dd565b50505050565b5f546001600160a01b03163314610e715760405162461bcd60e51b8152600401610ac890613539565b5f5b82811015610e42578160205f868685818110610e9157610e91613670565b9050602002016020810190610ea69190613221565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055610ed6816136ae565b9050610e73565b5f546001600160a01b03163314610f065760405162461bcd60e51b8152600401610ac890613539565b6016805461ff00191661010084151502179055610f223061140e565b601a54610f37906001600160a01b031661140e565b601654610100900460ff168015610f4e5750600554155b15610f5d574360055560048190555b5050565b5f600754821115610fc75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ac8565b5f610fd06125bf565b9050610fdc83826125e0565b9392505050565b5f546001600160a01b0316331461100c5760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b03165f908152602260205260409020805460ff19166001179055565b5f546001600160a01b031633146110585760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b0381165f9081526023602052604090205460ff166110bf5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ac8565b5f5b602554811015610f5d57816001600160a01b0316602582815481106110e8576110e8613670565b5f918252602090912001546001600160a01b0316036111c75760258054611111906001906136f8565b8154811061112157611121613670565b5f91825260209091200154602580546001600160a01b03909216918390811061114c5761114c613670565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff1916905560258054806111a3576111a361370b565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b806111d1816136ae565b9150506110c1565b335f818152601f602090815260408083206001600160a01b03871684529091528120549091610a95918590610d2e9086612621565b335f8181526023602052604090205460ff16156112825760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610ac8565b5f61128c8361267f565b505050506001600160a01b0384165f908152601d60205260409020549192506112b7919050826126c7565b6001600160a01b0383165f908152601d60205260409020556007546112dc90826126c7565b6007556008546112ec9084612621565b600855505050565b5f546001600160a01b0316331461131d5760405162461bcd60e51b8152600401610ac890613539565b600a829055600b819055600c8390556012839055601082905560118190556113458282612621565b601355505050565b5f6006548311156113a05760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ac8565b816113be575f6113af8461267f565b50939550610a99945050505050565b5f6113c88461267f565b50929550610a99945050505050565b5f546001600160a01b031633146114005760405162461bcd60e51b8152600401610ac890613539565b600d91909155600e55600f55565b5f546001600160a01b031633146114375760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b0381165f908152601d60205260409020541561148e576001600160a01b0381165f908152601d602052604090205461147590610f61565b6001600160a01b0382165f908152601e60205260409020555b6001600160a01b03165f818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b5f546001600160a01b0316331461151c5760405162461bcd60e51b8152600401610ac890613539565b61153d816115376103e86006546125e090919063ffffffff16565b90612708565b60095550565b5f546001600160a01b0316331461156c5760405162461bcd60e51b8152600401610ac890613539565b6107d182106115d45760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610ac8565b6003545f9083906115e99060ff16600a613662565b6115f39084613684565b6115fd9190613684565b905080611609336116c0565b10156116575760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610ac8565b5f5b838110156116b9576116a73386868481811061167757611677613670565b905060200201602081019061168c9190613221565b60035461169d9060ff16600a613662565b610cb79087613684565b806116b1816136ae565b915050611659565b5050505050565b6001600160a01b0381165f9081526023602052604081205460ff16156116fb57506001600160a01b03165f908152601e602052604090205490565b6001600160a01b0382165f908152601d6020526040902054610a9990610f61565b5f546001600160a01b031633146117455760405162461bcd60e51b8152600401610ac890613539565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146117b65760405162461bcd60e51b8152600401610ac890613539565b5f5b8181101561182357600160215f8585858181106117d7576117d7613670565b90506020020160208101906117ec9190613221565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905561181c816136ae565b90506117b8565b505050565b5f546001600160a01b031633146118515760405162461bcd60e51b8152600401610ac890613539565b6040516001600160a01b038216904780156108fc02915f818181858888f19350505050158015610f5d573d5f803e3d5ffd5b5f546001600160a01b031633146118ac5760405162461bcd60e51b8152600401610ac890613539565b6016805491151563010000000263ff00000019909216919091179055565b5f546001600160a01b031633146118f35760405162461bcd60e51b8152600401610ac890613539565b5f5b8181101561182357600160245f85858581811061191457611914613670565b90506020020160208101906119299190613221565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055611959816136ae565b90506118f5565b5f546001600160a01b031633146119895760405162461bcd60e51b8152600401610ac890613539565b80826006546119989190613684565b6119a2919061371f565b6015555050565b606060188054610a0890613501565b5f610a953384610d2e8560405180606001604052806025815260200161384a60259139335f908152601f602090815260408083206001600160a01b038d1684529091529020549190612587565b5f610a9533848461205c565b5f546001600160a01b03163314611a3a5760405162461bcd60e51b8152600401610ac890613539565b60168054911515620100000262ff000019909216919091179055565b5f546001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610ac890613539565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314611aca5760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b03165f908152602160205260409020805460ff19169055565b5f546001600160a01b03163314611b135760405162461bcd60e51b8152600401610ac890613539565b5f8190505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b78919061373e565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be7919061373e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611c30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c54919061373e565b90506001600160a01b038116611dc657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc4919061373e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d33919061373e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611d7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da1919061373e565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611de2565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b5f546001600160a01b03163314611e2f5760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b03165f908152602160205260409020805460ff19166001179055565b5f546001600160a01b03163314611e7b5760405162461bcd60e51b8152600401610ac890613539565b6001600160a01b038116611ee05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac8565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f9b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac8565b6001600160a01b038216611ffc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac8565b6001600160a01b038381165f818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ac8565b6001600160a01b0382166121225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ac8565b5f81116121835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ac8565b6001600160a01b0382165f90815260208052604090205460ff16156121d35760405162461bcd60e51b8152600401610ac890602080825260049082015263149152d560e21b604082015260600190565b6001600160a01b0383165f90815260208052604090205460ff16156122235760405162461bcd60e51b8152600401610ac890602080825260049082015263149152d560e21b604082015260600190565b5f546001600160a01b0384811691161480159061224d57505f546001600160a01b03838116911614155b156122a957601654610100900460ff166122a95760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610ac8565b601a545f906001600160a01b03858116911614806122d45750601a546001600160a01b038481169116145b801561231a57506001600160a01b0384165f9081526021602052604090205460ff168061231857506001600160a01b0383165f9081526021602052604090205460ff165b155b15612323575060015b5f60055411801561236457506001600160a01b0383165f9081526022602052604090205460ff1615801561236457505f546001600160a01b03858116911614155b801561237e57504360045460055461237c919061369b565b115b156123f25760095461238f846116c0565b612399908461369b565b11156123f25760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610ac8565b601354601455600c54601255601654610100900460ff1680156124225750601a546001600160a01b038481169116145b1561244057600e54600d5461243691612621565b601455600f546012555b5f60055411801561245f57504360045460055461245d919061369b565b115b15612486576001600160a01b0383165f9081526020805260409020805460ff191660011790555b5f6005541180156124a457505f546001600160a01b03858116911614155b80156124bf57506004546005546124bb919061369b565b4311155b80156124d457506016546301000000900460ff165b156124e0576103de6014555b60165462010000900460ff161561251f57601654610100900460ff1680156125155750601a546001600160a01b038581169116145b1561251f575f6014555b60165460ff161580156125395750601654610100900460ff165b80156125525750601a546001600160a01b038481169116145b1561257b575f612561306116c0565b90506015548110612579575060155461257981612786565b505b610e428484848461286d565b5f81848411156125aa5760405162461bcd60e51b8152600401610ac89190613195565b505f6125b684866136f8565b95945050505050565b5f805f6125ca612992565b90925090506125d982826125e0565b9250505090565b5f610fdc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b0b565b5f8061262d838561369b565b905083811015610fdc5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ac8565b5f805f805f805f805f6126918a612b37565b9250925092505f805f6126ad8d86866126a86125bf565b612b75565b919f909e50909c50959a5093985091965092945050505050565b5f610fdc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612587565b5f825f0361271757505f610a99565b5f6127228385613684565b90508261272f858361371f565b14610fdc5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ac8565b6016805460ff191660011790556013546010545f916127b5916002916127af9182908790612708565b906125e0565b90505f6127c283836126c7565b90506127cd81612bc1565b60105447905f906127ec906127e39060026125e0565b601354906126c7565b90505f61280d60026127af846127af6010548861270890919063ffffffff16565b90505f612829836127af6011548761270890919063ffffffff16565b905047801561284957601b546128499083906001600160a01b0316612d4a565b8615612859576128598784612d7d565b50506016805460ff19169055505050505050565b60125460145482612882575f60128190556014555b6001600160a01b0386165f9081526023602052604090205460ff1680156128c157506001600160a01b0385165f9081526023602052604090205460ff16155b156128d6576128d1868686612e47565b61297e565b6001600160a01b0386165f9081526023602052604090205460ff1615801561291557506001600160a01b0385165f9081526023602052604090205460ff165b15612925576128d1868686612f66565b6001600160a01b0386165f9081526023602052604090205460ff16801561296357506001600160a01b0385165f9081526023602052604090205460ff165b15612973576128d1868686613009565b61297e868686613077565b82610cce5760129190915560145550505050565b6007546006545f918291825b602554811015612adb5782601d5f602584815481106129bf576129bf613670565b5f9182526020808320909101546001600160a01b031683528201929092526040019020541180612a27575081601e5f60258481548110612a0157612a01613670565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a3d57600754600654945094505050509091565b612a81601d5f60258481548110612a5657612a56613670565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205484906126c7565b9250612ac7601e5f60258481548110612a9c57612a9c613670565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205483906126c7565b915080612ad3816136ae565b91505061299e565b50600654600754612aeb916125e0565b821015612b02576007546006549350935050509091565b90939092509050565b5f8183612b2b5760405162461bcd60e51b8152600401610ac89190613195565b505f6125b6848661371f565b5f805f80612b44856130b7565b90505f612b50866130d3565b90505f612b6782612b6189866126c7565b906126c7565b979296509094509092505050565b5f808080612b838886612708565b90505f612b908887612708565b90505f612b9d8888612708565b90505f612bae82612b6186866126c7565b939b939a50919850919650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612bf457612bf4613670565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c6f919061373e565b81600181518110612c8257612c82613670565b6001600160a01b039283166020918202929092010152601954612ca89130911684611f39565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ce09085905f9086903090429060040161379b565b5f604051808303815f87803b158015612cf7575f80fd5b505af1158015612d09573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d3e9291906137d6565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084905f818181858888f19350505050158015611823573d5f803e3d5ffd5b601954612d959030906001600160a01b031684611f39565b6019546001600160a01b031663f305d7198230855f80612dbc5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612e22573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906116b991906137f6565b5f805f805f80612e568761267f565b6001600160a01b038f165f908152601e6020526040902054959b50939950919750955093509150612e8790886126c7565b6001600160a01b038a165f908152601e6020908152604080832093909355601d90522054612eb590876126c7565b6001600160a01b03808b165f908152601d602052604080822093909355908a1681522054612ee39086612621565b6001600160a01b0389165f908152601d6020526040902055612f04816130ef565b612f0e8483613171565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f5391815260200190565b60405180910390a3505050505050505050565b5f805f805f80612f758761267f565b6001600160a01b038f165f908152601d6020526040902054959b50939950919750955093509150612fa690876126c7565b6001600160a01b03808b165f908152601d6020908152604080832094909455918b168152601e9091522054612fdb9084612621565b6001600160a01b0389165f908152601e6020908152604080832093909355601d90522054612ee39086612621565b5f805f805f806130188761267f565b6001600160a01b038f165f908152601e6020526040902054959b5093995091975095509350915061304990886126c7565b6001600160a01b038a165f908152601e6020908152604080832093909355601d90522054612fa690876126c7565b5f805f805f806130868761267f565b6001600160a01b038f165f908152601d6020526040902054959b50939950919750955093509150612eb590876126c7565b5f610a996103e86127af6012548561270890919063ffffffff16565b5f610a996103e86127af6014548561270890919063ffffffff16565b5f6130f86125bf565b90505f6131058383612708565b305f908152601d60205260409020549091506131219082612621565b305f908152601d602090815260408083209390935560239052205460ff161561182357305f908152601e602052604090205461315d9084612621565b305f908152601e6020526040902055505050565b60075461317e90836126c7565b60075560085461318e9082612621565b6008555050565b5f6020808352835180828501525f5b818110156131c0578581018301518582016040015282016131a4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131f4575f80fd5b50565b5f8060408385031215613208575f80fd5b8235613213816131e0565b946020939093013593505050565b5f60208284031215613231575f80fd5b8135610fdc816131e0565b5f8083601f84011261324c575f80fd5b50813567ffffffffffffffff811115613263575f80fd5b6020830191508360208260051b850101111561327d575f80fd5b9250929050565b5f805f8060408587031215613297575f80fd5b843567ffffffffffffffff808211156132ae575f80fd5b6132ba8883890161323c565b909650945060208701359150808211156132d2575f80fd5b506132df8782880161323c565b95989497509550505050565b5f805f606084860312156132fd575f80fd5b8335613308816131e0565b92506020840135613318816131e0565b929592945050506040919091013590565b5f806040838503121561333a575f80fd5b8235613345816131e0565b91506020830135613355816131e0565b809150509250929050565b80151581146131f4575f80fd5b5f805f6040848603121561337f575f80fd5b833567ffffffffffffffff811115613395575f80fd5b6133a18682870161323c565b90945092505060208401356133b581613360565b809150509250925092565b5f80604083850312156133d1575f80fd5b823561321381613360565b5f602082840312156133ec575f80fd5b5035919050565b5f805f60608486031215613405575f80fd5b505081359360208301359350604090920135919050565b5f806040838503121561342d575f80fd5b82359150602083013561335581613360565b5f805f60408486031215613451575f80fd5b833567ffffffffffffffff811115613467575f80fd5b6134738682870161323c565b909790965060209590950135949350505050565b5f8060208385031215613498575f80fd5b823567ffffffffffffffff8111156134ae575f80fd5b6134ba8582860161323c565b90969095509350505050565b5f602082840312156134d6575f80fd5b8135610fdc81613360565b5f80604083850312156134f2575f80fd5b50508035926020909101359150565b600181811c9082168061351557607f821691505b60208210810361353357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156135bc57815f19048211156135a2576135a261356e565b808516156135af57918102915b93841c9390800290613587565b509250929050565b5f826135d257506001610a99565b816135de57505f610a99565b81600181146135f457600281146135fe5761361a565b6001915050610a99565b60ff84111561360f5761360f61356e565b50506001821b610a99565b5060208310610133831016604e8410600b841016171561363d575081810a610a99565b6136478383613582565b805f190482111561365a5761365a61356e565b029392505050565b5f610fdc60ff8416836135c4565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417610a9957610a9961356e565b80820180821115610a9957610a9961356e565b5f600182016136bf576136bf61356e565b5060010190565b5f602082840312156136d6575f80fd5b5051919050565b5f602082840312156136ed575f80fd5b8151610fdc81613360565b81810381811115610a9957610a9961356e565b634e487b7160e01b5f52603160045260245ffd5b5f8261373957634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561374e575f80fd5b8151610fdc816131e0565b5f8151808452602080850194508084015f5b838110156137905781516001600160a01b03168752958201959082019060010161376b565b509495945050505050565b85815284602082015260a060408201525f6137b960a0830186613759565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f6137ee6040830184613759565b949350505050565b5f805f60608486031215613808575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122066ebce0cb601a36b5d3592b8f0d491dc730372f362dd3768e867b1ce68e678e364736f6c63430008150033

Deployed Bytecode Sourcemap

14426:23624:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15512:57;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15512:57:0;;;;;;;;30361:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18469:161::-;;;;;;;;;;-1:-1:-1;18469:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;18469:161:0;1205:187:1;31544:106:0;;;;;;;;;;-1:-1:-1;31544:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;31624:18:0;31600:4;31624:18;;;:9;:18;;;;;;;;;31544:106;31786:87;;;;;;;;;;-1:-1:-1;31855:10:0;;31786:87;;15808:41;;;;;;;;;;-1:-1:-1;15808:41:0;;;;-1:-1:-1;;;;;15808:41:0;;;;;;-1:-1:-1;;;;;1840:32:1;;;1822:51;;1810:2;1795:18;15808:41:0;1649:230:1;30638:95:0;;;;;;;;;;-1:-1:-1;30718:7:0;;30638:95;;36048:701;;;;;;;;;;-1:-1:-1;36048:701:0;;;;;:::i;:::-;;:::i;:::-;;17641:313;;;;;;;;;;-1:-1:-1;17641:313:0;;;;;:::i;:::-;;:::i;15642:34::-;;;;;;;;;;-1:-1:-1;15642:34:0;;;;;;;;;;;35395:171;;;;;;;;;;-1:-1:-1;35395:171:0;;;;;:::i;:::-;;:::i;34835:206::-;;;;;;;;;;-1:-1:-1;34835:206:0;;;;;:::i;:::-;;:::i;33137:337::-;;;;;;;;;;-1:-1:-1;33137:337:0;;;;;:::i;:::-;;:::i;30957:253::-;;;;;;;;;;-1:-1:-1;30957:253:0;;;;;:::i;:::-;;:::i;35741:113::-;;;;;;;;;;-1:-1:-1;35741:113:0;;;;;:::i;:::-;;:::i;30547:83::-;;;;;;;;;;-1:-1:-1;30613:9:0;;30547:83;;30613:9;;;;5236:36:1;;5224:2;5209:18;30547:83:0;5094:184:1;32650:479:0;;;;;;;;;;-1:-1:-1;32650:479:0;;;;;:::i;:::-;;:::i;17962:218::-;;;;;;;;;;-1:-1:-1;17962:218:0;;;;;:::i;:::-;;:::i;18642:377::-;;;;;;;;;;-1:-1:-1;18642:377:0;;;;;:::i;:::-;;:::i;15041:36::-;;;;;;;;;;;;;;;;37274:436;;;;;;;;;;-1:-1:-1;37274:436:0;;;;;:::i;:::-;;:::i;31881:::-;;;;;;;;;;-1:-1:-1;31881:436:0;;;;;:::i;:::-;;:::i;15856:28::-;;;;;;;;;;-1:-1:-1;15856:28:0;;;;-1:-1:-1;;;;;15856:28:0;;;37718:255;;;;;;;;;;-1:-1:-1;37718:255:0;;;;;:::i;:::-;;:::i;32381:261::-;;;;;;;;;;-1:-1:-1;32381:261:0;;;;;:::i;:::-;;:::i;35574:159::-;;;;;;;;;;-1:-1:-1;35574:159:0;;;;;:::i;:::-;;:::i;36757:509::-;;;;;;;;;;-1:-1:-1;36757:509:0;;;;;:::i;:::-;;:::i;30741:208::-;;;;;;;;;;-1:-1:-1;30741:208:0;;;;;:::i;:::-;;:::i;6187:148::-;;;;;;;;;;;;;:::i;34363:198::-;;;;;;;;;;-1:-1:-1;34363:198:0;;;;;:::i;:::-;;:::i;14995:36::-;;;;;;;;;;;;;;;;35252:135;;;;;;;;;;-1:-1:-1;35252:135:0;;;;;:::i;:::-;;:::i;15177:37::-;;;;;;;;;;;;;;;;14858:58;;;;;;;;;;;;;;;;33598:98;;;;;;;;;;-1:-1:-1;33598:98:0;;;;;:::i;:::-;;:::i;35053:188::-;;;;;;;;;;-1:-1:-1;35053:188:0;;;;;:::i;:::-;;:::i;15086:36::-;;;;;;;;;;;;;;;;31658:120;;;;;;;;;;-1:-1:-1;31658:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;31750:20:0;31726:4;31750:20;;;:11;:20;;;;;;;;;31658:120;5962:79;;;;;;;;;;-1:-1:-1;6000:7:0;6027:6;-1:-1:-1;;;;;6027:6:0;5962:79;;35862:178;;;;;;;;;;-1:-1:-1;35862:178:0;;;;;:::i;:::-;;:::i;30452:87::-;;;;;;;;;;;;;:::i;18188:269::-;;;;;;;;;;-1:-1:-1;18188:269:0;;;;;:::i;:::-;;:::i;31218:167::-;;;;;;;;;;-1:-1:-1;31218:167:0;;;;;:::i;:::-;;:::i;14619:29::-;;;;;;;;;;;;;;;;33486:104;;;;;;;;;;-1:-1:-1;33486:104:0;;;;;:::i;:::-;;:::i;14949:35::-;;;;;;;;;;;;;;;;31393:143;;;;;;;;;;-1:-1:-1;31393:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;31501:18:0;;;31474:7;31501:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31393:143;34695:128;;;;;;;;;;-1:-1:-1;34695:128:0;;;;;:::i;:::-;;:::i;34573:110::-;;;;;;;;;;-1:-1:-1;34573:110:0;;;;;:::i;:::-;;:::i;33708:523::-;;;;;;;;;;-1:-1:-1;33708:523:0;;;;;:::i;:::-;;:::i;34243:112::-;;;;;;;;;;-1:-1:-1;34243:112:0;;;;;:::i;:::-;;:::i;6343:244::-;;;;;;;;;;-1:-1:-1;6343:244:0;;;;;:::i;:::-;;:::i;15130:38::-;;;;;;;;;;;;;;;;14583:29;;;;;;;;;;;;;;;;15604:31;;;;;;;;;;-1:-1:-1;15604:31:0;;;;;;;;;;;30361:83;30398:13;30431:5;30424:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30361:83;:::o;18469:161::-;18544:4;18561:39;350:10;18584:7;18593:6;18561:8;:39::i;:::-;-1:-1:-1;18618:4:0;18469:161;;;;;:::o;36048:701::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;;;;;;;;;36188:3:::1;36169:22:::0;::::1;36161:79;;;::::0;-1:-1:-1;;;36161:79:0;;9178:2:1;36161:79:0::1;::::0;::::1;9160:21:1::0;9217:2;9197:18;;;9190:30;9256:34;9236:18;;;9229:62;-1:-1:-1;;;9307:18:1;;;9300:43;9360:19;;36161:79:0::1;8976:409:1::0;36161:79:0::1;36282:33:::0;;::::1;36274:85;;;::::0;-1:-1:-1;;;36274:85:0;;9592:2:1;36274:85:0::1;::::0;::::1;9574:21:1::0;9631:2;9611:18;;;9604:30;9670:34;9650:18;;;9643:62;-1:-1:-1;;;9721:18:1;;;9714:38;9769:19;;36274:85:0::1;9390:404:1::0;36274:85:0::1;36372:12;36405:6:::0;36401:108:::1;36415:20:::0;;::::1;36401:108;;;36487:9;::::0;36483:13:::1;::::0;36487:9:::1;;36483:2;:13;:::i;:::-;36471:6;;36478:1;36471:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36463:34;::::0;:4;:34:::1;:::i;:::-;36456:41:::0;-1:-1:-1;36437:3:0;::::1;::::0;::::1;:::i;:::-;;;;36401:108;;;;36554:4;36529:21;36539:10;36529:9;:21::i;:::-;:29;;36521:69;;;::::0;-1:-1:-1;;;36521:69:0;;12091:2:1;36521:69:0::1;::::0;::::1;12073:21:1::0;12130:2;12110:18;;;12103:30;12169:29;12149:18;;;12142:57;12216:18;;36521:69:0::1;11889:351:1::0;36521:69:0::1;36607:6;36603:139;36617:20:::0;;::::1;36603:139;;;36658:62;36668:10;36679:9;;36689:1;36679:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36709:9;::::0;36705:13:::1;::::0;36709:9:::1;;36705:2;:13;:::i;:::-;36693:6;;36700:1;36693:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36658:9;:62::i;:::-;36639:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36603:139;;;;36148:601;36048:701:::0;;;;:::o;17641:313::-;17739:4;17756:36;17766:6;17774:9;17785:6;17756:9;:36::i;:::-;17803:121;17812:6;350:10;17834:89;17872:6;17834:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17834:19:0;;;;;;:11;:19;;;;;;;;350:10;17834:33;;;;;;;;;;:37;:89::i;:::-;17803:8;:121::i;:::-;-1:-1:-1;17942:4:0;17641:313;;;;;:::o;35395:171::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;35490:30:::1;::::0;-1:-1:-1;;;35490:30:0;;35514:4:::1;35490:30;::::0;::::1;1822:51:1::0;35472:15:0::1;::::0;-1:-1:-1;;;;;35490:15:0;::::1;::::0;::::1;::::0;1795:18:1;;35490:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35531:27;::::0;-1:-1:-1;;;35531:27:0;;-1:-1:-1;;;;;12626:32:1;;;35531:27:0::1;::::0;::::1;12608:51:1::0;12675:18;;;12668:34;;;35472:48:0;;-1:-1:-1;35531:14:0;;::::1;::::0;::::1;::::0;12581:18:1;;35531:27:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35461:105;35395:171:::0;;:::o;34835:206::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;34932:9:::1;34927:107;34943:20:::0;;::::1;34927:107;;;35015:6;34989:9;:23;34999:9;;35009:1;34999:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34989:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34989:23:0;:32;;-1:-1:-1;;34989:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34965:3:::1;::::0;::::1;:::i;:::-;;;34927:107;;33137:337:::0;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;33224:11:::1;:21:::0;;-1:-1:-1;;33224:21:0::1;;::::0;::::1;;;;::::0;;33256:32:::1;33282:4;33256:17;:32::i;:::-;33317:13;::::0;33299:32:::1;::::0;-1:-1:-1;;;;;33317:13:0::1;33299:17;:32::i;:::-;33345:11;::::0;::::1;::::0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;33360:10:0::1;::::0;:15;33345:30:::1;33342:125;;;33404:12;33391:10;:25:::0;33431:10:::1;:24:::0;;;33342:125:::1;33137:337:::0;;:::o;30957:253::-;31023:7;31062;;31051;:18;;31043:73;;;;-1:-1:-1;;;31043:73:0;;13165:2:1;31043:73:0;;;13147:21:1;13204:2;13184:18;;;13177:30;13243:34;13223:18;;;13216:62;-1:-1:-1;;;13294:18:1;;;13287:40;13344:19;;31043:73:0;12963:406:1;31043:73:0;31127:19;31150:10;:8;:10::i;:::-;31127:33;-1:-1:-1;31178:24:0;:7;31127:33;31178:11;:24::i;:::-;31171:31;30957:253;-1:-1:-1;;;30957:253:0:o;35741:113::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35814:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;35814:32:0::1;35842:4;35814:32;::::0;;35741:113::o;32650:479::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32732:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32724:60;;;::::0;-1:-1:-1;;;32724:60:0;;13576:2:1;32724:60:0::1;::::0;::::1;13558:21:1::0;13615:2;13595:18;;;13588:30;13654:29;13634:18;;;13627:57;13701:18;;32724:60:0::1;13374:351:1::0;32724:60:0::1;32800:9;32795:327;32819:9;:16:::0;32815:20;::::1;32795:327;;;32877:7;-1:-1:-1::0;;;;;32861:23:0::1;:9;32871:1;32861:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32861:12:0::1;:23:::0;32857:254:::1;;32920:9;32930:16:::0;;:20:::1;::::0;32949:1:::1;::::0;32930:20:::1;:::i;:::-;32920:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32905:9:::1;:12:::0;;-1:-1:-1;;;;;32920:31:0;;::::1;::::0;32915:1;;32905:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32905:46:0::1;-1:-1:-1::0;;;;;32905:46:0;;::::1;;::::0;;32970:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;33009:11:::1;:20:::0;;;;:28;;-1:-1:-1;;33009:28:0::1;::::0;;33056:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;33056:15:0;;;;;-1:-1:-1;;;;;;33056:15:0::1;::::0;;;;;33137:337;;:::o;32857:254::-:1;32837:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32795:327;;17962:218:::0;350:10;18050:4;18099:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18099:34:0;;;;;;;;;;18050:4;;18067:83;;18090:7;;18099:50;;18138:10;18099:38;:50::i;18642:377::-;350:10;18694:14;18743:19;;;:11;:19;;;;;;;;18742:20;18734:77;;;;-1:-1:-1;;;18734:77:0;;14197:2:1;18734:77:0;;;14179:21:1;14236:2;14216:18;;;14209:30;14275:34;14255:18;;;14248:62;-1:-1:-1;;;14326:18:1;;;14319:42;14378:19;;18734:77:0;13995:408:1;18734:77:0;18823:15;18847:19;18858:7;18847:10;:19::i;:::-;-1:-1:-1;;;;;;;;;18895:15:0;;;;;;:7;:15;;;;;;18822:44;;-1:-1:-1;18895:28:0;;:15;-1:-1:-1;18822:44:0;18895:19;:28::i;:::-;-1:-1:-1;;;;;18877:15:0;;;;;;:7;:15;;;;;:46;18944:7;;:20;;18956:7;18944:11;:20::i;:::-;18934:7;:30;18988:10;;:23;;19003:7;18988:14;:23::i;:::-;18975:10;:36;-1:-1:-1;;;18642:377:0:o;37274:436::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;37405:16:::1;:33:::0;;;37449:16:::1;:33:::0;;;37493:17:::1;:34:::0;;;37540:13:::1;:30:::0;;;37581:12:::1;:29:::0;;;37621:12:::1;:29:::0;;;37672:30:::1;37424:14:::0;37468;37672:16:::1;:30::i;:::-;37661:8;:41:::0;-1:-1:-1;;;37274:436:0:o;31881:::-;31971:7;32010;;31999;:18;;31991:62;;;;-1:-1:-1;;;31991:62:0;;14610:2:1;31991:62:0;;;14592:21:1;14649:2;14629:18;;;14622:30;14688:33;14668:18;;;14661:61;14739:18;;31991:62:0;14408:355:1;31991:62:0;32069:17;32064:246;;32104:15;32128:19;32139:7;32128:10;:19::i;:::-;-1:-1:-1;32103:44:0;;-1:-1:-1;32162:14:0;;-1:-1:-1;;;;;32162:14:0;32064:246;32211:23;32242:19;32253:7;32242:10;:19::i;:::-;-1:-1:-1;32209:52:0;;-1:-1:-1;32276:22:0;;-1:-1:-1;;;;;32276:22:0;37718:255;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;37840:17:::1;:34:::0;;;;37885:17:::1;:34:::0;37930:18:::1;:35:::0;37718:255::o;32381:261::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32458:16:0;::::1;32477:1;32458:16:::0;;;:7:::1;:16;::::0;;;;;:20;32455:108:::1;;-1:-1:-1::0;;;;;32534:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32514:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32495:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32455:108:::1;-1:-1:-1::0;;;;;32573:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32573:27:0::1;32596:4;32573:27:::0;;::::1;::::0;;;32611:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32611:23:0::1;::::0;;::::1;::::0;;32381:261::o;35574:159::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;35679:46:::1;35701:23;35679:17;35691:4;35679:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;35661:15;:64:::0;-1:-1:-1;35574:159:0:o;36757:509::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;36892:4:::1;36873:23:::0;::::1;36865:81;;;::::0;-1:-1:-1;;;36865:81:0;;14970:2:1;36865:81:0::1;::::0;::::1;14952:21:1::0;15009:2;14989:18;;;14982:30;15048:34;15028:18;;;15021:62;-1:-1:-1;;;15099:18:1;;;15092:44;15153:19;;36865:81:0::1;14768:410:1::0;36865:81:0::1;37009:9;::::0;36982:12:::1;::::0;37021:9;;37005:13:::1;::::0;37009:9:::1;;37005:2;:13;:::i;:::-;36997:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;36982:55;;37083:4;37058:21;37068:10;37058:9;:21::i;:::-;:29;;37050:69;;;::::0;-1:-1:-1;;;37050:69:0;;12091:2:1;37050:69:0::1;::::0;::::1;12073:21:1::0;12130:2;12110:18;;;12103:30;12169:29;12149:18;;;12142:57;12216:18;;37050:69:0::1;11889:351:1::0;37050:69:0::1;37136:6;37132:127;37146:20:::0;;::::1;37132:127;;;37187:58;37197:10;37208:9;;37218:1;37208:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37234:9;::::0;37230:13:::1;::::0;37234:9:::1;;37230:2;:13;:::i;:::-;37222:21;::::0;:6;:21:::1;:::i;37187:58::-;37168:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37132:127;;;;36852:414;36757:509:::0;;;:::o;30741:208::-;-1:-1:-1;;;;;30831:20:0;;30807:7;30831:20;;;:11;:20;;;;;;;;30827:59;;;-1:-1:-1;;;;;;30870:16:0;;;;;:7;:16;;;;;;;30741:208::o;30827:59::-;-1:-1:-1;;;;;30924:16:0;;;;;;:7;:16;;;;;;30904:37;;:19;:37::i;6187:148::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;6294:1:::1;6278:6:::0;;6257:40:::1;::::0;-1:-1:-1;;;;;6278:6:0;;::::1;::::0;6257:40:::1;::::0;6294:1;;6257:40:::1;6325:1;6308:19:::0;;-1:-1:-1;;;;;;6308:19:0::1;::::0;;6187:148::o;34363:198::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;34450:9:::1;34445:109;34461:20:::0;;::::1;34445:109;;;34538:4;34503:18;:32;34522:9;;34532:1;34522:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34503:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34503:32:0;:39;;-1:-1:-1;;34503:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34483:3:::1;::::0;::::1;:::i;:::-;;;34445:109;;;;34363:198:::0;;:::o;35252:135::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;35337:42:::1;::::0;-1:-1:-1;;;;;35337:19:0;::::1;::::0;35357:21:::1;35337:42:::0;::::1;;;::::0;::::1;::::0;;;35357:21;35337:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;33598:98:::0;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;33669:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33669:19:0;;::::1;::::0;;;::::1;::::0;;33598:98::o;35053:188::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;35140:9:::1;35135:99;35151:20:::0;;::::1;35135:99;;;35218:4;35193:10;:24;35204:9;;35214:1;35204:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35193:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35193:24:0;:29;;-1:-1:-1;;35193:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35173:3:::1;::::0;::::1;:::i;:::-;;;35135:99;;35862:178:::0;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;36016:16:::1;35996;35986:7;;:26;;;;:::i;:::-;35985:47;;;;:::i;:::-;35969:13;:63:::0;-1:-1:-1;;35862:178:0:o;30452:87::-;30491:13;30524:7;30517:14;;;;;:::i;18188:269::-;18281:4;18298:129;350:10;18321:7;18330:96;18369:15;18330:96;;;;;;;;;;;;;;;;;350:10;18330:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18330:34:0;;;;;;;;;;;;:38;:96::i;31218:167::-;31296:4;31313:42;350:10;31337:9;31348:6;31313:9;:42::i;33486:104::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;33560:14:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33560:22:0;;::::1;::::0;;;::::1;::::0;;33486:104::o;34695:128::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;34772:15:::1;:43:::0;;-1:-1:-1;;;;;;34772:43:0::1;-1:-1:-1::0;;;;;34772:43:0;;;::::1;::::0;;;::::1;::::0;;34695:128::o;34573:110::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34640:27:0::1;34670:5;34640:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34640:35:0::1;::::0;;34573:110::o;33708:523::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;33781:29:::1;33832:9;33781:61;;33853:16;33890:10;-1:-1:-1::0;;;;;33890:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33872:47:0::1;;33928:4;33935:10;-1:-1:-1::0;;;;;33935:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33872:81;::::0;-1:-1:-1;;;;;;33872:81:0::1;::::0;;;;;;-1:-1:-1;;;;;15891:15:1;;;33872:81:0::1;::::0;::::1;15873:34:1::0;15943:15;;15923:18;;;15916:43;15808:18;;33872:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33853:100:::0;-1:-1:-1;;;;;;33968:22:0;::::1;33964:221;;34041:10;-1:-1:-1::0;;;;;34041:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34023:50:0::1;;34082:4;34089:10;-1:-1:-1::0;;;;;34089:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34023:84;::::0;-1:-1:-1;;;;;;34023:84:0::1;::::0;;;;;;-1:-1:-1;;;;;15891:15:1;;;34023:84:0::1;::::0;::::1;15873:34:1::0;15943:15;;15923:18;;;15916:43;15808:18;;34023:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34007:13;:100:::0;;-1:-1:-1;;;;;;34007:100:0::1;-1:-1:-1::0;;;;;34007:100:0;;;::::1;::::0;;;::::1;::::0;;33964:221:::1;;;34149:13;:24:::0;;-1:-1:-1;;;;;;34149:24:0::1;-1:-1:-1::0;;;;;34149:24:0;::::1;;::::0;;33964:221:::1;-1:-1:-1::0;34195:15:0::1;:28:::0;;-1:-1:-1;;;;;;34195:28:0::1;-1:-1:-1::0;;;;;34195:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;33708:523:0:o;34243:112::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34313:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34313:34:0::1;34343:4;34313:34;::::0;;34243:112::o;6343:244::-;6096:6;;-1:-1:-1;;;;;6096:6:0;350:10;6096:22;6088:67;;;;-1:-1:-1;;;6088:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6432:22:0;::::1;6424:73;;;::::0;-1:-1:-1;;;6424:73:0;;16172:2:1;6424:73:0::1;::::0;::::1;16154:21:1::0;16211:2;16191:18;;;16184:30;16250:34;16230:18;;;16223:62;-1:-1:-1;;;16301:18:1;;;16294:36;16347:19;;6424:73:0::1;15970:402:1::0;6424:73:0::1;6534:6;::::0;;6513:38:::1;::::0;-1:-1:-1;;;;;6513:38:0;;::::1;::::0;6534:6;::::1;::::0;6513:38:::1;::::0;::::1;6562:6;:17:::0;;-1:-1:-1;;;;;;6562:17:0::1;-1:-1:-1::0;;;;;6562:17:0;;;::::1;::::0;;;::::1;::::0;;6343:244::o;19027:337::-;-1:-1:-1;;;;;19120:19:0;;19112:68;;;;-1:-1:-1;;;19112:68:0;;16579:2:1;19112:68:0;;;16561:21:1;16618:2;16598:18;;;16591:30;16657:34;16637:18;;;16630:62;-1:-1:-1;;;16708:18:1;;;16701:34;16752:19;;19112:68:0;16377:400:1;19112:68:0;-1:-1:-1;;;;;19199:21:0;;19191:68;;;;-1:-1:-1;;;19191:68:0;;16984:2:1;19191:68:0;;;16966:21:1;17023:2;17003:18;;;16996:30;17062:34;17042:18;;;17035:62;-1:-1:-1;;;17113:18:1;;;17106:32;17155:19;;19191:68:0;16782:398:1;19191:68:0;-1:-1:-1;;;;;19272:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19324:32;;160:25:1;;;19324:32:0;;133:18:1;19324:32:0;;;;;;;19027:337;;;:::o;19506:2258::-;-1:-1:-1;;;;;19628:18:0;;19620:68;;;;-1:-1:-1;;;19620:68:0;;17387:2:1;19620:68:0;;;17369:21:1;17426:2;17406:18;;;17399:30;17465:34;17445:18;;;17438:62;-1:-1:-1;;;17516:18:1;;;17509:35;17561:19;;19620:68:0;17185:401:1;19620:68:0;-1:-1:-1;;;;;19707:16:0;;19699:64;;;;-1:-1:-1;;;19699:64:0;;17793:2:1;19699:64:0;;;17775:21:1;17832:2;17812:18;;;17805:30;17871:34;17851:18;;;17844:62;-1:-1:-1;;;17922:18:1;;;17915:33;17965:19;;19699:64:0;17591:399:1;19699:64:0;19791:1;19782:6;:10;19774:64;;;;-1:-1:-1;;;19774:64:0;;18197:2:1;19774:64:0;;;18179:21:1;18236:2;18216:18;;;18209:30;18275:34;18255:18;;;18248:62;-1:-1:-1;;;18326:18:1;;;18319:39;18375:19;;19774:64:0;17995:405:1;19774:64:0;-1:-1:-1;;;;;19858:13:0;;;;;;:9;:13;;;;;;;;19857:14;19849:31;;;;-1:-1:-1;;;19849:31:0;;;;;;18607:2:1;18589:21;;;18646:1;18626:18;;;18619:29;-1:-1:-1;;;18679:2:1;18664:18;;18657:34;18723:2;18708:18;;18405:327;19849:31:0;-1:-1:-1;;;;;19900:15:0;;;;;;:9;:15;;;;;;;;19899:16;19891:33;;;;-1:-1:-1;;;19891:33:0;;;;;;18607:2:1;18589:21;;;18646:1;18626:18;;;18619:29;-1:-1:-1;;;18679:2:1;18664:18;;18657:34;18723:2;18708:18;;18405:327;19891:33:0;6000:7;6027:6;-1:-1:-1;;;;;19939:14:0;;;6027:6;;19939:14;;;;:30;;-1:-1:-1;6000:7:0;6027:6;-1:-1:-1;;;;;19957:12:0;;;6027:6;;19957:12;;19939:30;19935:84;;;19979:11;;;;;;;19971:48;;;;-1:-1:-1;;;19971:48:0;;18939:2:1;19971:48:0;;;18921:21:1;18978:2;18958:18;;;18951:30;19017:26;18997:18;;;18990:54;19061:18;;19971:48:0;18737:348:1;19971:48:0;20152:13;;20080:12;;-1:-1:-1;;;;;20146:19:0;;;20152:13;;20146:19;;:40;;-1:-1:-1;20173:13:0;;-1:-1:-1;;;;;20169:17:0;;;20173:13;;20169:17;20146:40;20145:99;;;;-1:-1:-1;;;;;;20193:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;20221:22:0;;;;;;:18;:22;;;;;;;;20193:50;20191:53;20145:99;20140:148;;;-1:-1:-1;20272:4:0;20140:148;20314:1;20303:10;;:12;:59;;;;-1:-1:-1;;;;;;20321:22:0;;;;;;:18;:22;;;;;;;;20320:23;:41;;;;-1:-1:-1;6000:7:0;6027:6;-1:-1:-1;;;;;20347:14:0;;;6027:6;;20347:14;;20320:41;20303:105;;;;;20395:12;20381:10;;20368;;:23;;;;:::i;:::-;20367:40;20303:105;20300:246;;;20459:15;;20444:13;20454:2;20444:9;:13::i;:::-;20436:21;;:6;:21;:::i;:::-;:38;;20428:106;;;;-1:-1:-1;;;20428:106:0;;19292:2:1;20428:106:0;;;19274:21:1;19331:2;19311:18;;;19304:30;19370:34;19350:18;;;19343:62;-1:-1:-1;;;19421:18:1;;;19414:32;19463:19;;20428:106:0;19090:398:1;20428:106:0;20575:8;;20559:15;:24;20608:17;;20594:13;:31;20641:11;;;;;;;:34;;;;-1:-1:-1;20662:13:0;;-1:-1:-1;;;;;20656:19:0;;;20662:13;;20656:19;20641:34;20638:177;;;20738:17;;20716;;:40;;:21;:40::i;:::-;20699:15;:57;20785:18;;20771:13;:32;20638:177;20868:1;20857:10;;:12;:56;;;;;20901:12;20887:10;;20874;;:23;;;;:::i;:::-;20873:40;20857:56;20854:109;;;-1:-1:-1;;;;;20933:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;20933:18:0;20947:4;20933:18;;;20854:109;21018:1;21007:10;;:12;:30;;;;-1:-1:-1;6000:7:0;6027:6;-1:-1:-1;;;;;21023:14:0;;;6027:6;;21023:14;;21007:30;:75;;;;;21071:10;;21058;;:23;;;;:::i;:::-;21041:12;:41;;21007:75;:91;;;;-1:-1:-1;21087:11:0;;;;;;;21007:91;21004:154;;;21134:3;21118:15;:19;21004:154;21189:14;;;;;;;21186:144;;;21223:11;;;;;;;:36;;;;-1:-1:-1;21246:13:0;;-1:-1:-1;;;;;21238:21:0;;;21246:13;;21238:21;21223:36;21220:99;;;21301:1;21285:15;:17;21220:99;21363:6;;;;21362:7;:22;;;;-1:-1:-1;21373:11:0;;;;;;;21362:22;:45;;;;-1:-1:-1;21394:13:0;;-1:-1:-1;;;;;21388:19:0;;;21394:13;;21388:19;21362:45;21358:350;;;21432:28;21463:24;21481:4;21463:9;:24::i;:::-;21432:55;;21541:13;;21519:20;:35;21516:169;;-1:-1:-1;21601:13:0;;21637:32;21601:13;21637:10;:32::i;:::-;21409:299;21358:350;21718:38;21733:4;21738:2;21741:6;21748:7;21718:14;:38::i;1663:192::-;1749:7;1785:12;1777:6;;;;1769:29;;;;-1:-1:-1;;;1769:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1809:9:0;1821:5;1825:1;1821;:5;:::i;:::-;1809:17;1663:192;-1:-1:-1;;;;;1663:192:0:o;29212:163::-;29253:7;29274:15;29291;29310:19;:17;:19::i;:::-;29273:56;;-1:-1:-1;29273:56:0;-1:-1:-1;29347:20:0;29273:56;;29347:11;:20::i;:::-;29340:27;;;;29212:163;:::o;2121:132::-;2179:7;2206:39;2210:1;2213;2206:39;;;;;;;;;;;;;;;;;:3;:39::i;1330:181::-;1388:7;;1420:5;1424:1;1420;:5;:::i;:::-;1408:17;;1449:1;1444;:6;;1436:46;;;;-1:-1:-1;;;1436:46:0;;19695:2:1;1436:46:0;;;19677:21:1;19734:2;19714:18;;;19707:30;19773:29;19753:18;;;19746:57;19820:18;;1436:46:0;19493:351:1;28447:419:0;28506:7;28515;28524;28533;28542;28551;28572:23;28597:12;28611:18;28633:20;28645:7;28633:11;:20::i;:::-;28571:82;;;;;;28665:15;28682:23;28707:12;28723:50;28735:7;28744:4;28750:10;28762;:8;:10::i;:::-;28723:11;:50::i;:::-;28664:109;;;;-1:-1:-1;28664:109:0;;-1:-1:-1;28824:15:0;;-1:-1:-1;28841:4:0;;-1:-1:-1;28847:10:0;;-1:-1:-1;28447:419:0;;-1:-1:-1;;;;;28447:419:0:o;1519:136::-;1577:7;1604:43;1608:1;1611;1604:43;;;;;;;;;;;;;;;;;:3;:43::i;1863:250::-;1921:7;1945:1;1950;1945:6;1941:47;;-1:-1:-1;1975:1:0;1968:8;;1941:47;2000:9;2012:5;2016:1;2012;:5;:::i;:::-;2000:17;-1:-1:-1;2045:1:0;2036:5;2040:1;2000:17;2036:5;:::i;:::-;:10;2028:56;;;;-1:-1:-1;;;2028:56:0;;20051:2:1;2028:56:0;;;20033:21:1;20090:2;20070:18;;;20063:30;20129:34;20109:18;;;20102:62;-1:-1:-1;;;20180:18:1;;;20173:31;20221:19;;2028:56:0;19849:397:1;26032:1028:0;16781:6;:13;;-1:-1:-1;;16781:13:0;16790:4;16781:13;;;26220:8:::1;::::0;26188:12:::1;::::0;16781:6;;26149:101:::1;::::0;26248:1:::1;::::0;26149:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;26123:127:::0;-1:-1:-1;26263:20:0::1;26286:41;:20:::0;26123:127;26286:24:::1;:41::i;:::-;26263:64;;26348:30;26365:12;26348:16;:30::i;:::-;26480:12;::::0;26411:21:::1;::::0;26391:17:::1;::::0;26467:33:::1;::::0;26480:19:::1;::::0;26497:1:::1;26480:16;:19::i;:::-;26467:8;::::0;;:12:::1;:33::i;:::-;26445:55;;26513:26;26542:93;26633:1;26542:72;26602:11;26542:41;26570:12;;26542:9;:27;;:41;;;;:::i;:93::-;26513:122;;26656:26;26685:44;26717:11;26685:27;26699:12;;26685:9;:13;;:27;;;;:::i;:44::-;26656:73:::0;-1:-1:-1;26805:21:0::1;26840:22:::0;;26837:102:::1;;26911:15;::::0;26879:48:::1;::::0;26892:18;;-1:-1:-1;;;;;26911:15:0::1;26879:12;:48::i;:::-;26953:19:::0;;26949:104:::1;;26993:48;27006:15;27022:18;26993:12;:48::i;:::-;-1:-1:-1::0;;16817:6:0;:14;;-1:-1:-1;;16817:14:0;;;-1:-1:-1;;;;;;26032:1028:0:o;21772:943::-;21912:13;;21962:15;;21992:7;21988:88;;22031:1;22015:13;:17;;;22047:15;:17;21988:88;-1:-1:-1;;;;;22100:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;22124:22:0;;;;;;:11;:22;;;;;;;;22123:23;22100:46;22096:467;;;22163:48;22185:6;22193:9;22204:6;22163:21;:48::i;:::-;22096:467;;;-1:-1:-1;;;;;22234:19:0;;;;;;:11;:19;;;;;;;;22233:20;:46;;;;-1:-1:-1;;;;;;22257:22:0;;;;;;:11;:22;;;;;;;;22233:46;22229:334;;;22296:46;22316:6;22324:9;22335:6;22296:19;:46::i;22229:334::-;-1:-1:-1;;;;;22364:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;22387:22:0;;;;;;:11;:22;;;;;;;;22364:45;22360:203;;;22426:48;22448:6;22456:9;22467:6;22426:21;:48::i;22360:203::-;22507:44;22525:6;22533:9;22544:6;22507:17;:44::i;:::-;22587:7;22583:125;;22610:13;:38;;;;22663:15;:33;-1:-1:-1;;;;21772:943:0:o;29383:561::-;29480:7;;29516;;29433;;;;;29540:289;29564:9;:16;29560:20;;29540:289;;;29630:7;29606;:21;29614:9;29624:1;29614:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29614:12:0;29606:21;;;;;;;;;;;;;:31;;:66;;;29665:7;29641;:21;29649:9;29659:1;29649:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29649:12:0;29641:21;;;;;;;;;;;;;:31;29606:66;29602:97;;;29682:7;;29691;;29674:25;;;;;;;29383:561;;:::o;29602:97::-;29724:34;29736:7;:21;29744:9;29754:1;29744:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29744:12:0;29736:21;;;;;;;;;;;;;29724:7;;:11;:34::i;:::-;29714:44;;29783:34;29795:7;:21;29803:9;29813:1;29803:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29803:12:0;29795:21;;;;;;;;;;;;;29783:7;;:11;:34::i;:::-;29773:44;-1:-1:-1;29582:3:0;;;;:::i;:::-;;;;29540:289;;;-1:-1:-1;29865:7:0;;29853;;:20;;:11;:20::i;:::-;29843:7;:30;29839:61;;;29883:7;;29892;;29875:25;;;;;;29383:561;;:::o;29839:61::-;29919:7;;29928;;-1:-1:-1;29383:561:0;-1:-1:-1;29383:561:0:o;2261:278::-;2347:7;2382:12;2375:5;2367:28;;;;-1:-1:-1;;;2367:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2406:9:0;2418:5;2422:1;2418;:5;:::i;28874:330::-;28934:7;28943;28952;28972:12;28987:24;29003:7;28987:15;:24::i;:::-;28972:39;;29022:18;29043:30;29065:7;29043:21;:30::i;:::-;29022:51;-1:-1:-1;29084:23:0;29110:33;29022:51;29110:17;:7;29122:4;29110:11;:17::i;:::-;:21;;:33::i;:::-;29084:59;29179:4;;-1:-1:-1;29185:10:0;;-1:-1:-1;28874:330:0;;-1:-1:-1;;;28874:330:0:o;25206:429::-;25321:7;;;;25377:24;:7;25389:11;25377;:24::i;:::-;25359:42;-1:-1:-1;25412:12:0;25427:21;:4;25436:11;25427:8;:21::i;:::-;25412:36;-1:-1:-1;25459:18:0;25480:27;:10;25495:11;25480:14;:27::i;:::-;25459:48;-1:-1:-1;25518:23:0;25544:33;25459:48;25544:17;:7;25556:4;25544:11;:17::i;:33::-;25596:7;;;;-1:-1:-1;25622:4:0;;-1:-1:-1;25206:429:0;;-1:-1:-1;;;;;;;25206:429:0:o;27194:666::-;27344:16;;;27358:1;27344:16;;;;;;;;27320:21;;27344:16;;;;;;;;;;-1:-1:-1;27344:16:0;27320:40;;27389:4;27371;27376:1;27371:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27371:23:0;;;:7;;;;;;;;;;:23;;;;27415:15;;:22;;;-1:-1:-1;;;27415:22:0;;;;:15;;;;;:20;;:22;;;;;27371:7;;27415:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27405:4;27410:1;27405:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27405:32:0;;;:7;;;;;;;;;:32;27482:15;;27450:62;;27467:4;;27482:15;27500:11;27450:8;:62::i;:::-;27551:15;;:240;;-1:-1:-1;;;27551:240:0;;-1:-1:-1;;;;;27551:15:0;;;;:66;;:240;;27632:11;;27551:15;;27702:4;;27729;;27765:15;;27551:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27817:35;27834:11;27847:4;27817:35;;;;;;;:::i;:::-;;;;;;;;27249:611;27194:666;:::o;27072:111::-;27152:23;;-1:-1:-1;;;;;27152:15:0;;;:23;;;;;27168:6;;27152:23;;;;27168:6;27152:15;:23;;;;;;;;;;;;;;;;;;;27868:513;28048:15;;28016:62;;28033:4;;-1:-1:-1;;;;;28048:15:0;28066:11;28016:8;:62::i;:::-;28121:15;;-1:-1:-1;;;;;28121:15:0;:31;28160:9;28193:4;28213:11;28121:15;;28325:7;6000;6027:6;-1:-1:-1;;;;;6027:6:0;;5962:79;28325:7;28121:252;;;;;;-1:-1:-1;;;;;;28121:252:0;;;-1:-1:-1;;;;;22132:15:1;;;28121:252:0;;;22114:34:1;22164:18;;;22157:34;;;;22207:18;;;22200:34;;;;22250:18;;;22243:34;22314:15;;;22293:19;;;22286:44;28347:15:0;22346:19:1;;;22339:35;22048:19;;28121:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23827:566::-;23930:15;23947:23;23972:12;23986:23;24011:12;24025:18;24047:19;24058:7;24047:10;:19::i;:::-;-1:-1:-1;;;;;24095:15:0;;;;;;:7;:15;;;;;;23929:137;;-1:-1:-1;23929:137:0;;-1:-1:-1;23929:137:0;;-1:-1:-1;23929:137:0;-1:-1:-1;23929:137:0;-1:-1:-1;23929:137:0;-1:-1:-1;24095:28:0;;24115:7;24095:19;:28::i;:::-;-1:-1:-1;;;;;24077:15:0;;;;;;:7;:15;;;;;;;;:46;;;;24152:7;:15;;;;:28;;24172:7;24152:19;:28::i;:::-;-1:-1:-1;;;;;24134:15:0;;;;;;;:7;:15;;;;;;:46;;;;24212:18;;;;;;;:39;;24235:15;24212:22;:39::i;:::-;-1:-1:-1;;;;;24191:18:0;;;;;;:7;:18;;;;;:60;24265:26;24280:10;24265:14;:26::i;:::-;24302:23;24314:4;24320;24302:11;:23::i;:::-;24358:9;-1:-1:-1;;;;;24341:44:0;24350:6;-1:-1:-1;;;;;24341:44:0;;24369:15;24341:44;;;;160:25:1;;148:2;133:18;;14:177;24341:44:0;;;;;;;;23918:475;;;;;;23827:566;;;:::o;23233:586::-;23334:15;23351:23;23376:12;23390:23;23415:12;23429:18;23451:19;23462:7;23451:10;:19::i;:::-;-1:-1:-1;;;;;23499:15:0;;;;;;:7;:15;;;;;;23333:137;;-1:-1:-1;23333:137:0;;-1:-1:-1;23333:137:0;;-1:-1:-1;23333:137:0;-1:-1:-1;23333:137:0;-1:-1:-1;23333:137:0;-1:-1:-1;23499:28:0;;23333:137;23499:19;:28::i;:::-;-1:-1:-1;;;;;23481:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;23559:18;;;;;:7;:18;;;;;:39;;23582:15;23559:22;:39::i;:::-;-1:-1:-1;;;;;23538:18:0;;;;;;:7;:18;;;;;;;;:60;;;;23630:7;:18;;;;:39;;23653:15;23630:22;:39::i;24401:642::-;24504:15;24521:23;24546:12;24560:23;24585:12;24599:18;24621:19;24632:7;24621:10;:19::i;:::-;-1:-1:-1;;;;;24669:15:0;;;;;;:7;:15;;;;;;24503:137;;-1:-1:-1;24503:137:0;;-1:-1:-1;24503:137:0;;-1:-1:-1;24503:137:0;-1:-1:-1;24503:137:0;-1:-1:-1;24503:137:0;-1:-1:-1;24669:28:0;;24689:7;24669:19;:28::i;:::-;-1:-1:-1;;;;;24651:15:0;;;;;;:7;:15;;;;;;;;:46;;;;24726:7;:15;;;;:28;;24746:7;24726:19;:28::i;22723:502::-;22822:15;22839:23;22864:12;22878:23;22903:12;22917:18;22939:19;22950:7;22939:10;:19::i;:::-;-1:-1:-1;;;;;22987:15:0;;;;;;:7;:15;;;;;;22821:137;;-1:-1:-1;22821:137:0;;-1:-1:-1;22821:137:0;;-1:-1:-1;22821:137:0;-1:-1:-1;22821:137:0;-1:-1:-1;22821:137:0;-1:-1:-1;22987:28:0;;22821:137;22987:19;:28::i;29956:160::-;30020:7;30047:61;30092:5;30047:26;30059:13;;30047:7;:11;;:26;;;;:::i;30128:168::-;30198:7;30225:63;30272:5;30225:28;30237:15;;30225:7;:11;;:28;;;;:::i;25647:355::-;25710:19;25733:10;:8;:10::i;:::-;25710:33;-1:-1:-1;25754:18:0;25775:27;:10;25710:33;25775:14;:27::i;:::-;25854:4;25838:22;;;;:7;:22;;;;;;25754:48;;-1:-1:-1;25838:38:0;;25754:48;25838:26;:38::i;:::-;25829:4;25813:22;;;;:7;:22;;;;;;;;:63;;;;25890:11;:26;;;;;;25887:107;;;25972:4;25956:22;;;;:7;:22;;;;;;:38;;25983:10;25956:26;:38::i;:::-;25947:4;25931:22;;;;:7;:22;;;;;:63;25699:303;;25647:355;:::o;25051:147::-;25129:7;;:17;;25141:4;25129:11;:17::i;:::-;25119:7;:27;25170:10;;:20;;25185:4;25170:14;:20::i;:::-;25157:10;:33;-1:-1:-1;;25051:147:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1884:367::-;1947:8;1957:6;2011:3;2004:4;1996:6;1992:17;1988:27;1978:55;;2029:1;2026;2019:12;1978:55;-1:-1:-1;2052:20:1;;2095:18;2084:30;;2081:50;;;2127:1;2124;2117:12;2081:50;2164:4;2156:6;2152:17;2140:29;;2224:3;2217:4;2207:6;2204:1;2200:14;2192:6;2188:27;2184:38;2181:47;2178:67;;;2241:1;2238;2231:12;2178:67;1884:367;;;;;:::o;2256:773::-;2378:6;2386;2394;2402;2455:2;2443:9;2434:7;2430:23;2426:32;2423:52;;;2471:1;2468;2461:12;2423:52;2511:9;2498:23;2540:18;2581:2;2573:6;2570:14;2567:34;;;2597:1;2594;2587:12;2567:34;2636:70;2698:7;2689:6;2678:9;2674:22;2636:70;:::i;:::-;2725:8;;-1:-1:-1;2610:96:1;-1:-1:-1;2813:2:1;2798:18;;2785:32;;-1:-1:-1;2829:16:1;;;2826:36;;;2858:1;2855;2848:12;2826:36;;2897:72;2961:7;2950:8;2939:9;2935:24;2897:72;:::i;:::-;2256:773;;;;-1:-1:-1;2988:8:1;-1:-1:-1;;;;2256:773:1:o;3034:456::-;3111:6;3119;3127;3180:2;3168:9;3159:7;3155:23;3151:32;3148:52;;;3196:1;3193;3186:12;3148:52;3235:9;3222:23;3254:31;3279:5;3254:31;:::i;:::-;3304:5;-1:-1:-1;3361:2:1;3346:18;;3333:32;3374:33;3333:32;3374:33;:::i;:::-;3034:456;;3426:7;;-1:-1:-1;;;3480:2:1;3465:18;;;;3452:32;;3034:456::o;3495:401::-;3576:6;3584;3637:2;3625:9;3616:7;3612:23;3608:32;3605:52;;;3653:1;3650;3643:12;3605:52;3692:9;3679:23;3711:31;3736:5;3711:31;:::i;:::-;3761:5;-1:-1:-1;3818:2:1;3803:18;;3790:32;3831:33;3790:32;3831:33;:::i;:::-;3883:7;3873:17;;;3495:401;;;;;:::o;3901:118::-;3987:5;3980:13;3973:21;3966:5;3963:32;3953:60;;4009:1;4006;3999:12;4024:566;4116:6;4124;4132;4185:2;4173:9;4164:7;4160:23;4156:32;4153:52;;;4201:1;4198;4191:12;4153:52;4241:9;4228:23;4274:18;4266:6;4263:30;4260:50;;;4306:1;4303;4296:12;4260:50;4345:70;4407:7;4398:6;4387:9;4383:22;4345:70;:::i;:::-;4434:8;;-1:-1:-1;4319:96:1;-1:-1:-1;;4519:2:1;4504:18;;4491:32;4532:28;4491:32;4532:28;:::i;:::-;4579:5;4569:15;;;4024:566;;;;;:::o;4595:309::-;4660:6;4668;4721:2;4709:9;4700:7;4696:23;4692:32;4689:52;;;4737:1;4734;4727:12;4689:52;4776:9;4763:23;4795:28;4817:5;4795:28;:::i;4909:180::-;4968:6;5021:2;5009:9;5000:7;4996:23;4992:32;4989:52;;;5037:1;5034;5027:12;4989:52;-1:-1:-1;5060:23:1;;4909:180;-1:-1:-1;4909:180:1:o;5283:316::-;5360:6;5368;5376;5429:2;5417:9;5408:7;5404:23;5400:32;5397:52;;;5445:1;5442;5435:12;5397:52;-1:-1:-1;;5468:23:1;;;5538:2;5523:18;;5510:32;;-1:-1:-1;5589:2:1;5574:18;;;5561:32;;5283:316;-1:-1:-1;5283:316:1:o;5604:309::-;5669:6;5677;5730:2;5718:9;5709:7;5705:23;5701:32;5698:52;;;5746:1;5743;5736:12;5698:52;5782:9;5769:23;5759:33;;5842:2;5831:9;5827:18;5814:32;5855:28;5877:5;5855:28;:::i;6126:505::-;6221:6;6229;6237;6290:2;6278:9;6269:7;6265:23;6261:32;6258:52;;;6306:1;6303;6296:12;6258:52;6346:9;6333:23;6379:18;6371:6;6368:30;6365:50;;;6411:1;6408;6401:12;6365:50;6450:70;6512:7;6503:6;6492:9;6488:22;6450:70;:::i;:::-;6539:8;;6424:96;;-1:-1:-1;6621:2:1;6606:18;;;;6593:32;;6126:505;-1:-1:-1;;;;6126:505:1:o;6636:437::-;6722:6;6730;6783:2;6771:9;6762:7;6758:23;6754:32;6751:52;;;6799:1;6796;6789:12;6751:52;6839:9;6826:23;6872:18;6864:6;6861:30;6858:50;;;6904:1;6901;6894:12;6858:50;6943:70;7005:7;6996:6;6985:9;6981:22;6943:70;:::i;:::-;7032:8;;6917:96;;-1:-1:-1;6636:437:1;-1:-1:-1;;;;6636:437:1:o;7338:241::-;7394:6;7447:2;7435:9;7426:7;7422:23;7418:32;7415:52;;;7463:1;7460;7453:12;7415:52;7502:9;7489:23;7521:28;7543:5;7521:28;:::i;7584:248::-;7652:6;7660;7713:2;7701:9;7692:7;7688:23;7684:32;7681:52;;;7729:1;7726;7719:12;7681:52;-1:-1:-1;;7752:23:1;;;7822:2;7807:18;;;7794:32;;-1:-1:-1;7584:248:1:o;8230:380::-;8309:1;8305:12;;;;8352;;;8373:61;;8427:4;8419:6;8415:17;8405:27;;8373:61;8480:2;8472:6;8469:14;8449:18;8446:38;8443:161;;8526:10;8521:3;8517:20;8514:1;8507:31;8561:4;8558:1;8551:15;8589:4;8586:1;8579:15;8443:161;;8230:380;;;:::o;8615:356::-;8817:2;8799:21;;;8836:18;;;8829:30;8895:34;8890:2;8875:18;;8868:62;8962:2;8947:18;;8615:356::o;9799:127::-;9860:10;9855:3;9851:20;9848:1;9841:31;9891:4;9888:1;9881:15;9915:4;9912:1;9905:15;9931:422;10020:1;10063:5;10020:1;10077:270;10098:7;10088:8;10085:21;10077:270;;;10157:4;10153:1;10149:6;10145:17;10139:4;10136:27;10133:53;;;10166:18;;:::i;:::-;10216:7;10206:8;10202:22;10199:55;;;10236:16;;;;10199:55;10315:22;;;;10275:15;;;;10077:270;;;10081:3;9931:422;;;;;:::o;10358:806::-;10407:5;10437:8;10427:80;;-1:-1:-1;10478:1:1;10492:5;;10427:80;10526:4;10516:76;;-1:-1:-1;10563:1:1;10577:5;;10516:76;10608:4;10626:1;10621:59;;;;10694:1;10689:130;;;;10601:218;;10621:59;10651:1;10642:10;;10665:5;;;10689:130;10726:3;10716:8;10713:17;10710:43;;;10733:18;;:::i;:::-;-1:-1:-1;;10789:1:1;10775:16;;10804:5;;10601:218;;10903:2;10893:8;10890:16;10884:3;10878:4;10875:13;10871:36;10865:2;10855:8;10852:16;10847:2;10841:4;10838:12;10834:35;10831:77;10828:159;;;-1:-1:-1;10940:19:1;;;10972:5;;10828:159;11019:34;11044:8;11038:4;11019:34;:::i;:::-;11089:6;11085:1;11081:6;11077:19;11068:7;11065:32;11062:58;;;11100:18;;:::i;:::-;11138:20;;10358:806;-1:-1:-1;;;10358:806:1:o;11169:140::-;11227:5;11256:47;11297:4;11287:8;11283:19;11277:4;11256:47;:::i;11314:127::-;11375:10;11370:3;11366:20;11363:1;11356:31;11406:4;11403:1;11396:15;11430:4;11427:1;11420:15;11446:168;11519:9;;;11550;;11567:15;;;11561:22;;11547:37;11537:71;;11588:18;;:::i;11619:125::-;11684:9;;;11705:10;;;11702:36;;;11718:18;;:::i;11749:135::-;11788:3;11809:17;;;11806:43;;11829:18;;:::i;:::-;-1:-1:-1;11876:1:1;11865:13;;11749:135::o;12245:184::-;12315:6;12368:2;12356:9;12347:7;12343:23;12339:32;12336:52;;;12384:1;12381;12374:12;12336:52;-1:-1:-1;12407:16:1;;12245:184;-1:-1:-1;12245:184:1:o;12713:245::-;12780:6;12833:2;12821:9;12812:7;12808:23;12804:32;12801:52;;;12849:1;12846;12839:12;12801:52;12881:9;12875:16;12900:28;12922:5;12900:28;:::i;13730:128::-;13797:9;;;13818:11;;;13815:37;;;13832:18;;:::i;13863:127::-;13924:10;13919:3;13915:20;13912:1;13905:31;13955:4;13952:1;13945:15;13979:4;13976:1;13969:15;15183:217;15223:1;15249;15239:132;;15293:10;15288:3;15284:20;15281:1;15274:31;15328:4;15325:1;15318:15;15356:4;15353:1;15346:15;15239:132;-1:-1:-1;15385:9:1;;15183:217::o;15405:251::-;15475:6;15528:2;15516:9;15507:7;15503:23;15499:32;15496:52;;;15544:1;15541;15534:12;15496:52;15576:9;15570:16;15595:31;15620:5;15595:31;:::i;20383:461::-;20436:3;20474:5;20468:12;20501:6;20496:3;20489:19;20527:4;20556:2;20551:3;20547:12;20540:19;;20593:2;20586:5;20582:14;20614:1;20624:195;20638:6;20635:1;20632:13;20624:195;;;20703:13;;-1:-1:-1;;;;;20699:39:1;20687:52;;20759:12;;;;20794:15;;;;20735:1;20653:9;20624:195;;;-1:-1:-1;20835:3:1;;20383:461;-1:-1:-1;;;;;20383:461:1:o;20849:582::-;21148:6;21137:9;21130:25;21191:6;21186:2;21175:9;21171:18;21164:34;21234:3;21229:2;21218:9;21214:18;21207:31;21111:4;21255:57;21307:3;21296:9;21292:19;21284:6;21255:57;:::i;:::-;-1:-1:-1;;;;;21348:32:1;;;;21343:2;21328:18;;21321:60;-1:-1:-1;21412:3:1;21397:19;21390:35;21247:65;20849:582;-1:-1:-1;;;20849:582:1:o;21436:332::-;21643:6;21632:9;21625:25;21686:2;21681;21670:9;21666:18;21659:30;21606:4;21706:56;21758:2;21747:9;21743:18;21735:6;21706:56;:::i;:::-;21698:64;21436:332;-1:-1:-1;;;;21436:332:1:o;22385:306::-;22473:6;22481;22489;22542:2;22530:9;22521:7;22517:23;22513:32;22510:52;;;22558:1;22555;22548:12;22510:52;22587:9;22581:16;22571:26;;22637:2;22626:9;22622:18;22616:25;22606:35;;22681:2;22670:9;22666:18;22660:25;22650:35;;22385:306;;;;;:::o

Swarm Source

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