ETH Price: $2,950.73 (-2.11%)
Gas: 3 Gwei

Token

Archie Neko (ARCHIE)
 

Overview

Max Total Supply

10,000,000,000,000,000,000,000 ARCHIE

Holders

1,032

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
13,841,539,639,901,122,032.071984925 ARCHIE

Value
$0.00
0xc5b1a14709c4c735829c62b248ca37f5e75100c9
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Archie Neko token is based on passive income for average holders with 6% reflections paid on buy, sell and transfer.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ArhcieNeko

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-24
*/

/**
 *Submitted for verification at Etherscan.io on 2022-02-25
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.9;
 
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;

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

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

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

library Address {

    function isContract(address account) internal view returns (bool) {

        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        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");

        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
   address private _owner;

   event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
   
   /**
    * @dev Initializes the contract setting the deployer as the initial owner.
    */
   constructor () {
       address msgSender = _msgSender();
       _owner = msgSender;
       emit OwnershipTransferred(address(0), msgSender);
   }

   /**
    * @dev Returns the address of the current owner.
    */
   function owner() public view returns (address) {
       return _owner;
   }

   /**
    * @dev Throws if called by any account other than the owner.
    */
   modifier onlyOwner() {
       require(_owner == _msgSender(), "Ownable: caller is not the owner");
       _;
   }

   /**
    * @dev Leaves the contract without owner. It will not be possible to call
    * `onlyOwner` functions anymore. Can only be called by the current owner.
    *
    * NOTE: Renouncing ownership will leave the contract without an owner,
    * thereby removing any functionality that is only available to the owner.
    */
   function renounceOwnership() public virtual onlyOwner {
       emit OwnershipTransferred(_owner, address(0));
       _owner = address(0);
   }

   /**
    * @dev Transfers ownership of the contract to a new account (`newOwner`).
    * Can only be called by the current owner.
    */
   function transferOwnership(address newOwner) public virtual onlyOwner {
       require(newOwner != address(0), "Ownable: new owner is the zero address");
       emit OwnershipTransferred(_owner, newOwner);
       _owner = newOwner;
   }
}

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

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

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

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

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

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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


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

    struct transactionDetailData {
        uint256 amount;
        uint256 timeStamp;
        bool isLocked;
        uint256 lockedTime;
        uint256 lockPeriod;
    }

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances; 
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => transactionDetailData) private transactionData;
    mapping (address => bool) public automatedMarketMakerPairs;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    address[] private _excluded;

    bool _tradingActive = true;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    string private _name = "Archie Neko";
    string private _symbol = "ARCHIE";
    uint8 private _decimals = 9;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10 * 10 ** 21 * 10 ** _decimals;//
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    uint256 public _liquidityTax;
    uint256 public _liquidityBuyTax = 3;
    uint256 public _liquiditySellTax = 4;

    uint256 public _marketingTax;
    uint256 public _marketingBuyTax = 3;
    uint256 public _marketingSellTax = 5;

    uint256 public _treasuryTax;
    uint256 public _treasuryBuyTax = 2;
    uint256 public _treasurySellTax = 2;

    uint256 public _foundationTax;
    uint256 public _foundationBuyTax = 1;
    uint256 public _foundationSellTax = 3;
    
    uint256 public _reflectionTax;
    uint256 public _reflectionBuyTax = 6;
    uint256 public _reflectionSellTax = 6;

    uint256 public _totalTax;

    IUniswapV2Router02 public  uniswapV2Router;
    address public uniswapV2Pair;
    IERC20 public WETH;

    address public _ownerAddress = 0x0f7B55e157f91528f1eE480727785F68ffDF8627;
    address public _marketingAddress = 0xa6832d7e1d1f2D23eFFE816819f16917e9C146A5;
    address public _treasuryAddress = 0xeF07A2Cd176001DD1F976efBF0D7F00A39B9D3cA;
    address public _foundationAddress = 0x13498081b989F9351FEad7802164Ae374bc7300f;

    address public constant _deadAdderess = address(0xdead);

    uint256 private numTokensSellToAddToLiquidity = _tTotal / 500;
    uint256 public _maxwalletamount = _tTotal / 100;
    uint256 public _dailyTimeLimit = 24 hours;
    uint256 public _dailymaxTxAmount = 24 * 10 ** 18;
    uint256 public _maxTxAmount = 3 * 10 ** 18;

    uint256 public _tokenAmountForMarketingTax;
    uint256 public _tokenAmountForFoundationTax;
    uint256 public _tokenAmountForTreasuryTax;
    uint256 public _tokenAmountForLiquidityTax;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event ExcludeFromReward(address account);
    event IncludeInReward(address account);
    event ExcludeFromFee(address account);
    event IncludeInFee(address account);
    event SellTaxPercent(uint256 reflectionSellTax, uint256 liquiditySellTax, uint256 marketingSellTax, uint256 treasurySellTax, uint256 foundationSellTax);
    event BuyTaxPercnetUpdate(uint256 reflectionBuyTax, uint256 liquidityBuyTax, uint256 marketingBuyTax, uint256 treasuryBuyTax, uint256 foundationBuyTax);
    event MarketingAddressUpdate(address marketingAddress);
    event TreasuryAddressUpdate(address treasuryAddress);
    event FoundationAddressUpdate(address foundationAddress);
    event EnableTradingUpdate(bool tradingActive);
    event NumTokenSellToAddToLiquidityPercentageAndMaxwalletAmount(uint256 _numTokensSellToAddToLiquidityPercentage, uint256 _maxwalletamountPercentage);
    event DaiyMaxTxAmountAndMaxTxAmountUpdate(uint256 dailymaxTxAmount, uint256 maxTxAmount);
    event AutomatedMarketMakerPairsUpdate(address newPair);
    event LockAccount(address account, bool enabled, uint256 lockPeriod);
    event UnlockAccount(address account, bool enabled);
    event UpdateAccountMaxWalletLimit(address account, bool enabled);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () public {
        _rOwned[_ownerAddress] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        WETH = IERC20(_uniswapV2Router.WETH());

        _isExcludedFromFee[_ownerAddress] = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcluded[_deadAdderess] = true;
        _isExcluded[uniswapV2Pair] = true;
        automatedMarketMakerPairs[uniswapV2Pair] = true;
        automatedMarketMakerPairs[address(uniswapV2Router)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    // ERC-20 standard functions

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

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

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

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

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

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

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

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

    function _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 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 burn(uint256 tBurn) external {

       address sender = _msgSender();
       require(sender != address(0), "ERC20: burn from the zero address");
       require(sender != address(_deadAdderess), "ERC20: burn from the burn address");

       uint256 balance = balanceOf(sender);
       require(balance >= tBurn, "ERC20: burn amount exceeds balance");

       uint256 rBurn = tBurn.mul(_getRate());

       _rOwned[sender] = _rOwned[sender].sub(rBurn);
       
       if (_isExcluded[sender])
           _tOwned[sender] = _tOwned[sender].sub(tBurn);

       _burnTokens( sender, tBurn, rBurn );
    }

    function _burnTokens(address sender, uint256 tBurn, uint256 rBurn) internal {

       _rOwned[_deadAdderess] = _rOwned[_deadAdderess].add(rBurn);
       if (_isExcluded[_deadAdderess])
           _tOwned[_deadAdderess] = _tOwned[_deadAdderess].add(tBurn);

       emit Transfer(sender, _deadAdderess, tBurn);
    }

    function _transfer(
       address from,
       address to,
       uint256 amount
    ) internal {
       require(from != address(0), "ERC20: transfer from the zero address");
       require(to != address(0), "ERC20: transfer to the zero address");
       require(amount > 0, "Transfer amount must be greater than zero");
       if(transactionData[from].isLocked && block.timestamp >= transactionData[from].lockedTime + transactionData[from].lockPeriod) {
           transactionData[from].isLocked = false;
           transactionData[from].lockPeriod = 0;
           transactionData[from].lockedTime = 0;
       } 

       if (transactionData[from].isLocked && block.timestamp < transactionData[from].lockedTime + transactionData[from].lockPeriod) {
           require(!transactionData[from].isLocked, "Locked Account can not transfer");
       }

       uint256 amountETH;
       if (_getRateTokenAndETH() > 0) {
           amountETH = (amount * 10 ** _decimals).div(_getRateTokenAndETH());
       } else {
          amountETH = 0; 
       }

       if(from != owner() && to != owner()) {
           if(!_tradingActive){
               require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active.");
           }           

           if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { 
               require(amount + balanceOf(to) <= _maxwalletamount, "Max wallet exceeded");

           } else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
               require(amountETH <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

           } else if(!_isExcludedMaxTransactionAmount[from] && !_isExcludedMaxTransactionAmount[to]) {
               require(amountETH <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
               require(amount + balanceOf(to) <= _maxwalletamount, "Max wallet exceeded");
           } else if (_isExcludedMaxTransactionAmount[from] && !_isExcludedMaxTransactionAmount[to]) {
               require(amount + balanceOf(to) <= _maxwalletamount, "Max wallet exceeded");
           }
           
           if (!automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[from]) {
               if ( block.timestamp - transactionData[from].timeStamp < _dailyTimeLimit) {
                   require(transactionData[from].amount + amountETH <= _dailymaxTxAmount, "Transfer amount exceeds the dailymaxTxAmount.");
                   transactionData[from].amount += amountETH;
               } else {
                   transactionData[from].timeStamp = block.timestamp;
                   transactionData[from].amount = amountETH;
               }
           }
           
       }

       uint256 contractTokenBalance = balanceOf(address(this));
       
       bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
       if (
           overMinTokenBalance &&
           !inSwapAndLiquify &&
           !automatedMarketMakerPairs[from] &&
           swapAndLiquifyEnabled
       ) {
           contractTokenBalance = numTokensSellToAddToLiquidity;
           swapAndLiquify(contractTokenBalance);
       }
       
       bool takeFee = true;
       
       if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
           takeFee = false;
       }
       _tokenTransfer(from,to,amount,takeFee);
    }

    function _getRateTokenAndETH() public view returns(uint256){
       uint256 amountToken = balanceOf(uniswapV2Pair);
       uint256 amountETH = WETH.balanceOf(uniswapV2Pair);
       uint256 rateTokenAndETH;
       if(amountETH == 0) {
           rateTokenAndETH = 0;
       } else {
           rateTokenAndETH = (amountToken * 10 ** _decimals).div(amountETH);
       }
       return rateTokenAndETH;
    }

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
       uint256 totalTokenAmount = _tokenAmountForFoundationTax + _tokenAmountForLiquidityTax + _tokenAmountForMarketingTax + _tokenAmountForTreasuryTax;
       uint256 tokenForMarketing = contractTokenBalance * (_tokenAmountForMarketingTax) / totalTokenAmount;
       uint256 tokenForLiquidity = contractTokenBalance * (_tokenAmountForLiquidityTax) / totalTokenAmount;
       uint256 tokenForFoundation = contractTokenBalance * (_tokenAmountForFoundationTax) / totalTokenAmount;
       uint256 tokenForTreasury = contractTokenBalance * (_tokenAmountForTreasuryTax) / totalTokenAmount;       
       uint256 half = tokenForLiquidity.div(2);
       uint256 otherHalf = tokenForLiquidity.sub(half);
       uint256 initialBalance = address(this).balance;
       uint256 tokenAmountForSwap = tokenForMarketing + tokenForFoundation + tokenForTreasury + half; 
       swapTokensForEth(tokenAmountForSwap); 

       uint256 newBalance = address(this).balance.sub(initialBalance);
       uint256 ethForLiquidity = newBalance * half / tokenAmountForSwap;
       uint256 ethForMarketing = newBalance * tokenForMarketing / tokenAmountForSwap;
       uint256 ethForTreasury = newBalance * tokenForTreasury / tokenAmountForSwap;
       uint256 ethForFoundation = newBalance * tokenForFoundation / tokenAmountForSwap;

       transferToAddressETH(payable(_marketingAddress), ethForMarketing.mul(90).div(100));
       transferToAddressETH(payable(_treasuryAddress), ethForTreasury.mul(90).div(100));
       transferToAddressETH(payable(_foundationAddress), ethForFoundation.mul(90).div(100));

       addLiquidity(otherHalf, ethForLiquidity);
       _tokenAmountForFoundationTax = 0;
       _tokenAmountForLiquidityTax = 0;
       _tokenAmountForMarketingTax = 0;
       _tokenAmountForTreasuryTax = 0;

       
       emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) internal {

       address[] memory path = new address[](2);
       path[0] = address(this);
       path[1] = uniswapV2Router.WETH();

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

       uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
           tokenAmount,
           0, // accept any amount of ETH
           path,
           address(this),
           block.timestamp
       );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {

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

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

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) internal {
       if(!takeFee) {
          removeAllTax();
       } else if (automatedMarketMakerPairs[sender]) {
           setTaxBuyTax();
       } else  {
           setTaxSellTax();
       } 
           
       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]) {
           _transferStandard(sender, recipient, amount);
       } else if (_isExcluded[sender] && _isExcluded[recipient]) {
           _transferBothExcluded(sender, recipient, amount);
       } else {
           _transferStandard(sender, recipient, amount);
       }      
    }

    function removeAllTax() internal {                 
       _reflectionTax = 0;
       _liquidityTax = 0;
       _marketingTax = 0;
       _treasuryTax = 0;
       _foundationTax = 0;
       _totalTax = 0;
    }
   
    function setTaxBuyTax() internal {
      _reflectionTax = _reflectionBuyTax;
      _liquidityTax = _liquidityBuyTax;
      _marketingTax = _marketingBuyTax;
      _treasuryTax = _treasuryBuyTax;
      _foundationTax = _foundationBuyTax;
      _totalTax = _liquidityTax.add(_marketingTax).add(_treasuryTax).add(_foundationTax);

    }

    function setTaxSellTax() internal {
      _reflectionTax = _reflectionSellTax;
      _liquidityTax = _liquiditySellTax;
      _marketingTax = _marketingSellTax;
      _treasuryTax = _treasurySellTax;
      _foundationTax = _foundationSellTax;
      _totalTax = _liquidityTax.add(_marketingTax).add(_treasuryTax).add(_foundationTax);
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rReflection, uint256 tTransferAmount, uint256 tReflection, uint256 tTotal) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        
        if(_totalTax > 0) {
           _takeLiquidity(tTotal.mul(_liquidityTax).div(_totalTax));
           _takeMarketing(tTotal.mul(_marketingTax).div(_totalTax));
           _takeTreasury(tTotal.mul(_treasuryTax).div(_totalTax));
           _takeFoundation(tTotal.mul(_foundationTax).div(_totalTax));
        }        
        _reflectTax(rReflection, tReflection);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rReflection, uint256 tTransferAmount, uint256 tReflection, uint256 tTotal) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); 

        if(_totalTax > 0) {
           _takeLiquidity(tTotal.mul(_liquidityTax).div(_totalTax));
           _takeMarketing(tTotal.mul(_marketingTax).div(_totalTax));
           _takeTreasury(tTotal.mul(_treasuryTax).div(_totalTax));
           _takeFoundation(tTotal.mul(_foundationTax).div(_totalTax));
        }        
        _reflectTax(rReflection, tReflection);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rReflection, uint256 tTransferAmount, uint256 tReflection, uint256 tTotal) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if(_totalTax > 0) {
           _takeLiquidity(tTotal.mul(_liquidityTax).div(_totalTax));
           _takeMarketing(tTotal.mul(_marketingTax).div(_totalTax));
           _takeTreasury(tTotal.mul(_treasuryTax).div(_totalTax));
           _takeFoundation(tTotal.mul(_foundationTax).div(_totalTax));
        }        
        _reflectTax(rReflection, tReflection);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rReflection, uint256 tTransferAmount, uint256 tReflection, uint256 tTotal) = _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);

        if(_totalTax > 0) {
           _takeLiquidity(tTotal.mul(_liquidityTax).div(_totalTax));
           _takeMarketing(tTotal.mul(_marketingTax).div(_totalTax));
           _takeTreasury(tTotal.mul(_treasuryTax).div(_totalTax));
           _takeFoundation(tTotal.mul(_foundationTax).div(_totalTax));
        }        
        _reflectTax(rReflection, tReflection);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _tokenAmountForLiquidityTax += tLiquidity;
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate = _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _tokenAmountForMarketingTax += tMarketing;
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing);
    }

    function _takeTreasury(uint256 tTreasury) private {
        uint256 currentRate = _getRate();
        uint256 rTreasury = tTreasury.mul(currentRate);
        _tokenAmountForTreasuryTax += tTreasury;
        _rOwned[address(this)] = _rOwned[address(this)].add(rTreasury);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tTreasury);
    }

    function _takeFoundation(uint256 tFoundation) private {
        uint256 currentRate = _getRate();
        uint256 rFoundation = tFoundation.mul(currentRate);
        _tokenAmountForFoundationTax += tFoundation;
        _rOwned[address(this)] = _rOwned[address(this)].add(rFoundation);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tFoundation);
    }

    function _reflectTax(uint256 rReflection, uint256 tReflection) private {
       _rTotal = _rTotal.sub(rReflection);
       _tFeeTotal = _tFeeTotal.add(tReflection);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
       (uint256 tTransferAmount, uint256 tReflection, uint256 tTotal) = _getTValues(tAmount);
       (uint256 rAmount, uint256 rTransferAmount, uint256 rReflection) = _getRValues(tAmount, tReflection, tTotal, _getRate());
       return (rAmount, rTransferAmount, rReflection, tTransferAmount, tReflection, tTotal);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
       uint256 tReflection = calculateReflectionTax(tAmount);
       uint256 tTotal = calculateTotalTax(tAmount);
       uint256 tTransferAmount = tAmount.sub(tReflection).sub(tTotal);
       return (tTransferAmount, tReflection, tTotal);
    }

    function _getRValues(uint256 tAmount, uint256 tReflection, uint256 tTotal, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
       uint256 rAmount = tAmount.mul(currentRate);
       uint256 rReflection = tReflection.mul(currentRate);
       uint256 rTotal = tTotal.mul(currentRate);
       uint256 rTransferAmount = rAmount.sub(rReflection).sub(rTotal);
       return (rAmount, rTransferAmount, rReflection);
    }

    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 calculateReflectionTax(uint256 _amount) private view returns (uint256) {
       return _amount.mul(_reflectionTax).div(
           10**2
       );
    }

    function calculateTotalTax(uint256 _amount) private view returns (uint256) {
       return _amount.mul(_totalTax).div(
           10**2
       );
    }
        
   // External Read functions 
    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 reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
       require(tAmount <= _tTotal, "Amount must be less than supply");
       if (!deductTransferFee) {
           (uint256 rAmount,,,,,) = _getValues(tAmount);
           return rAmount;
       } else {
           (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
           return rTransferAmount;
       }
    }          

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

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

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

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

    function gettansactionDataAmount(address account) public view returns(uint256) {
        return transactionData[account].amount;
    }//

    function gettransactionDataTime(address account) public view returns(uint256) {
        return transactionData[account].timeStamp;
    }

    function getTransactionDataIsLocked(address account) public view returns(bool) {
        return transactionData[account].isLocked;
    }

    function getTransactionDataLockedTime(address account) public view returns(uint256) {
        return transactionData[account].lockedTime;
    }

    function getTransactionDataLockedPeriod(address account) public view returns(uint256) {
        return transactionData[account].lockPeriod;
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    // Write functions

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);

        emit ExcludeFromReward(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        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;
            }
        }

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

        emit ExcludeFromFee(account);
    }
    
    function includeInFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = false;

        emit IncludeInFee(account);
    }
    
    function setBuyTaxPercent(uint256 reflectionBuyTax, uint256 liquidityBuyTax, uint256 marketingBuyTax, uint256 treasuryBuyTax, uint256 foundationBuyTax) external onlyOwner() {
        _reflectionBuyTax = reflectionBuyTax;
        _liquidityBuyTax = liquidityBuyTax;
        _marketingBuyTax = marketingBuyTax;
        _treasuryBuyTax = treasuryBuyTax;
        _foundationBuyTax = foundationBuyTax;

        emit BuyTaxPercnetUpdate(reflectionBuyTax, liquidityBuyTax, marketingBuyTax, treasuryBuyTax, foundationBuyTax);
    }
    
    function setSellTaxPercent(uint256 reflectionSellTax, uint256 liquiditySellTax, uint256 marketingSellTax, uint256 treasurySellTax, uint256 foundationSellTax) external onlyOwner() {
        _reflectionSellTax = reflectionSellTax;
        _liquiditySellTax = liquiditySellTax;
        _marketingSellTax = marketingSellTax;
        _treasurySellTax = treasurySellTax;
        _foundationSellTax = foundationSellTax;

        emit SellTaxPercent(reflectionSellTax, liquiditySellTax, marketingSellTax, treasurySellTax, foundationSellTax);
    }

    function setMarketingAddress(address marketingAddress) external onlyOwner() {
       _marketingAddress = marketingAddress;

       emit MarketingAddressUpdate(marketingAddress);
    }
    
    function setTreasuryAddress(address treasuryAddress) external onlyOwner() {
       _treasuryAddress = treasuryAddress;

       emit TreasuryAddressUpdate(treasuryAddress);
    }

    
    function setFoundationAddress(address foundationAddress) external onlyOwner() {
       _foundationAddress = foundationAddress;

       emit FoundationAddressUpdate(foundationAddress);
    }        

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

        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setEnableTrading(bool tradingActive) external onlyOwner() {
       _tradingActive = tradingActive;

       emit EnableTradingUpdate(tradingActive);
    }

    function setNumTokensSellToAddToLiquidityPercentageAndmaxwalletamount(uint256 _numTokensSellToAddToLiquidityPercentage, uint256 _maxwalletamountPercentage) external onlyOwner() {
       numTokensSellToAddToLiquidity = _tTotal.mul(_numTokensSellToAddToLiquidityPercentage).div(10000);
       _maxwalletamount = _tTotal.mul(_maxwalletamountPercentage).div(10000);

       emit NumTokenSellToAddToLiquidityPercentageAndMaxwalletAmount(_numTokensSellToAddToLiquidityPercentage, _maxwalletamountPercentage);
    }

    function setDailymaxTxAmountAndmaxTxAmount(uint256 dailymaxTxAmount, uint256 maxTxAmount) external onlyOwner() {
        _dailymaxTxAmount = dailymaxTxAmount * 10 ** _decimals;
        _maxTxAmount = maxTxAmount * 10 ** _decimals;

        emit DaiyMaxTxAmountAndMaxTxAmountUpdate(dailymaxTxAmount, maxTxAmount);
    }

    function setAutomatedMarketMakerPairs(address newPair) external onlyOwner() {
       automatedMarketMakerPairs[newPair] = true;

       emit AutomatedMarketMakerPairsUpdate(newPair);
    }

    function lockAccount(address account, uint256 lockPeriod) external onlyOwner() {
        transactionData[account].isLocked = true;
        transactionData[account].lockedTime = block.timestamp;
        transactionData[account].lockPeriod = lockPeriod * 86400;
        emit LockAccount(account, true, lockPeriod);
    }

    function unLockAccount(address account) external onlyOwner() {
        transactionData[account].isLocked = false;
        transactionData[account].lockedTime = 0;
        transactionData[account].lockPeriod = 0;
        emit UnlockAccount(account, false);
    }

    function SetAccountMaxWalletLimit(address account, bool enabled) external onlyOwner() {
        _isExcludedMaxTransactionAmount[account] = enabled;
        emit UpdateAccountMaxWalletLimit(account, enabled);
    }

    function airdrop(address recipient, uint256 amount) external onlyOwner() {
       _transfer(_msgSender(), recipient, amount * 10**18);
    }
   
    function airdropInternal(address recipient, uint256 amount) internal {
       _transfer(_msgSender(), recipient, amount);
    }
   
    function airdropArray(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner(){
       uint256 iterator = 0;
       require(newholders.length == amounts.length, "must be the same length");
       while(iterator < newholders.length){
           airdropInternal(newholders[iterator], amounts[iterator] * 10**18);
           iterator += 1;
       }
    }

    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":false,"internalType":"address","name":"newPair","type":"address"}],"name":"AutomatedMarketMakerPairsUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reflectionBuyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityBuyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingBuyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryBuyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"foundationBuyTax","type":"uint256"}],"name":"BuyTaxPercnetUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"dailymaxTxAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"DaiyMaxTxAmountAndMaxTxAmountUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"tradingActive","type":"bool"}],"name":"EnableTradingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"foundationAddress","type":"address"}],"name":"FoundationAddressUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"lockPeriod","type":"uint256"}],"name":"LockAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingAddress","type":"address"}],"name":"MarketingAddressUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_numTokensSellToAddToLiquidityPercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_maxwalletamountPercentage","type":"uint256"}],"name":"NumTokenSellToAddToLiquidityPercentageAndMaxwalletAmount","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":"reflectionSellTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquiditySellTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingSellTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasurySellTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"foundationSellTax","type":"uint256"}],"name":"SellTaxPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasuryAddress","type":"address"}],"name":"TreasuryAddressUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"UnlockAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"UpdateAccountMaxWalletLimit","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetAccountMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dailyTimeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dailymaxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_deadAdderess","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_foundationAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_foundationBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_foundationSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_foundationTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getRateTokenAndETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquiditySellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxwalletamount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ownerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenAmountForFoundationTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenAmountForLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenAmountForMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenAmountForTreasuryTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasurySellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tBurn","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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":"account","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":"getTransactionDataIsLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTransactionDataLockedPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTransactionDataLockedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"gettansactionDataAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"gettransactionDataTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"lockPeriod","type":"uint256"}],"name":"lockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"setAutomatedMarketMakerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionBuyTax","type":"uint256"},{"internalType":"uint256","name":"liquidityBuyTax","type":"uint256"},{"internalType":"uint256","name":"marketingBuyTax","type":"uint256"},{"internalType":"uint256","name":"treasuryBuyTax","type":"uint256"},{"internalType":"uint256","name":"foundationBuyTax","type":"uint256"}],"name":"setBuyTaxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dailymaxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setDailymaxTxAmountAndmaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"tradingActive","type":"bool"}],"name":"setEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"foundationAddress","type":"address"}],"name":"setFoundationAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidityPercentage","type":"uint256"},{"internalType":"uint256","name":"_maxwalletamountPercentage","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidityPercentageAndmaxwalletamount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionSellTax","type":"uint256"},{"internalType":"uint256","name":"liquiditySellTax","type":"uint256"},{"internalType":"uint256","name":"marketingSellTax","type":"uint256"},{"internalType":"uint256","name":"treasurySellTax","type":"uint256"},{"internalType":"uint256","name":"foundationSellTax","type":"uint256"}],"name":"setSellTaxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unLockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

600a805462ff00ff19166201000117905560c0604052600b60808190526a417263686965204e656b6f60a81b60a09081526200003d9190816200057c565b506040805180820190915260068082526541524348494560d01b60209092019182526200006d91600c916200057c565b50600d805460ff191660099081179091556200008b90600a62000737565b620000a19069021e19e0c9bab24000006200074f565b600e819055620000b49060001962000787565b620000c2906000196200079e565b600f5560036012819055600460135560158190556005601655600260188190556019556001601b55601c556006601e819055601f55602480546001600160a01b0319908116730f7b55e157f91528f1ee480727785f68ffdf86271790915560258054821673a6832d7e1d1f2d23effe816819f16917e9c146a517905560268054821673ef07a2cd176001dd1f976efbf0d7f00a39b9d3ca179055602780549091167313498081b989f9351fead7802164ae374bc7300f179055600e546200018d906101f490620007b8565b6028556064600e54620001a19190620007b8565b60295562015180602a5568014d1120d7b1600000602b556729a2241af62c0000602c55348015620001d157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600f546024546001600160a01b031660009081526001602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200028057600080fd5b505afa15801562000295573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bb9190620007cf565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030457600080fd5b505afa15801562000319573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033f9190620007cf565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200038857600080fd5b505af11580156200039d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c39190620007cf565b602280546001600160a01b039283166001600160a01b031991821617909155602180549284169290911682179055604080516315ab88c960e31b8152905163ad5c464891600480820192602092909190829003018186803b1580156200042857600080fd5b505afa1580156200043d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004639190620007cf565b602380546001600160a01b0319166001600160a01b0392831617905560245481166000908152600460209081526040808320805460ff1990811660019081179092553085528285208054821683179055600584527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805482168317905560228054871686528386208054831684179055548616855260079093528184208054841682179055602154909416835290912080549091169091179055620005253390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e546040516200056d91815260200190565b60405180910390a35062000837565b8280546200058a90620007fa565b90600052602060002090601f016020900481019282620005ae5760008555620005f9565b82601f10620005c957805160ff1916838001178555620005f9565b82800160010185558215620005f9579182015b82811115620005f9578251825591602001919060010190620005dc565b50620006079291506200060b565b5090565b5b808211156200060757600081556001016200060c565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006795781600019048211156200065d576200065d62000622565b808516156200066b57918102915b93841c93908002906200063d565b509250929050565b600082620006925750600162000731565b81620006a15750600062000731565b8160018114620006ba5760028114620006c557620006e5565b600191505062000731565b60ff841115620006d957620006d962000622565b50506001821b62000731565b5060208310610133831016604e8410600b84101617156200070a575081810a62000731565b62000716838362000638565b80600019048211156200072d576200072d62000622565b0290505b92915050565b60006200074860ff84168362000681565b9392505050565b60008160001904831182151516156200076c576200076c62000622565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262000799576200079962000771565b500690565b600082821015620007b357620007b362000622565b500390565b600082620007ca57620007ca62000771565b500490565b600060208284031215620007e257600080fd5b81516001600160a01b03811681146200074857600080fd5b600181811c908216806200080f57607f821691505b602082108114156200083157634e487b7160e01b600052602260045260246000fd5b50919050565b61445a80620008476000396000f3fe6080604052600436106104815760003560e01c80637b40a2e911610255578063ad5c464811610144578063d4b45570116100c1578063ea2f0b3711610085578063ea2f0b3714610e0f578063ee587ec214610e2f578063f2fde38b14610e45578063f31eec6e14610e65578063f41377ca14610e7a578063fb4aa58514610e9a57600080fd5b8063d4b4557014610d44578063dd62ed3e14610d5a578063e3a43dda14610da0578063e420295414610dc0578063e6609a0d14610dd657600080fd5b8063bf620a4511610108578063bf620a4514610cae578063c05125fb14610cce578063c49b9a8014610ce4578063caac793414610d04578063d4a3883f14610d2457600080fd5b8063ad5c464814610bec578063b269dc7114610c0c578063b62496f514610c22578063b6632a5314610c52578063b92ebd5f14610c8e57600080fd5b806395d89b41116101d2578063a1ca534711610196578063a1ca534714610b56578063a457c2d714610b6c578063a786c18b14610b8c578063a9059cbb14610bac578063acefd83d14610bcc57600080fd5b806395d89b4114610adf578063982d8de514610af457806398d0bea414610b0a5780639a72c88014610b2a5780639bac4a9514610b4057600080fd5b806388f820201161021957806388f8202014610a285780638ba4cc3c14610a615780638da5cb5b14610a81578063906e9dd014610a9f57806391140c5614610abf57600080fd5b80637b40a2e91461099c5780637d1db4a5146109bc57806382531712146109d2578063834929ea146109f25780638743da6d14610a0857600080fd5b80633bd5d1731161037157806352390c02116102ee57806368182be8116102b257806368182be81461090257806370a0823114610918578063715018a614610938578063757cf6281461094d5780637ad410661461098657600080fd5b806352390c021461085d5780635342acb41461087d5780636144b2c5146108b65780636605bfda146108cc57806366a76e6c146108ec57600080fd5b806343e672701161033557806343e67270146107d15780634549b039146107e757806349bd5a5e146108075780634a74bb02146108275780634edfb71d1461084757600080fd5b80633bd5d1731461073b5780633c5129001461075b5780633ed500f11461077b57806342966c6814610791578063437823ec146107b157600080fd5b8063205da483116103ff57806334c87eee116103c357806334c87eee146106995780633685d419146106af57806337f28981146106cf578063382e329a14610705578063395093511461071b57600080fd5b8063205da483146105e857806323b872dd146106215780632d838119146106415780632d88286314610661578063313ce5671461067757600080fd5b806310d5de531161044657806310d5de531461054057806313114a9d146105705780631694505e1461058557806318160ddd146105bd5780631f1b845b146105d257600080fd5b8062b4c6ec1461048d57806306fdde03146104b65780630787e040146104d8578063095ea7b3146104fa5780630adc43d51461052a57600080fd5b3661048857005b600080fd5b34801561049957600080fd5b506104a360295481565b6040519081526020015b60405180910390f35b3480156104c257600080fd5b506104cb610eb0565b6040516104ad9190613da4565b3480156104e457600080fd5b506104f86104f3366004613e11565b610f42565b005b34801561050657600080fd5b5061051a610515366004613e2e565b610fd0565b60405190151581526020016104ad565b34801561053657600080fd5b506104a3601d5481565b34801561054c57600080fd5b5061051a61055b366004613e11565b60086020526000908152604090205460ff1681565b34801561057c57600080fd5b506010546104a3565b34801561059157600080fd5b506021546105a5906001600160a01b031681565b6040516001600160a01b0390911681526020016104ad565b3480156105c957600080fd5b50600e546104a3565b3480156105de57600080fd5b506104a360165481565b3480156105f457600080fd5b506104a3610603366004613e11565b6001600160a01b031660009081526006602052604090206004015490565b34801561062d57600080fd5b5061051a61063c366004613e5a565b610fe7565b34801561064d57600080fd5b506104a361065c366004613e9b565b611050565b34801561066d57600080fd5b506104a360145481565b34801561068357600080fd5b50600d5460405160ff90911681526020016104ad565b3480156106a557600080fd5b506104a3602f5481565b3480156106bb57600080fd5b506104f86106ca366004613e11565b6110d4565b3480156106db57600080fd5b506104a36106ea366004613e11565b6001600160a01b031660009081526006602052604090205490565b34801561071157600080fd5b506104a360115481565b34801561072757600080fd5b5061051a610736366004613e2e565b6112c2565b34801561074757600080fd5b506104f8610756366004613e9b565b6112f8565b34801561076757600080fd5b506104f8610776366004613e11565b6113e2565b34801561078757600080fd5b506104a360305481565b34801561079d57600080fd5b506104f86107ac366004613e9b565b611474565b3480156107bd57600080fd5b506104f86107cc366004613e11565b61164e565b3480156107dd57600080fd5b506104a360135481565b3480156107f357600080fd5b506104a3610802366004613ec9565b6116cc565b34801561081357600080fd5b506022546105a5906001600160a01b031681565b34801561083357600080fd5b50600a5461051a9062010000900460ff1681565b34801561085357600080fd5b506104a3601f5481565b34801561086957600080fd5b506104f8610878366004613e11565b611759565b34801561088957600080fd5b5061051a610898366004613e11565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156108c257600080fd5b506104a3602e5481565b3480156108d857600080fd5b506104f86108e7366004613e11565b6118dc565b3480156108f857600080fd5b506104a360195481565b34801561090e57600080fd5b506104a3602a5481565b34801561092457600080fd5b506104a3610933366004613e11565b611954565b34801561094457600080fd5b506104f86119b3565b34801561095957600080fd5b506104a3610968366004613e11565b6001600160a01b031660009081526006602052604090206003015490565b34801561099257600080fd5b506104a3601a5481565b3480156109a857600080fd5b506104f86109b7366004613ef5565b611a27565b3480156109c857600080fd5b506104a3602c5481565b3480156109de57600080fd5b506104f86109ed366004613f17565b611acb565b3480156109fe57600080fd5b506104a3601b5481565b348015610a1457600080fd5b506026546105a5906001600160a01b031681565b348015610a3457600080fd5b5061051a610a43366004613e11565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610a6d57600080fd5b506104f8610a7c366004613e2e565b611b65565b348015610a8d57600080fd5b506000546001600160a01b03166105a5565b348015610aab57600080fd5b506104f8610aba366004613e11565b611baf565b348015610acb57600080fd5b506104f8610ada366004613f17565b611c27565b348015610aeb57600080fd5b506104cb611cb6565b348015610b0057600080fd5b506104a3602d5481565b348015610b1657600080fd5b506027546105a5906001600160a01b031681565b348015610b3657600080fd5b506104a3601c5481565b348015610b4c57600080fd5b506104a360175481565b348015610b6257600080fd5b506104a360205481565b348015610b7857600080fd5b5061051a610b87366004613e2e565b611cc5565b348015610b9857600080fd5b506024546105a5906001600160a01b031681565b348015610bb857600080fd5b5061051a610bc7366004613e2e565b611d14565b348015610bd857600080fd5b506104f8610be7366004613f52565b611d21565b348015610bf857600080fd5b506023546105a5906001600160a01b031681565b348015610c1857600080fd5b506104a3602b5481565b348015610c2e57600080fd5b5061051a610c3d366004613e11565b60076020526000908152604090205460ff1681565b348015610c5e57600080fd5b5061051a610c6d366004613e11565b6001600160a01b031660009081526006602052604090206002015460ff1690565b348015610c9a57600080fd5b506104f8610ca9366004613f7e565b611da7565b348015610cba57600080fd5b506104f8610cc9366004613e2e565b611e12565b348015610cda57600080fd5b506104a360185481565b348015610cf057600080fd5b506104f8610cff366004613f7e565b611ed8565b348015610d1057600080fd5b506025546105a5906001600160a01b031681565b348015610d3057600080fd5b506104f8610d3f366004613fe5565b611f4d565b348015610d5057600080fd5b506104a3601e5481565b348015610d6657600080fd5b506104a3610d75366004614051565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610dac57600080fd5b506104f8610dbb366004613ef5565b612044565b348015610dcc57600080fd5b506104a360125481565b348015610de257600080fd5b506104a3610df1366004613e11565b6001600160a01b031660009081526006602052604090206001015490565b348015610e1b57600080fd5b506104f8610e2a366004613e11565b6120e0565b348015610e3b57600080fd5b506105a561dead81565b348015610e5157600080fd5b506104f8610e60366004613e11565b61215b565b348015610e7157600080fd5b506104a3612245565b348015610e8657600080fd5b506104f8610e95366004613e11565b61231e565b348015610ea657600080fd5b506104a360155481565b6060600b8054610ebf9061408a565b80601f0160208091040260200160405190810160405280929190818152602001828054610eeb9061408a565b8015610f385780601f10610f0d57610100808354040283529160200191610f38565b820191906000526020600020905b815481529060010190602001808311610f1b57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f755760405162461bcd60e51b8152600401610f6c906140c5565b60405180910390fd5b6001600160a01b038116600081815260076020908152604091829020805460ff1916600117905590519182527f8ee06c35c3f5b7df6a6daa7e40d7aa88c13d6e606cd3c03a766bc53a66cdedb691015b60405180910390a150565b6000610fdd338484612396565b5060015b92915050565b6000610ff48484846124bb565b6110468433611041856040518060600160405280602881526020016143d8602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612c85565b612396565b5060019392505050565b6000600f548211156110b75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f6c565b60006110c1612cbf565b90506110cd8382612ce2565b9392505050565b6000546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b03811660009081526005602052604090205460ff166111665760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610f6c565b60005b60095481101561128857816001600160a01b031660098281548110611190576111906140fa565b6000918252602090912001546001600160a01b0316141561127657600980546111bb90600190614126565b815481106111cb576111cb6140fa565b600091825260209091200154600980546001600160a01b0390921691839081106111f7576111f76140fa565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600980548061124f5761124f61413d565b600082815260209020810160001990810180546001600160a01b0319169055019055611288565b8061128081614153565b915050611169565b506040516001600160a01b03821681527fb31990b399410eeea874c2c81063feb4b5e55f66f46004a8306f10a81f031d3f90602001610fc5565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610fdd9185906110419086612d24565b3360008181526005602052604090205460ff161561136d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610f6c565b600061137883612d83565b505050506001600160a01b0384166000908152600160205260409020549192506113a491905082612dd2565b6001600160a01b038316600090815260016020526040902055600f546113ca9082612dd2565b600f556010546113da9084612d24565b601055505050565b6000546001600160a01b0316331461140c5760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b038116600081815260066020908152604080832060028101805460ff19169055600381018490556004018390558051938452908301919091527f3c2f88c2d934145e680e5651c98370f6e7869b4fe4fd16a91d7be0671fd2f4a19101610fc5565b33806114cc5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610f6c565b6001600160a01b03811661dead14156115315760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865206275726e206164647265736044820152607360f81b6064820152608401610f6c565b600061153c82611954565b9050828110156115995760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610f6c565b60006115ad6115a6612cbf565b8590612e14565b6001600160a01b0384166000908152600160205260409020549091506115d39082612dd2565b6001600160a01b03841660009081526001602090815260408083209390935560059052205460ff161561163d576001600160a01b0383166000908152600260205260409020546116239085612dd2565b6001600160a01b0384166000908152600260205260409020555b611648838583612e93565b50505050565b6000546001600160a01b031633146116785760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b629101610fc5565b6000600e548311156117205760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f6c565b8161173f57600061173084612d83565b50939550610fe1945050505050565b600061174a84612d83565b50929550610fe1945050505050565b6000546001600160a01b031633146117835760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b03811660009081526005602052604090205460ff16156117ec5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f6c565b6001600160a01b03811660009081526001602052604090205415611846576001600160a01b03811660009081526001602052604090205461182c90611050565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556009805491820181559093527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90920180546001600160a01b0319168417905590519182527f6f6f36b62c3e3a776fc3052d503097ffb886d7eb4546e768132fef82747e30b99101610fc5565b6000546001600160a01b031633146119065760405162461bcd60e51b8152600401610f6c906140c5565b602680546001600160a01b0319166001600160a01b0383169081179091556040519081527fa956ec5d1bfa4d3cf86651bce8dfee650c06c14e553621914adbac1b20c5be0090602001610fc5565b6001600160a01b03811660009081526005602052604081205460ff161561199157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610fe190611050565b6000546001600160a01b031633146119dd5760405162461bcd60e51b8152600401610f6c906140c5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611a515760405162461bcd60e51b8152600401610f6c906140c5565b600d54611a629060ff16600a614252565b611a6c9083614261565b602b55600d54611a809060ff16600a614252565b611a8a9082614261565b602c5560408051838152602081018390527f9a60806b80683c0f1e6c1d2f63e47e300945d15205686c36807fc286aa14e5a491015b60405180910390a15050565b6000546001600160a01b03163314611af55760405162461bcd60e51b8152600401610f6c906140c5565b601f859055601384905560168390556019829055601c819055604080518681526020810186905290810184905260608101839052608081018290527f1de27f982a5a2e5b60e90309cab78d9ab8bc72d1eb1cc2a1ce7d764d05098ad19060a0015b60405180910390a15050505050565b6000546001600160a01b03163314611b8f5760405162461bcd60e51b8152600401610f6c906140c5565b611bab3383611ba684670de0b6b3a7640000614261565b6124bb565b5050565b6000546001600160a01b03163314611bd95760405162461bcd60e51b8152600401610f6c906140c5565b602580546001600160a01b0319166001600160a01b0383169081179091556040519081527f0a797a504d88dafb7a5b2f6eba20ee68ec359dfea7c7b5c682a3befefbb73d8e90602001610fc5565b6000546001600160a01b03163314611c515760405162461bcd60e51b8152600401610f6c906140c5565b601e859055601284905560158390556018829055601b819055604080518681526020810186905290810184905260608101839052608081018290527ff8a705b84a676a85ccaa4f1b5c10010014d9a799f1f704903e34b8a5f2facc7e9060a001611b56565b6060600c8054610ebf9061408a565b6000610fdd338461104185604051806060016040528060258152602001614400602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612c85565b6000610fdd3384846124bb565b6000546001600160a01b03163314611d4b5760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f2162ce92c3a4912863d16071bf16a983997aaa42e497768ceddbf5992ee122609101611abf565b6000546001600160a01b03163314611dd15760405162461bcd60e51b8152600401610f6c906140c5565b600a805460ff19168215159081179091556040519081527f29738dcc625d24e64a3df0de4b648e35d2b8044b5442f5c44fe89ffa2de8a69a90602001610fc5565b6000546001600160a01b03163314611e3c5760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b038216600090815260066020526040902060028101805460ff1916600117905542600390910155611e778162015180614261565b6001600160a01b0383166000818152600660209081526040918290206004019390935580519182526001928201929092529081018290527f9dda046cbc86da321bb00fc7380d7951491fa72d7bcb0492771db2dd1dadf3c690606001611abf565b6000546001600160a01b03163314611f025760405162461bcd60e51b8152600401610f6c906140c5565b600a8054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610fc590831515815260200190565b6000546001600160a01b03163314611f775760405162461bcd60e51b8152600401610f6c906140c5565b6000838214611fc85760405162461bcd60e51b815260206004820152601760248201527f6d757374206265207468652073616d65206c656e6774680000000000000000006044820152606401610f6c565b8381101561203d5761202b858583818110611fe557611fe56140fa565b9050602002016020810190611ffa9190613e11565b84848481811061200c5761200c6140fa565b90506020020135670de0b6b3a76400006120269190614261565b612fc5565b612036600182614280565b9050611fc8565b5050505050565b6000546001600160a01b0316331461206e5760405162461bcd60e51b8152600401610f6c906140c5565b61208f61271061208984600e54612e1490919063ffffffff16565b90612ce2565b602855600e546120a790612710906120899084612e14565b60295560408051838152602081018390527f06d7925a478fc398e43f23768d67307305d40c613994c8f8234bdaafc0f3f08e9101611abf565b6000546001600160a01b0316331461210a5760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101610fc5565b6000546001600160a01b031633146121855760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b0381166121ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f6c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b602254600090819061225f906001600160a01b0316611954565b6023546022546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a082319060240160206040518083038186803b1580156122ac57600080fd5b505afa1580156122c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e49190614298565b90506000816122f5575060006110cd565b600d5461231690839061230c9060ff16600a614252565b6120899086614261565b949350505050565b6000546001600160a01b031633146123485760405162461bcd60e51b8152600401610f6c906140c5565b602780546001600160a01b0319166001600160a01b0383169081179091556040519081527f656c212610c2fb098cbf3d0ffd9a6904957777648d9161ad45b7e7bcef0793c090602001610fc5565b6001600160a01b0383166123f85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f6c565b6001600160a01b0382166124595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f6c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661251f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f6c565b6001600160a01b0382166125815760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f6c565b600081116125e35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f6c565b6001600160a01b03831660009081526006602052604090206002015460ff16801561263a57506001600160a01b038316600090815260066020526040902060048101546003909101546126369190614280565b4210155b1561266f576001600160a01b038316600090815260066020526040812060028101805460ff1916905560048101829055600301555b6001600160a01b03831660009081526006602052604090206002015460ff1680156126c557506001600160a01b038316600090815260066020526040902060048101546003909101546126c29190614280565b42105b15612736576001600160a01b03831660009081526006602052604090206002015460ff16156127365760405162461bcd60e51b815260206004820152601f60248201527f4c6f636b6564204163636f756e742063616e206e6f74207472616e73666572006044820152606401610f6c565b600080612741612245565b11156127745761276d612752612245565b600d546127639060ff16600a614252565b6120899085614261565b9050612778565b5060005b6000546001600160a01b038581169116148015906127a457506000546001600160a01b03848116911614155b15612baf57600a5460ff16612837576001600160a01b03841660009081526004602052604090205460ff16806127f257506001600160a01b03831660009081526004602052604090205460ff165b6128375760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f6c565b6001600160a01b03841660009081526007602052604090205460ff16801561287857506001600160a01b03831660009081526008602052604090205460ff16155b156128dc5760295461288984611954565b6128939084614280565b11156128d75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610f6c565b612a59565b6001600160a01b03831660009081526007602052604090205460ff16801561291d57506001600160a01b03841660009081526008602052604090205460ff16155b1561294457602c548111156128d75760405162461bcd60e51b8152600401610f6c906142b1565b6001600160a01b03841660009081526008602052604090205460ff1615801561298657506001600160a01b03831660009081526008602052604090205460ff16155b156129b957602c548111156129ad5760405162461bcd60e51b8152600401610f6c906142b1565b60295461288984611954565b6001600160a01b03841660009081526008602052604090205460ff1680156129fa57506001600160a01b03831660009081526008602052604090205460ff16155b15612a5957602954612a0b84611954565b612a159084614280565b1115612a595760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610f6c565b6001600160a01b03841660009081526007602052604090205460ff16158015612a9b57506001600160a01b03841660009081526008602052604090205460ff16155b15612baf57602a546001600160a01b038516600090815260066020526040902060010154612ac99042614126565b1015612b8d57602b546001600160a01b038516600090815260066020526040902054612af6908390614280565b1115612b5a5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657220616d6f756e74206578636565647320746865206461696c60448201526c3cb6b0bc2a3c20b6b7bab73a1760991b6064820152608401610f6c565b6001600160a01b03841660009081526006602052604081208054839290612b82908490614280565b90915550612baf9050565b6001600160a01b03841660009081526006602052604090204260018201558190555b6000612bba30611954565b60285490915081108015908190612bd95750600a54610100900460ff16155b8015612bfe57506001600160a01b03861660009081526007602052604090205460ff16155b8015612c125750600a5462010000900460ff165b15612c25576028549150612c2582612fd0565b6001600160a01b03861660009081526004602052604090205460019060ff1680612c6757506001600160a01b03861660009081526004602052604090205460ff165b15612c70575060005b612c7c87878784613221565b50505050505050565b60008184841115612ca95760405162461bcd60e51b8152600401610f6c9190613da4565b506000612cb68486614126565b95945050505050565b6000806000612ccc6133d3565b9092509050612cdb8282612ce2565b9250505090565b60006110cd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613555565b600080612d318385614280565b9050838110156110cd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f6c565b6000806000806000806000806000612d9a8a613583565b9250925092506000806000612db88d8686612db3612cbf565b6135c5565b919f909e50909c50959a5093985091965092945050505050565b60006110cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c85565b600082612e2357506000610fe1565b6000612e2f8385614261565b905082612e3c85836142f9565b146110cd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f6c565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54612eca9082612d24565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff1615612f865761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54612f589083612d24565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc555b60405182815261dead906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016124ae565b611bab3383836124bb565b600a805461ff001916610100179055602f54602d54603054602e546000939291612ff991614280565b6130039190614280565b61300d9190614280565b9050600081602d54846130209190614261565b61302a91906142f9565b90506000826030548561303d9190614261565b61304791906142f9565b9050600083602e548661305a9190614261565b61306491906142f9565b9050600084602f54876130779190614261565b61308191906142f9565b90506000613090846002612ce2565b9050600061309e8583612dd2565b905047600083856130af888b614280565b6130b99190614280565b6130c39190614280565b90506130ce81613615565b60006130da4784612dd2565b90506000826130e98784614261565b6130f391906142f9565b90506000836131028c85614261565b61310c91906142f9565b905060008461311b8a86614261565b61312591906142f9565b90506000856131348c87614261565b61313e91906142f9565b602554909150613166906001600160a01b0316613161606461208987605a612e14565b61377e565b602654613186906001600160a01b0316613161606461208986605a612e14565b6027546131a6906001600160a01b0316613161606461208985605a612e14565b6131b088856137b9565b6000602e8190556030819055602d819055602f55604080518a8152602081018790529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050600a805461ff001916905550505050505050505050505050565b8061324e576132496000601d819055601181905560148190556017819055601a819055602055565b61327f565b6001600160a01b03841660009081526007602052604090205460ff161561327757613249613896565b61327f6138d9565b6001600160a01b03841660009081526005602052604090205460ff1680156132c057506001600160a01b03831660009081526005602052604090205460ff16155b156132d5576132d0848484613911565b611648565b6001600160a01b03841660009081526005602052604090205460ff1615801561331657506001600160a01b03831660009081526005602052604090205460ff165b15613326576132d0848484613ac6565b6001600160a01b03841660009081526005602052604090205460ff1615801561336857506001600160a01b03831660009081526005602052604090205460ff16155b15613378576132d0848484613b6f565b6001600160a01b03841660009081526005602052604090205460ff1680156133b857506001600160a01b03831660009081526005602052604090205460ff165b156133c8576132d0848484613bb3565b611648848484613b6f565b600f54600e546000918291825b60095481101561352557826001600060098481548110613402576134026140fa565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061346d5750816002600060098481548110613446576134466140fa565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561348357600f54600e54945094505050509091565b6134c9600160006009848154811061349d5761349d6140fa565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612dd2565b925061351160026000600984815481106134e5576134e56140fa565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612dd2565b91508061351d81614153565b9150506133e0565b50600e54600f5461353591612ce2565b82101561354c57600f54600e549350935050509091565b90939092509050565b600081836135765760405162461bcd60e51b8152600401610f6c9190613da4565b506000612cb684866142f9565b60008060008061359285613c26565b9050600061359f86613c42565b905060006135b7826135b18986612dd2565b90612dd2565b979296509094509092505050565b60008080806135d48886612e14565b905060006135e28887612e14565b905060006135f08888612e14565b90506000613602826135b18686612dd2565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061364a5761364a6140fa565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561369e57600080fd5b505afa1580156136b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d6919061431b565b816001815181106136e9576136e96140fa565b6001600160a01b03928316602091820292909201015260215461370f9130911684612396565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac94790613748908590600090869030904290600401614338565b600060405180830381600087803b15801561376257600080fd5b505af1158015613776573d6000803e3d6000fd5b505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156137b4573d6000803e3d6000fd5b505050565b6021546137d19030906001600160a01b031684612396565b6021546001600160a01b031663f305d7198230856000806137fa6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561385d57600080fd5b505af1158015613871573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203d91906143a9565b601e54601d55601254601181905560155460148190556018546017819055601b54601a8190556138d49390926138ce92918391612d24565b90612d24565b602055565b601f54601d55601354601181905560165460148190556019546017819055601c54601a8190556138d49390926138ce92918391612d24565b60008060008060008061392387612d83565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506139559088612dd2565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546139849087612dd2565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546139b39086612d24565b6001600160a01b0389166000908152600160209081526040909120919091555415613a64576139fb6139f660205461208960115485612e1490919063ffffffff16565b613c5e565b613a1e613a1960205461208960145485612e1490919063ffffffff16565b613cfc565b613a41613a3c60205461208960175485612e1490919063ffffffff16565b613d28565b613a64613a5f602054612089601a5485612e1490919063ffffffff16565b613d54565b613a6e8483613d80565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ab391815260200190565b60405180910390a3505050505050505050565b600080600080600080613ad887612d83565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150613b0a9087612dd2565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054613b409084612d24565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546139b39086612d24565b600080600080600080613b8187612d83565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506139849087612dd2565b600080600080600080613bc587612d83565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613bf79088612dd2565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613b0a9087612dd2565b6000610fe16064612089601d5485612e1490919063ffffffff16565b6000610fe1606461208960205485612e1490919063ffffffff16565b6000613c68612cbf565b90506000613c768383612e14565b90508260306000828254613c8a9190614280565b909155505030600090815260016020526040902054613ca99082612d24565b3060009081526001602090815260408083209390935560059052205460ff16156137b45730600090815260026020526040902054613ce79084612d24565b30600090815260026020526040902055505050565b6000613d06612cbf565b90506000613d148383612e14565b905082602d6000828254613c8a9190614280565b6000613d32612cbf565b90506000613d408383612e14565b905082602f6000828254613c8a9190614280565b6000613d5e612cbf565b90506000613d6c8383612e14565b905082602e6000828254613c8a9190614280565b600f54613d8d9083612dd2565b600f55601054613d9d9082612d24565b6010555050565b600060208083528351808285015260005b81811015613dd157858101830151858201604001528201613db5565b81811115613de3576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613e0e57600080fd5b50565b600060208284031215613e2357600080fd5b81356110cd81613df9565b60008060408385031215613e4157600080fd5b8235613e4c81613df9565b946020939093013593505050565b600080600060608486031215613e6f57600080fd5b8335613e7a81613df9565b92506020840135613e8a81613df9565b929592945050506040919091013590565b600060208284031215613ead57600080fd5b5035919050565b80358015158114613ec457600080fd5b919050565b60008060408385031215613edc57600080fd5b82359150613eec60208401613eb4565b90509250929050565b60008060408385031215613f0857600080fd5b50508035926020909101359150565b600080600080600060a08688031215613f2f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215613f6557600080fd5b8235613f7081613df9565b9150613eec60208401613eb4565b600060208284031215613f9057600080fd5b6110cd82613eb4565b60008083601f840112613fab57600080fd5b50813567ffffffffffffffff811115613fc357600080fd5b6020830191508360208260051b8501011115613fde57600080fd5b9250929050565b60008060008060408587031215613ffb57600080fd5b843567ffffffffffffffff8082111561401357600080fd5b61401f88838901613f99565b9096509450602087013591508082111561403857600080fd5b5061404587828801613f99565b95989497509550505050565b6000806040838503121561406457600080fd5b823561406f81613df9565b9150602083013561407f81613df9565b809150509250929050565b600181811c9082168061409e57607f821691505b602082108114156140bf57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561413857614138614110565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561416757614167614110565b5060010190565b600181815b808511156141a957816000190482111561418f5761418f614110565b8085161561419c57918102915b93841c9390800290614173565b509250929050565b6000826141c057506001610fe1565b816141cd57506000610fe1565b81600181146141e357600281146141ed57614209565b6001915050610fe1565b60ff8411156141fe576141fe614110565b50506001821b610fe1565b5060208310610133831016604e8410600b841016171561422c575081810a610fe1565b614236838361416e565b806000190482111561424a5761424a614110565b029392505050565b60006110cd60ff8416836141b1565b600081600019048311821515161561427b5761427b614110565b500290565b6000821982111561429357614293614110565b500190565b6000602082840312156142aa57600080fd5b5051919050565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b60008261431657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561432d57600080fd5b81516110cd81613df9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156143885784516001600160a01b031683529383019391830191600101614363565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156143be57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d437ccbd8ae1b4a3025c7153794a7eaedb0cdefabac45ec7d733c10289ca77bd64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106104815760003560e01c80637b40a2e911610255578063ad5c464811610144578063d4b45570116100c1578063ea2f0b3711610085578063ea2f0b3714610e0f578063ee587ec214610e2f578063f2fde38b14610e45578063f31eec6e14610e65578063f41377ca14610e7a578063fb4aa58514610e9a57600080fd5b8063d4b4557014610d44578063dd62ed3e14610d5a578063e3a43dda14610da0578063e420295414610dc0578063e6609a0d14610dd657600080fd5b8063bf620a4511610108578063bf620a4514610cae578063c05125fb14610cce578063c49b9a8014610ce4578063caac793414610d04578063d4a3883f14610d2457600080fd5b8063ad5c464814610bec578063b269dc7114610c0c578063b62496f514610c22578063b6632a5314610c52578063b92ebd5f14610c8e57600080fd5b806395d89b41116101d2578063a1ca534711610196578063a1ca534714610b56578063a457c2d714610b6c578063a786c18b14610b8c578063a9059cbb14610bac578063acefd83d14610bcc57600080fd5b806395d89b4114610adf578063982d8de514610af457806398d0bea414610b0a5780639a72c88014610b2a5780639bac4a9514610b4057600080fd5b806388f820201161021957806388f8202014610a285780638ba4cc3c14610a615780638da5cb5b14610a81578063906e9dd014610a9f57806391140c5614610abf57600080fd5b80637b40a2e91461099c5780637d1db4a5146109bc57806382531712146109d2578063834929ea146109f25780638743da6d14610a0857600080fd5b80633bd5d1731161037157806352390c02116102ee57806368182be8116102b257806368182be81461090257806370a0823114610918578063715018a614610938578063757cf6281461094d5780637ad410661461098657600080fd5b806352390c021461085d5780635342acb41461087d5780636144b2c5146108b65780636605bfda146108cc57806366a76e6c146108ec57600080fd5b806343e672701161033557806343e67270146107d15780634549b039146107e757806349bd5a5e146108075780634a74bb02146108275780634edfb71d1461084757600080fd5b80633bd5d1731461073b5780633c5129001461075b5780633ed500f11461077b57806342966c6814610791578063437823ec146107b157600080fd5b8063205da483116103ff57806334c87eee116103c357806334c87eee146106995780633685d419146106af57806337f28981146106cf578063382e329a14610705578063395093511461071b57600080fd5b8063205da483146105e857806323b872dd146106215780632d838119146106415780632d88286314610661578063313ce5671461067757600080fd5b806310d5de531161044657806310d5de531461054057806313114a9d146105705780631694505e1461058557806318160ddd146105bd5780631f1b845b146105d257600080fd5b8062b4c6ec1461048d57806306fdde03146104b65780630787e040146104d8578063095ea7b3146104fa5780630adc43d51461052a57600080fd5b3661048857005b600080fd5b34801561049957600080fd5b506104a360295481565b6040519081526020015b60405180910390f35b3480156104c257600080fd5b506104cb610eb0565b6040516104ad9190613da4565b3480156104e457600080fd5b506104f86104f3366004613e11565b610f42565b005b34801561050657600080fd5b5061051a610515366004613e2e565b610fd0565b60405190151581526020016104ad565b34801561053657600080fd5b506104a3601d5481565b34801561054c57600080fd5b5061051a61055b366004613e11565b60086020526000908152604090205460ff1681565b34801561057c57600080fd5b506010546104a3565b34801561059157600080fd5b506021546105a5906001600160a01b031681565b6040516001600160a01b0390911681526020016104ad565b3480156105c957600080fd5b50600e546104a3565b3480156105de57600080fd5b506104a360165481565b3480156105f457600080fd5b506104a3610603366004613e11565b6001600160a01b031660009081526006602052604090206004015490565b34801561062d57600080fd5b5061051a61063c366004613e5a565b610fe7565b34801561064d57600080fd5b506104a361065c366004613e9b565b611050565b34801561066d57600080fd5b506104a360145481565b34801561068357600080fd5b50600d5460405160ff90911681526020016104ad565b3480156106a557600080fd5b506104a3602f5481565b3480156106bb57600080fd5b506104f86106ca366004613e11565b6110d4565b3480156106db57600080fd5b506104a36106ea366004613e11565b6001600160a01b031660009081526006602052604090205490565b34801561071157600080fd5b506104a360115481565b34801561072757600080fd5b5061051a610736366004613e2e565b6112c2565b34801561074757600080fd5b506104f8610756366004613e9b565b6112f8565b34801561076757600080fd5b506104f8610776366004613e11565b6113e2565b34801561078757600080fd5b506104a360305481565b34801561079d57600080fd5b506104f86107ac366004613e9b565b611474565b3480156107bd57600080fd5b506104f86107cc366004613e11565b61164e565b3480156107dd57600080fd5b506104a360135481565b3480156107f357600080fd5b506104a3610802366004613ec9565b6116cc565b34801561081357600080fd5b506022546105a5906001600160a01b031681565b34801561083357600080fd5b50600a5461051a9062010000900460ff1681565b34801561085357600080fd5b506104a3601f5481565b34801561086957600080fd5b506104f8610878366004613e11565b611759565b34801561088957600080fd5b5061051a610898366004613e11565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156108c257600080fd5b506104a3602e5481565b3480156108d857600080fd5b506104f86108e7366004613e11565b6118dc565b3480156108f857600080fd5b506104a360195481565b34801561090e57600080fd5b506104a3602a5481565b34801561092457600080fd5b506104a3610933366004613e11565b611954565b34801561094457600080fd5b506104f86119b3565b34801561095957600080fd5b506104a3610968366004613e11565b6001600160a01b031660009081526006602052604090206003015490565b34801561099257600080fd5b506104a3601a5481565b3480156109a857600080fd5b506104f86109b7366004613ef5565b611a27565b3480156109c857600080fd5b506104a3602c5481565b3480156109de57600080fd5b506104f86109ed366004613f17565b611acb565b3480156109fe57600080fd5b506104a3601b5481565b348015610a1457600080fd5b506026546105a5906001600160a01b031681565b348015610a3457600080fd5b5061051a610a43366004613e11565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610a6d57600080fd5b506104f8610a7c366004613e2e565b611b65565b348015610a8d57600080fd5b506000546001600160a01b03166105a5565b348015610aab57600080fd5b506104f8610aba366004613e11565b611baf565b348015610acb57600080fd5b506104f8610ada366004613f17565b611c27565b348015610aeb57600080fd5b506104cb611cb6565b348015610b0057600080fd5b506104a3602d5481565b348015610b1657600080fd5b506027546105a5906001600160a01b031681565b348015610b3657600080fd5b506104a3601c5481565b348015610b4c57600080fd5b506104a360175481565b348015610b6257600080fd5b506104a360205481565b348015610b7857600080fd5b5061051a610b87366004613e2e565b611cc5565b348015610b9857600080fd5b506024546105a5906001600160a01b031681565b348015610bb857600080fd5b5061051a610bc7366004613e2e565b611d14565b348015610bd857600080fd5b506104f8610be7366004613f52565b611d21565b348015610bf857600080fd5b506023546105a5906001600160a01b031681565b348015610c1857600080fd5b506104a3602b5481565b348015610c2e57600080fd5b5061051a610c3d366004613e11565b60076020526000908152604090205460ff1681565b348015610c5e57600080fd5b5061051a610c6d366004613e11565b6001600160a01b031660009081526006602052604090206002015460ff1690565b348015610c9a57600080fd5b506104f8610ca9366004613f7e565b611da7565b348015610cba57600080fd5b506104f8610cc9366004613e2e565b611e12565b348015610cda57600080fd5b506104a360185481565b348015610cf057600080fd5b506104f8610cff366004613f7e565b611ed8565b348015610d1057600080fd5b506025546105a5906001600160a01b031681565b348015610d3057600080fd5b506104f8610d3f366004613fe5565b611f4d565b348015610d5057600080fd5b506104a3601e5481565b348015610d6657600080fd5b506104a3610d75366004614051565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610dac57600080fd5b506104f8610dbb366004613ef5565b612044565b348015610dcc57600080fd5b506104a360125481565b348015610de257600080fd5b506104a3610df1366004613e11565b6001600160a01b031660009081526006602052604090206001015490565b348015610e1b57600080fd5b506104f8610e2a366004613e11565b6120e0565b348015610e3b57600080fd5b506105a561dead81565b348015610e5157600080fd5b506104f8610e60366004613e11565b61215b565b348015610e7157600080fd5b506104a3612245565b348015610e8657600080fd5b506104f8610e95366004613e11565b61231e565b348015610ea657600080fd5b506104a360155481565b6060600b8054610ebf9061408a565b80601f0160208091040260200160405190810160405280929190818152602001828054610eeb9061408a565b8015610f385780601f10610f0d57610100808354040283529160200191610f38565b820191906000526020600020905b815481529060010190602001808311610f1b57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f755760405162461bcd60e51b8152600401610f6c906140c5565b60405180910390fd5b6001600160a01b038116600081815260076020908152604091829020805460ff1916600117905590519182527f8ee06c35c3f5b7df6a6daa7e40d7aa88c13d6e606cd3c03a766bc53a66cdedb691015b60405180910390a150565b6000610fdd338484612396565b5060015b92915050565b6000610ff48484846124bb565b6110468433611041856040518060600160405280602881526020016143d8602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612c85565b612396565b5060019392505050565b6000600f548211156110b75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f6c565b60006110c1612cbf565b90506110cd8382612ce2565b9392505050565b6000546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b03811660009081526005602052604090205460ff166111665760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610f6c565b60005b60095481101561128857816001600160a01b031660098281548110611190576111906140fa565b6000918252602090912001546001600160a01b0316141561127657600980546111bb90600190614126565b815481106111cb576111cb6140fa565b600091825260209091200154600980546001600160a01b0390921691839081106111f7576111f76140fa565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600980548061124f5761124f61413d565b600082815260209020810160001990810180546001600160a01b0319169055019055611288565b8061128081614153565b915050611169565b506040516001600160a01b03821681527fb31990b399410eeea874c2c81063feb4b5e55f66f46004a8306f10a81f031d3f90602001610fc5565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610fdd9185906110419086612d24565b3360008181526005602052604090205460ff161561136d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610f6c565b600061137883612d83565b505050506001600160a01b0384166000908152600160205260409020549192506113a491905082612dd2565b6001600160a01b038316600090815260016020526040902055600f546113ca9082612dd2565b600f556010546113da9084612d24565b601055505050565b6000546001600160a01b0316331461140c5760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b038116600081815260066020908152604080832060028101805460ff19169055600381018490556004018390558051938452908301919091527f3c2f88c2d934145e680e5651c98370f6e7869b4fe4fd16a91d7be0671fd2f4a19101610fc5565b33806114cc5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610f6c565b6001600160a01b03811661dead14156115315760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865206275726e206164647265736044820152607360f81b6064820152608401610f6c565b600061153c82611954565b9050828110156115995760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610f6c565b60006115ad6115a6612cbf565b8590612e14565b6001600160a01b0384166000908152600160205260409020549091506115d39082612dd2565b6001600160a01b03841660009081526001602090815260408083209390935560059052205460ff161561163d576001600160a01b0383166000908152600260205260409020546116239085612dd2565b6001600160a01b0384166000908152600260205260409020555b611648838583612e93565b50505050565b6000546001600160a01b031633146116785760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b629101610fc5565b6000600e548311156117205760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f6c565b8161173f57600061173084612d83565b50939550610fe1945050505050565b600061174a84612d83565b50929550610fe1945050505050565b6000546001600160a01b031633146117835760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b03811660009081526005602052604090205460ff16156117ec5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f6c565b6001600160a01b03811660009081526001602052604090205415611846576001600160a01b03811660009081526001602052604090205461182c90611050565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556009805491820181559093527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90920180546001600160a01b0319168417905590519182527f6f6f36b62c3e3a776fc3052d503097ffb886d7eb4546e768132fef82747e30b99101610fc5565b6000546001600160a01b031633146119065760405162461bcd60e51b8152600401610f6c906140c5565b602680546001600160a01b0319166001600160a01b0383169081179091556040519081527fa956ec5d1bfa4d3cf86651bce8dfee650c06c14e553621914adbac1b20c5be0090602001610fc5565b6001600160a01b03811660009081526005602052604081205460ff161561199157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610fe190611050565b6000546001600160a01b031633146119dd5760405162461bcd60e51b8152600401610f6c906140c5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611a515760405162461bcd60e51b8152600401610f6c906140c5565b600d54611a629060ff16600a614252565b611a6c9083614261565b602b55600d54611a809060ff16600a614252565b611a8a9082614261565b602c5560408051838152602081018390527f9a60806b80683c0f1e6c1d2f63e47e300945d15205686c36807fc286aa14e5a491015b60405180910390a15050565b6000546001600160a01b03163314611af55760405162461bcd60e51b8152600401610f6c906140c5565b601f859055601384905560168390556019829055601c819055604080518681526020810186905290810184905260608101839052608081018290527f1de27f982a5a2e5b60e90309cab78d9ab8bc72d1eb1cc2a1ce7d764d05098ad19060a0015b60405180910390a15050505050565b6000546001600160a01b03163314611b8f5760405162461bcd60e51b8152600401610f6c906140c5565b611bab3383611ba684670de0b6b3a7640000614261565b6124bb565b5050565b6000546001600160a01b03163314611bd95760405162461bcd60e51b8152600401610f6c906140c5565b602580546001600160a01b0319166001600160a01b0383169081179091556040519081527f0a797a504d88dafb7a5b2f6eba20ee68ec359dfea7c7b5c682a3befefbb73d8e90602001610fc5565b6000546001600160a01b03163314611c515760405162461bcd60e51b8152600401610f6c906140c5565b601e859055601284905560158390556018829055601b819055604080518681526020810186905290810184905260608101839052608081018290527ff8a705b84a676a85ccaa4f1b5c10010014d9a799f1f704903e34b8a5f2facc7e9060a001611b56565b6060600c8054610ebf9061408a565b6000610fdd338461104185604051806060016040528060258152602001614400602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612c85565b6000610fdd3384846124bb565b6000546001600160a01b03163314611d4b5760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f2162ce92c3a4912863d16071bf16a983997aaa42e497768ceddbf5992ee122609101611abf565b6000546001600160a01b03163314611dd15760405162461bcd60e51b8152600401610f6c906140c5565b600a805460ff19168215159081179091556040519081527f29738dcc625d24e64a3df0de4b648e35d2b8044b5442f5c44fe89ffa2de8a69a90602001610fc5565b6000546001600160a01b03163314611e3c5760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b038216600090815260066020526040902060028101805460ff1916600117905542600390910155611e778162015180614261565b6001600160a01b0383166000818152600660209081526040918290206004019390935580519182526001928201929092529081018290527f9dda046cbc86da321bb00fc7380d7951491fa72d7bcb0492771db2dd1dadf3c690606001611abf565b6000546001600160a01b03163314611f025760405162461bcd60e51b8152600401610f6c906140c5565b600a8054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610fc590831515815260200190565b6000546001600160a01b03163314611f775760405162461bcd60e51b8152600401610f6c906140c5565b6000838214611fc85760405162461bcd60e51b815260206004820152601760248201527f6d757374206265207468652073616d65206c656e6774680000000000000000006044820152606401610f6c565b8381101561203d5761202b858583818110611fe557611fe56140fa565b9050602002016020810190611ffa9190613e11565b84848481811061200c5761200c6140fa565b90506020020135670de0b6b3a76400006120269190614261565b612fc5565b612036600182614280565b9050611fc8565b5050505050565b6000546001600160a01b0316331461206e5760405162461bcd60e51b8152600401610f6c906140c5565b61208f61271061208984600e54612e1490919063ffffffff16565b90612ce2565b602855600e546120a790612710906120899084612e14565b60295560408051838152602081018390527f06d7925a478fc398e43f23768d67307305d40c613994c8f8234bdaafc0f3f08e9101611abf565b6000546001600160a01b0316331461210a5760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101610fc5565b6000546001600160a01b031633146121855760405162461bcd60e51b8152600401610f6c906140c5565b6001600160a01b0381166121ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f6c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b602254600090819061225f906001600160a01b0316611954565b6023546022546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a082319060240160206040518083038186803b1580156122ac57600080fd5b505afa1580156122c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e49190614298565b90506000816122f5575060006110cd565b600d5461231690839061230c9060ff16600a614252565b6120899086614261565b949350505050565b6000546001600160a01b031633146123485760405162461bcd60e51b8152600401610f6c906140c5565b602780546001600160a01b0319166001600160a01b0383169081179091556040519081527f656c212610c2fb098cbf3d0ffd9a6904957777648d9161ad45b7e7bcef0793c090602001610fc5565b6001600160a01b0383166123f85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f6c565b6001600160a01b0382166124595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f6c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661251f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f6c565b6001600160a01b0382166125815760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f6c565b600081116125e35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f6c565b6001600160a01b03831660009081526006602052604090206002015460ff16801561263a57506001600160a01b038316600090815260066020526040902060048101546003909101546126369190614280565b4210155b1561266f576001600160a01b038316600090815260066020526040812060028101805460ff1916905560048101829055600301555b6001600160a01b03831660009081526006602052604090206002015460ff1680156126c557506001600160a01b038316600090815260066020526040902060048101546003909101546126c29190614280565b42105b15612736576001600160a01b03831660009081526006602052604090206002015460ff16156127365760405162461bcd60e51b815260206004820152601f60248201527f4c6f636b6564204163636f756e742063616e206e6f74207472616e73666572006044820152606401610f6c565b600080612741612245565b11156127745761276d612752612245565b600d546127639060ff16600a614252565b6120899085614261565b9050612778565b5060005b6000546001600160a01b038581169116148015906127a457506000546001600160a01b03848116911614155b15612baf57600a5460ff16612837576001600160a01b03841660009081526004602052604090205460ff16806127f257506001600160a01b03831660009081526004602052604090205460ff165b6128375760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f6c565b6001600160a01b03841660009081526007602052604090205460ff16801561287857506001600160a01b03831660009081526008602052604090205460ff16155b156128dc5760295461288984611954565b6128939084614280565b11156128d75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610f6c565b612a59565b6001600160a01b03831660009081526007602052604090205460ff16801561291d57506001600160a01b03841660009081526008602052604090205460ff16155b1561294457602c548111156128d75760405162461bcd60e51b8152600401610f6c906142b1565b6001600160a01b03841660009081526008602052604090205460ff1615801561298657506001600160a01b03831660009081526008602052604090205460ff16155b156129b957602c548111156129ad5760405162461bcd60e51b8152600401610f6c906142b1565b60295461288984611954565b6001600160a01b03841660009081526008602052604090205460ff1680156129fa57506001600160a01b03831660009081526008602052604090205460ff16155b15612a5957602954612a0b84611954565b612a159084614280565b1115612a595760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610f6c565b6001600160a01b03841660009081526007602052604090205460ff16158015612a9b57506001600160a01b03841660009081526008602052604090205460ff16155b15612baf57602a546001600160a01b038516600090815260066020526040902060010154612ac99042614126565b1015612b8d57602b546001600160a01b038516600090815260066020526040902054612af6908390614280565b1115612b5a5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657220616d6f756e74206578636565647320746865206461696c60448201526c3cb6b0bc2a3c20b6b7bab73a1760991b6064820152608401610f6c565b6001600160a01b03841660009081526006602052604081208054839290612b82908490614280565b90915550612baf9050565b6001600160a01b03841660009081526006602052604090204260018201558190555b6000612bba30611954565b60285490915081108015908190612bd95750600a54610100900460ff16155b8015612bfe57506001600160a01b03861660009081526007602052604090205460ff16155b8015612c125750600a5462010000900460ff165b15612c25576028549150612c2582612fd0565b6001600160a01b03861660009081526004602052604090205460019060ff1680612c6757506001600160a01b03861660009081526004602052604090205460ff165b15612c70575060005b612c7c87878784613221565b50505050505050565b60008184841115612ca95760405162461bcd60e51b8152600401610f6c9190613da4565b506000612cb68486614126565b95945050505050565b6000806000612ccc6133d3565b9092509050612cdb8282612ce2565b9250505090565b60006110cd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613555565b600080612d318385614280565b9050838110156110cd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f6c565b6000806000806000806000806000612d9a8a613583565b9250925092506000806000612db88d8686612db3612cbf565b6135c5565b919f909e50909c50959a5093985091965092945050505050565b60006110cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c85565b600082612e2357506000610fe1565b6000612e2f8385614261565b905082612e3c85836142f9565b146110cd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f6c565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54612eca9082612d24565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff1615612f865761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54612f589083612d24565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc555b60405182815261dead906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016124ae565b611bab3383836124bb565b600a805461ff001916610100179055602f54602d54603054602e546000939291612ff991614280565b6130039190614280565b61300d9190614280565b9050600081602d54846130209190614261565b61302a91906142f9565b90506000826030548561303d9190614261565b61304791906142f9565b9050600083602e548661305a9190614261565b61306491906142f9565b9050600084602f54876130779190614261565b61308191906142f9565b90506000613090846002612ce2565b9050600061309e8583612dd2565b905047600083856130af888b614280565b6130b99190614280565b6130c39190614280565b90506130ce81613615565b60006130da4784612dd2565b90506000826130e98784614261565b6130f391906142f9565b90506000836131028c85614261565b61310c91906142f9565b905060008461311b8a86614261565b61312591906142f9565b90506000856131348c87614261565b61313e91906142f9565b602554909150613166906001600160a01b0316613161606461208987605a612e14565b61377e565b602654613186906001600160a01b0316613161606461208986605a612e14565b6027546131a6906001600160a01b0316613161606461208985605a612e14565b6131b088856137b9565b6000602e8190556030819055602d819055602f55604080518a8152602081018790529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050600a805461ff001916905550505050505050505050505050565b8061324e576132496000601d819055601181905560148190556017819055601a819055602055565b61327f565b6001600160a01b03841660009081526007602052604090205460ff161561327757613249613896565b61327f6138d9565b6001600160a01b03841660009081526005602052604090205460ff1680156132c057506001600160a01b03831660009081526005602052604090205460ff16155b156132d5576132d0848484613911565b611648565b6001600160a01b03841660009081526005602052604090205460ff1615801561331657506001600160a01b03831660009081526005602052604090205460ff165b15613326576132d0848484613ac6565b6001600160a01b03841660009081526005602052604090205460ff1615801561336857506001600160a01b03831660009081526005602052604090205460ff16155b15613378576132d0848484613b6f565b6001600160a01b03841660009081526005602052604090205460ff1680156133b857506001600160a01b03831660009081526005602052604090205460ff165b156133c8576132d0848484613bb3565b611648848484613b6f565b600f54600e546000918291825b60095481101561352557826001600060098481548110613402576134026140fa565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061346d5750816002600060098481548110613446576134466140fa565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561348357600f54600e54945094505050509091565b6134c9600160006009848154811061349d5761349d6140fa565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612dd2565b925061351160026000600984815481106134e5576134e56140fa565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612dd2565b91508061351d81614153565b9150506133e0565b50600e54600f5461353591612ce2565b82101561354c57600f54600e549350935050509091565b90939092509050565b600081836135765760405162461bcd60e51b8152600401610f6c9190613da4565b506000612cb684866142f9565b60008060008061359285613c26565b9050600061359f86613c42565b905060006135b7826135b18986612dd2565b90612dd2565b979296509094509092505050565b60008080806135d48886612e14565b905060006135e28887612e14565b905060006135f08888612e14565b90506000613602826135b18686612dd2565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061364a5761364a6140fa565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561369e57600080fd5b505afa1580156136b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d6919061431b565b816001815181106136e9576136e96140fa565b6001600160a01b03928316602091820292909201015260215461370f9130911684612396565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac94790613748908590600090869030904290600401614338565b600060405180830381600087803b15801561376257600080fd5b505af1158015613776573d6000803e3d6000fd5b505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156137b4573d6000803e3d6000fd5b505050565b6021546137d19030906001600160a01b031684612396565b6021546001600160a01b031663f305d7198230856000806137fa6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561385d57600080fd5b505af1158015613871573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203d91906143a9565b601e54601d55601254601181905560155460148190556018546017819055601b54601a8190556138d49390926138ce92918391612d24565b90612d24565b602055565b601f54601d55601354601181905560165460148190556019546017819055601c54601a8190556138d49390926138ce92918391612d24565b60008060008060008061392387612d83565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506139559088612dd2565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546139849087612dd2565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546139b39086612d24565b6001600160a01b0389166000908152600160209081526040909120919091555415613a64576139fb6139f660205461208960115485612e1490919063ffffffff16565b613c5e565b613a1e613a1960205461208960145485612e1490919063ffffffff16565b613cfc565b613a41613a3c60205461208960175485612e1490919063ffffffff16565b613d28565b613a64613a5f602054612089601a5485612e1490919063ffffffff16565b613d54565b613a6e8483613d80565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ab391815260200190565b60405180910390a3505050505050505050565b600080600080600080613ad887612d83565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150613b0a9087612dd2565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054613b409084612d24565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546139b39086612d24565b600080600080600080613b8187612d83565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506139849087612dd2565b600080600080600080613bc587612d83565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613bf79088612dd2565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613b0a9087612dd2565b6000610fe16064612089601d5485612e1490919063ffffffff16565b6000610fe1606461208960205485612e1490919063ffffffff16565b6000613c68612cbf565b90506000613c768383612e14565b90508260306000828254613c8a9190614280565b909155505030600090815260016020526040902054613ca99082612d24565b3060009081526001602090815260408083209390935560059052205460ff16156137b45730600090815260026020526040902054613ce79084612d24565b30600090815260026020526040902055505050565b6000613d06612cbf565b90506000613d148383612e14565b905082602d6000828254613c8a9190614280565b6000613d32612cbf565b90506000613d408383612e14565b905082602f6000828254613c8a9190614280565b6000613d5e612cbf565b90506000613d6c8383612e14565b905082602e6000828254613c8a9190614280565b600f54613d8d9083612dd2565b600f55601054613d9d9082612d24565b6010555050565b600060208083528351808285015260005b81811015613dd157858101830151858201604001528201613db5565b81811115613de3576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613e0e57600080fd5b50565b600060208284031215613e2357600080fd5b81356110cd81613df9565b60008060408385031215613e4157600080fd5b8235613e4c81613df9565b946020939093013593505050565b600080600060608486031215613e6f57600080fd5b8335613e7a81613df9565b92506020840135613e8a81613df9565b929592945050506040919091013590565b600060208284031215613ead57600080fd5b5035919050565b80358015158114613ec457600080fd5b919050565b60008060408385031215613edc57600080fd5b82359150613eec60208401613eb4565b90509250929050565b60008060408385031215613f0857600080fd5b50508035926020909101359150565b600080600080600060a08688031215613f2f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215613f6557600080fd5b8235613f7081613df9565b9150613eec60208401613eb4565b600060208284031215613f9057600080fd5b6110cd82613eb4565b60008083601f840112613fab57600080fd5b50813567ffffffffffffffff811115613fc357600080fd5b6020830191508360208260051b8501011115613fde57600080fd5b9250929050565b60008060008060408587031215613ffb57600080fd5b843567ffffffffffffffff8082111561401357600080fd5b61401f88838901613f99565b9096509450602087013591508082111561403857600080fd5b5061404587828801613f99565b95989497509550505050565b6000806040838503121561406457600080fd5b823561406f81613df9565b9150602083013561407f81613df9565b809150509250929050565b600181811c9082168061409e57607f821691505b602082108114156140bf57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561413857614138614110565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561416757614167614110565b5060010190565b600181815b808511156141a957816000190482111561418f5761418f614110565b8085161561419c57918102915b93841c9390800290614173565b509250929050565b6000826141c057506001610fe1565b816141cd57506000610fe1565b81600181146141e357600281146141ed57614209565b6001915050610fe1565b60ff8411156141fe576141fe614110565b50506001821b610fe1565b5060208310610133831016604e8410600b841016171561422c575081810a610fe1565b614236838361416e565b806000190482111561424a5761424a614110565b029392505050565b60006110cd60ff8416836141b1565b600081600019048311821515161561427b5761427b614110565b500290565b6000821982111561429357614293614110565b500190565b6000602082840312156142aa57600080fd5b5051919050565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b60008261431657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561432d57600080fd5b81516110cd81613df9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156143885784516001600160a01b031683529383019391830191600101614363565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156143be57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d437ccbd8ae1b4a3025c7153794a7eaedb0cdefabac45ec7d733c10289ca77bd64736f6c63430008090033

Deployed Bytecode Sourcemap

14894:33247:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17398:47;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;17398:47:0;;;;;;;;20292:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;46396:192::-;;;;;;;;;;-1:-1:-1;46396:192:0;;;;;:::i;:::-;;:::i;:::-;;21204:161;;;;;;;;;;-1:-1:-1;21204:161:0;;;;;:::i;:::-;;:::i;:::-;;;1671:14:1;;1664:22;1646:41;;1634:2;1619:18;21204:161:0;1506:187:1;16663:29:0;;;;;;;;;;;;;;;;15624:64;;;;;;;;;;-1:-1:-1;15624:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40723:87;;;;;;;;;;-1:-1:-1;40792:10:0;;40723:87;;16821:42;;;;;;;;;;-1:-1:-1;16821:42:0;;;;-1:-1:-1;;;;;16821:42:0;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;16821:42:0;1698:230:1;20569:95:0;;;;;;;;;;-1:-1:-1;20649:7:0;;20569:95;;16370:36;;;;;;;;;;;;;;;;41924:147;;;;;;;;;;-1:-1:-1;41924:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;42028:24:0;42001:7;42028:24;;;:15;:24;;;;;:35;;;;41924:147;21714:313;;;;;;;;;;-1:-1:-1;21714:313:0;;;;;:::i;:::-;;:::i;39891:250::-;;;;;;;;;;-1:-1:-1;39891:250:0;;;;;:::i;:::-;;:::i;16293:28::-;;;;;;;;;;;;;;;;20478:83;;;;;;;;;;-1:-1:-1;20544:9:0;;20478:83;;20544:9;;;;2721:36:1;;2709:2;2694:18;20478:83:0;2579:184:1;17705:41:0;;;;;;;;;;;;;;;;42624:521;;;;;;;;;;-1:-1:-1;42624:521:0;;;;;:::i;:::-;;:::i;41333:136::-;;;;;;;;;;-1:-1:-1;41333:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;41430:24:0;41403:7;41430:24;;;:15;:24;;;;;:31;;41333:136;16171:28;;;;;;;;;;;;;;;;22035:218;;;;;;;;;;-1:-1:-1;22035:218:0;;;;;:::i;:::-;;:::i;40818:377::-;;;;;;;;;;-1:-1:-1;40818:377:0;;;;;:::i;:::-;;:::i;46927:266::-;;;;;;;;;;-1:-1:-1;46927:266:0;;;;;:::i;:::-;;:::i;17753:42::-;;;;;;;;;;;;;;;;22538:623;;;;;;;;;;-1:-1:-1;22538:623:0;;;;;:::i;:::-;;:::i;43157:154::-;;;;;;;;;;-1:-1:-1;43157:154:0;;;;;:::i;:::-;;:::i;16248:36::-;;;;;;;;;;;;;;;;40149:428;;;;;;;;;;-1:-1:-1;40149:428:0;;;;;:::i;:::-;;:::i;16870:28::-;;;;;;;;;;-1:-1:-1;16870:28:0;;;;-1:-1:-1;;;;;16870:28:0;;;15794:40;;;;;;;;;;-1:-1:-1;15794:40:0;;;;;;;;;;;16742:37;;;;;;;;;;;;;;;;42239:377;;;;;;;;;;-1:-1:-1;42239:377:0;;;;;:::i;:::-;;:::i;41203:122::-;;;;;;;;;;-1:-1:-1;41203:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;41290:27:0;41267:4;41290:27;;;:18;:27;;;;;;;;;41203:122;17655:43;;;;;;;;;;;;;;;;44783:181;;;;;;;;;;-1:-1:-1;44783:181:0;;;;;:::i;:::-;;:::i;16490:35::-;;;;;;;;;;;;;;;;17452:41;;;;;;;;;;;;;;;;20672:198;;;;;;;;;;-1:-1:-1;20672:198:0;;;;;:::i;:::-;;:::i;6387:145::-;;;;;;;;;;;;;:::i;41771:::-;;;;;;;;;;-1:-1:-1;41771:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;41873:24:0;41846:7;41873:24;;;:15;:24;;;;;:35;;;;41771:145;16534:29;;;;;;;;;;;;;;;;46065:323;;;;;;;;;;-1:-1:-1;46065:323:0;;;;;:::i;:::-;;:::i;17555:42::-;;;;;;;;;;;;;;;;44029:547;;;;;;;;;;-1:-1:-1;44029:547:0;;;;;:::i;:::-;;:::i;16570:36::-;;;;;;;;;;;;;;;;17096:76;;;;;;;;;;-1:-1:-1;17096:76:0;;;;-1:-1:-1;;;;;17096:76:0;;;40595:120;;;;;;;;;;-1:-1:-1;40595:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;40687:20:0;40663:4;40687:20;;;:11;:20;;;;;;;;;40595:120;47425:142;;;;;;;;;;-1:-1:-1;47425:142:0;;;;;:::i;:::-;;:::i;5762:77::-;;;;;;;;;;-1:-1:-1;5800:7:0;5826:6;-1:-1:-1;;;;;5826:6:0;5762:77;;44584:187;;;;;;;;;;-1:-1:-1;44584:187:0;;;;;:::i;:::-;;:::i;43486:531::-;;;;;;;;;;-1:-1:-1;43486:531:0;;;;;:::i;:::-;;:::i;20383:87::-;;;;;;;;;;;;;:::i;17606:42::-;;;;;;;;;;;;;;;;17179:78;;;;;;;;;;-1:-1:-1;17179:78:0;;;;-1:-1:-1;;;;;17179:78:0;;;16613:37;;;;;;;;;;;;;;;;16415:27;;;;;;;;;;;;;;;;16788:24;;;;;;;;;;;;;;;;22261:269;;;;;;;;;;-1:-1:-1;22261:269:0;;;;;:::i;:::-;;:::i;16932:73::-;;;;;;;;;;-1:-1:-1;16932:73:0;;;;-1:-1:-1;;;;;16932:73:0;;;20878:167;;;;;;;;;;-1:-1:-1;20878:167:0;;;;;:::i;:::-;;:::i;47201:216::-;;;;;;;;;;-1:-1:-1;47201:216:0;;;;;:::i;:::-;;:::i;16905:18::-;;;;;;;;;;-1:-1:-1;16905:18:0;;;;-1:-1:-1;;;;;16905:18:0;;;17500:48;;;;;;;;;;;;;;;;15559:58;;;;;;;;;;-1:-1:-1;15559:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;41625:138;;;;;;;;;;-1:-1:-1;41625:138:0;;;;;:::i;:::-;-1:-1:-1;;;;;41722:24:0;41698:4;41722:24;;;:15;:24;;;;;:33;;;;;;41625:138;45370:166;;;;;;;;;;-1:-1:-1;45370:166:0;;;;;:::i;:::-;;:::i;46596:323::-;;;;;;;;;;-1:-1:-1;46596:323:0;;;;;:::i;:::-;;:::i;16449:34::-;;;;;;;;;;;;;;;;45187:175;;;;;;;;;;-1:-1:-1;45187:175:0;;;;;:::i;:::-;;:::i;17012:77::-;;;;;;;;;;-1:-1:-1;17012:77:0;;;;-1:-1:-1;;;;;17012:77:0;;;47718:381;;;;;;;;;;-1:-1:-1;47718:381:0;;;;;:::i;:::-;;:::i;16699:36::-;;;;;;;;;;;;;;;;21053:143;;;;;;;;;;-1:-1:-1;21053:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;21161:18:0;;;21134:7;21161:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21053:143;45544:513;;;;;;;;;;-1:-1:-1;45544:513:0;;;;;:::i;:::-;;:::i;16206:35::-;;;;;;;;;;;;;;;;41479:138;;;;;;;;;;-1:-1:-1;41479:138:0;;;;;:::i;:::-;-1:-1:-1;;;;;41575:24:0;41548:7;41575:24;;;:15;:24;;;;;:34;;;;41479:138;43323:151;;;;;;;;;;-1:-1:-1;43323:151:0;;;;;:::i;:::-;;:::i;17266:55::-;;;;;;;;;;;;17314:6;17266:55;;6682:240;;;;;;;;;;-1:-1:-1;6682:240:0;;;;;:::i;:::-;;:::i;26955:414::-;;;;;;;;;;;;;:::i;44978:193::-;;;;;;;;;;-1:-1:-1;44978:193:0;;;;;:::i;:::-;;:::i;16328:35::-;;;;;;;;;;;;;;;;20292:83;20329:13;20362:5;20355:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20292:83;:::o;46396:192::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;46482:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:41;;-1:-1:-1;;46482:41:0::1;46519:4;46482:41;::::0;;46540:40;;1871:51:1;;;46540:40:0::1;::::0;1844:18:1;46540:40:0::1;;;;;;;;46396:192:::0;:::o;21204:161::-;21279:4;21296:39;2410:10;21319:7;21328:6;21296:8;:39::i;:::-;-1:-1:-1;21353:4:0;21204:161;;;;;:::o;21714:313::-;21812:4;21829:36;21839:6;21847:9;21858:6;21829:9;:36::i;:::-;21876:121;21885:6;2410:10;21907:89;21945:6;21907:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21907:19:0;;;;;;:11;:19;;;;;;;;2410:10;21907:33;;;;;;;;;;:37;:89::i;:::-;21876:8;:121::i;:::-;-1:-1:-1;22015:4:0;21714:313;;;;;:::o;39891:250::-;39957:7;39995;;39984;:18;;39976:73;;;;-1:-1:-1;;;39976:73:0;;7323:2:1;39976:73:0;;;7305:21:1;7362:2;7342:18;;;7335:30;7401:34;7381:18;;;7374:62;-1:-1:-1;;;7452:18:1;;;7445:40;7502:19;;39976:73:0;7121:406:1;39976:73:0;40059:19;40082:10;:8;:10::i;:::-;40059:33;-1:-1:-1;40109:24:0;:7;40059:33;40109:11;:24::i;:::-;40102:31;39891:250;-1:-1:-1;;;39891:250:0:o;42624:521::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42706:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;42698:60;;;::::0;-1:-1:-1;;;42698:60:0;;7734:2:1;42698:60:0::1;::::0;::::1;7716:21:1::0;7773:2;7753:18;;;7746:30;7812:29;7792:18;;;7785:57;7859:18;;42698:60:0::1;7532:351:1::0;42698:60:0::1;42774:9;42769:327;42793:9;:16:::0;42789:20;::::1;42769:327;;;42851:7;-1:-1:-1::0;;;;;42835:23:0::1;:9;42845:1;42835:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;42835:12:0::1;:23;42831:254;;;42894:9;42904:16:::0;;:20:::1;::::0;42923:1:::1;::::0;42904:20:::1;:::i;:::-;42894:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;42879:9:::1;:12:::0;;-1:-1:-1;;;;;42894:31:0;;::::1;::::0;42889:1;;42879:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;42879:46:0::1;-1:-1:-1::0;;;;;42879:46:0;;::::1;;::::0;;42944:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;42983:11:::1;:20:::0;;;;:28;;-1:-1:-1;;42983:28:0::1;::::0;;43030:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;43030:15:0;;;;;-1:-1:-1;;;;;;43030:15:0::1;::::0;;;;;43064:5:::1;;42831:254;42811:3:::0;::::1;::::0;::::1;:::i;:::-;;;;42769:327;;;-1:-1:-1::0;43113:24:0::1;::::0;-1:-1:-1;;;;;1889:32:1;;1871:51;;43113:24:0::1;::::0;1859:2:1;1844:18;43113:24:0::1;1698:230:1::0;22035:218:0;2410:10;22123:4;22172:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22172:34:0;;;;;;;;;;22123:4;;22140:83;;22163:7;;22172:50;;22211:10;22172:38;:50::i;40818:377::-;2410:10;40870:14;40919:19;;;:11;:19;;;;;;;;40918:20;40910:77;;;;-1:-1:-1;;;40910:77:0;;8756:2:1;40910:77:0;;;8738:21:1;8795:2;8775:18;;;8768:30;8834:34;8814:18;;;8807:62;-1:-1:-1;;;8885:18:1;;;8878:42;8937:19;;40910:77:0;8554:408:1;40910:77:0;40999:15;41023:19;41034:7;41023:10;:19::i;:::-;-1:-1:-1;;;;;;;;;41071:15:0;;;;;;:7;:15;;;;;;40998:44;;-1:-1:-1;41071:28:0;;:15;-1:-1:-1;40998:44:0;41071:19;:28::i;:::-;-1:-1:-1;;;;;41053:15:0;;;;;;:7;:15;;;;;:46;41120:7;;:20;;41132:7;41120:11;:20::i;:::-;41110:7;:30;41164:10;;:23;;41179:7;41164:14;:23::i;:::-;41151:10;:36;-1:-1:-1;;;40818:377:0:o;46927:266::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46999:24:0;::::1;47035:5;46999:24:::0;;;:15:::1;:24;::::0;;;;;;;:33:::1;::::0;::::1;:41:::0;;-1:-1:-1;;46999:41:0::1;::::0;;47051:35:::1;::::0;::::1;:39:::0;;;47101:35:::1;;:39:::0;;;47156:29;;9135:51:1;;;9202:18;;;9195:50;;;;47156:29:0::1;::::0;9108:18:1;47156:29:0::1;8967:284:1::0;22538:623:0;2410:10;;22627:66;;;;-1:-1:-1;;;22627:66:0;;9458:2:1;22627:66:0;;;9440:21:1;9497:2;9477:18;;;9470:30;9536:34;9516:18;;;9509:62;-1:-1:-1;;;9587:18:1;;;9580:31;9628:19;;22627:66:0;9256:397:1;22627:66:0;-1:-1:-1;;;;;22711:32:0;;17314:6;22711:32;;22703:78;;;;-1:-1:-1;;;22703:78:0;;9860:2:1;22703:78:0;;;9842:21:1;9899:2;9879:18;;;9872:30;9938:34;9918:18;;;9911:62;-1:-1:-1;;;9989:18:1;;;9982:31;10030:19;;22703:78:0;9658:397:1;22703:78:0;22793:15;22811:17;22821:6;22811:9;:17::i;:::-;22793:35;;22857:5;22846:7;:16;;22838:63;;;;-1:-1:-1;;;22838:63:0;;10262:2:1;22838:63:0;;;10244:21:1;10301:2;10281:18;;;10274:30;10340:34;10320:18;;;10313:62;-1:-1:-1;;;10391:18:1;;;10384:32;10433:19;;22838:63:0;10060:398:1;22838:63:0;22913:13;22929:21;22939:10;:8;:10::i;:::-;22929:5;;:9;:21::i;:::-;-1:-1:-1;;;;;22980:15:0;;;;;;:7;:15;;;;;;22913:37;;-1:-1:-1;22980:26:0;;22913:37;22980:19;:26::i;:::-;-1:-1:-1;;;;;22962:15:0;;;;;;:7;:15;;;;;;;;:44;;;;23029:11;:19;;;;;;23025:81;;;-1:-1:-1;;;;;23080:15:0;;;;;;:7;:15;;;;;;:26;;23100:5;23080:19;:26::i;:::-;-1:-1:-1;;;;;23062:15:0;;;;;;:7;:15;;;;;:44;23025:81;23118:35;23131:6;23139:5;23146;23118:11;:35::i;:::-;22576:585;;;22538:623;:::o;43157:154::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43228:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;43228:34:0::1;43258:4;43228:34;::::0;;43280:23;;1871:51:1;;;43280:23:0::1;::::0;1844:18:1;43280:23:0::1;1698:230:1::0;40149:428:0;40239:7;40277;;40266;:18;;40258:62;;;;-1:-1:-1;;;40258:62:0;;10665:2:1;40258:62:0;;;10647:21:1;10704:2;10684:18;;;10677:30;10743:33;10723:18;;;10716:61;10794:18;;40258:62:0;10463:355:1;40258:62:0;40335:17;40330:240;;40369:15;40393:19;40404:7;40393:10;:19::i;:::-;-1:-1:-1;40368:44:0;;-1:-1:-1;40426:14:0;;-1:-1:-1;;;;;40426:14:0;40330:240;40473:23;40504:19;40515:7;40504:10;:19::i;:::-;-1:-1:-1;40471:52:0;;-1:-1:-1;40537:22:0;;-1:-1:-1;;;;;40537:22:0;42239:377;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42322:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;42321:21;42313:61;;;::::0;-1:-1:-1;;;42313:61:0;;11025:2:1;42313:61:0::1;::::0;::::1;11007:21:1::0;11064:2;11044:18;;;11037:30;11103:29;11083:18;;;11076:57;11150:18;;42313:61:0::1;10823:351:1::0;42313:61:0::1;-1:-1:-1::0;;;;;42388:16:0;::::1;42407:1;42388:16:::0;;;:7:::1;:16;::::0;;;;;:20;42385:108:::1;;-1:-1:-1::0;;;;;42464:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;42444:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;42425:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;42385:108:::1;-1:-1:-1::0;;;;;42503:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;42503:27:0::1;42526:4;42503:27:::0;;::::1;::::0;;;42541:9:::1;:23:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;42541:23:0::1;::::0;::::1;::::0;;42582:26;;1871:51:1;;;42582:26:0::1;::::0;1844:18:1;42582:26:0::1;1698:230:1::0;44783:181:0;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;44867:16:::1;:34:::0;;-1:-1:-1;;;;;;44867:34:0::1;-1:-1:-1::0;;;;;44867:34:0;::::1;::::0;;::::1;::::0;;;44918:38:::1;::::0;1871:51:1;;;44918:38:0::1;::::0;1859:2:1;1844:18;44918:38:0::1;1698:230:1::0;20672:198:0;-1:-1:-1;;;;;20762:20:0;;20738:7;20762:20;;;:11;:20;;;;;;;;20758:49;;;-1:-1:-1;;;;;;20791:16:0;;;;;:7;:16;;;;;;;20672:198::o;20758:49::-;-1:-1:-1;;;;;20845:16:0;;;;;;:7;:16;;;;;;20825:37;;:19;:37::i;6387:145::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;6493:1:::1;6477:6:::0;;6456:40:::1;::::0;-1:-1:-1;;;;;6477:6:0;;::::1;::::0;6456:40:::1;::::0;6493:1;;6456:40:::1;6523:1;6506:19:::0;;-1:-1:-1;;;;;;6506:19:0::1;::::0;;6387:145::o;46065:323::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;46232:9:::1;::::0;46226:15:::1;::::0;46232:9:::1;;46226:2;:15;:::i;:::-;46207:34;::::0;:16;:34:::1;:::i;:::-;46187:17;:54:::0;46287:9:::1;::::0;46281:15:::1;::::0;46287:9:::1;;46281:2;:15;:::i;:::-;46267:29;::::0;:11;:29:::1;:::i;:::-;46252:12;:44:::0;46314:66:::1;::::0;;12909:25:1;;;12965:2;12950:18;;12943:34;;;46314:66:0::1;::::0;12882:18:1;46314:66:0::1;;;;;;;;46065:323:::0;;:::o;44029:547::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;44219:18:::1;:38:::0;;;44268:17:::1;:36:::0;;;44315:17:::1;:36:::0;;;44362:16:::1;:34:::0;;;44407:18:::1;:38:::0;;;44463:105:::1;::::0;;13247:25:1;;;13303:2;13288:18;;13281:34;;;13331:18;;;13324:34;;;13389:2;13374:18;;13367:34;;;13432:3;13417:19;;13410:35;;;44463:105:0::1;::::0;13234:3:1;13219:19;44463:105:0::1;;;;;;;;44029:547:::0;;;;;:::o;47425:142::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;47508:51:::1;2410:10:::0;47532:9;47543:15:::1;:6:::0;47552::::1;47543:15;:::i;:::-;47508:9;:51::i;:::-;47425:142:::0;;:::o;44584:187::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;44670:17:::1;:36:::0;;-1:-1:-1;;;;;;44670:36:0::1;-1:-1:-1::0;;;;;44670:36:0;::::1;::::0;;::::1;::::0;;;44723:40:::1;::::0;1871:51:1;;;44723:40:0::1;::::0;1859:2:1;1844:18;44723:40:0::1;1698:230:1::0;43486:531:0;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;43670:17:::1;:36:::0;;;43717:16:::1;:34:::0;;;43762:16:::1;:34:::0;;;43807:15:::1;:32:::0;;;43850:17:::1;:36:::0;;;43904:105:::1;::::0;;13247:25:1;;;13303:2;13288:18;;13281:34;;;13331:18;;;13324:34;;;13389:2;13374:18;;13367:34;;;13432:3;13417:19;;13410:35;;;43904:105:0::1;::::0;13234:3:1;13219:19;43904:105:0::1;12988:463:1::0;20383:87:0;20422:13;20455:7;20448:14;;;;;:::i;22261:269::-;22354:4;22371:129;2410:10;22394:7;22403:96;22442:15;22403:96;;;;;;;;;;;;;;;;;2410:10;22403:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22403:34:0;;;;;;;;;;;;:38;:96::i;20878:167::-;20956:4;20973:42;2410:10;20997:9;21008:6;20973:9;:42::i;47201:216::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47298:40:0;::::1;;::::0;;;:31:::1;:40;::::0;;;;;;;;:50;;-1:-1:-1;;47298:50:0::1;::::0;::::1;;::::0;;::::1;::::0;;;47364:45;;9135:51:1;;;9202:18;;;9195:50;47364:45:0::1;::::0;9108:18:1;47364:45:0::1;8967:284:1::0;45370:166:0;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;45447:14:::1;:30:::0;;-1:-1:-1;;45447:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;45494:34:::1;::::0;1646:41:1;;;45494:34:0::1;::::0;1634:2:1;1619:18;45494:34:0::1;1506:187:1::0;46596:323:0;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46686:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;:33:::1;::::0;::::1;:40:::0;;-1:-1:-1;;46686:40:0::1;46722:4;46686:40;::::0;;46775:15:::1;46737:35;::::0;;::::1;:53:::0;46839:18:::1;:10:::0;46852:5:::1;46839:18;:::i;:::-;-1:-1:-1::0;;;;;46801:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;;;;:35:::1;;:56:::0;;;;46873:38;;13652:51:1;;;46894:4:0::1;13719:18:1::0;;;13712:50;;;;13778:18;;;13771:34;;;46873:38:0::1;::::0;13640:2:1;13625:18;46873:38:0::1;13456:355:1::0;45187:175:0;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;45266:21:::1;:32:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;45266:32:0;;::::1;;::::0;;45316:38:::1;::::0;::::1;::::0;::::1;::::0;45290:8;1671:14:1;1664:22;1646:41;;1634:2;1619:18;;1506:187;47718:381:0;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;47829:16:::1;47867:35:::0;;::::1;47859:71;;;::::0;-1:-1:-1;;;47859:71:0;;14018:2:1;47859:71:0::1;::::0;::::1;14000:21:1::0;14057:2;14037:18;;;14030:30;14096:25;14076:18;;;14069:53;14139:18;;47859:71:0::1;13816:347:1::0;47859:71:0::1;47946:28:::0;;::::1;47940:152;;;47989:65;48005:10;;48016:8;48005:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;48027:7;;48035:8;48027:17;;;;;;;:::i;:::-;;;;;;;48047:6;48027:26;;;;:::i;:::-;47989:15;:65::i;:::-;48068:13;48080:1;48068:13:::0;::::1;:::i;:::-;;;47940:152;;;47819:280;47718:381:::0;;;;:::o;45544:513::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;45763:64:::1;45821:5;45763:53;45775:40;45763:7;;:11;;:53;;;;:::i;:::-;:57:::0;::::1;:64::i;:::-;45731:29;:96:::0;45856:7:::1;::::0;:50:::1;::::0;45900:5:::1;::::0;45856:39:::1;::::0;45868:26;45856:11:::1;:39::i;:50::-;45837:16;:69:::0;45923:126:::1;::::0;;12909:25:1;;;12965:2;12950:18;;12943:34;;;45923:126:0::1;::::0;12882:18:1;45923:126:0::1;12735:248:1::0;43323:151:0;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43392:27:0;::::1;43422:5;43392:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;43392:35:0::1;::::0;;43445:21;;1871:51:1;;;43445:21:0::1;::::0;1844:18:1;43445:21:0::1;1698:230:1::0;6682:240:0;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6770:22:0;::::1;6762:73;;;::::0;-1:-1:-1;;;6762:73:0;;14503:2:1;6762:73:0::1;::::0;::::1;14485:21:1::0;14542:2;14522:18;;;14515:30;14581:34;14561:18;;;14554:62;-1:-1:-1;;;14632:18:1;;;14625:36;14678:19;;6762:73:0::1;14301:402:1::0;6762:73:0::1;6871:6;::::0;;6850:38:::1;::::0;-1:-1:-1;;;;;6850:38:0;;::::1;::::0;6871:6;::::1;::::0;6850:38:::1;::::0;::::1;6898:6;:17:::0;;-1:-1:-1;;;;;;6898:17:0::1;-1:-1:-1::0;;;;;6898:17:0;;;::::1;::::0;;;::::1;::::0;;6682:240::o;26955:414::-;27056:13;;27006:7;;;;27046:24;;-1:-1:-1;;;;;27056:13:0;27046:9;:24::i;:::-;27100:4;;27115:13;;27100:29;;-1:-1:-1;;;27100:29:0;;-1:-1:-1;;;;;27115:13:0;;;27100:29;;;1871:51:1;27024:46:0;;-1:-1:-1;27080:17:0;;27100:4;;;:14;;1844:18:1;;27100:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27080:49;-1:-1:-1;27139:23:0;27175:14;27172:158;;-1:-1:-1;27223:1:0;27172:158;;;27294:9;;27273:46;;27309:9;;27288:15;;27294:9;;27288:2;:15;:::i;:::-;27274:29;;:11;:29;:::i;27273:46::-;27255:64;27346:15;-1:-1:-1;;;;26955:414:0:o;44978:193::-;5967:6;;-1:-1:-1;;;;;5967:6:0;2410:10;5967:22;5959:67;;;;-1:-1:-1;;;5959:67:0;;;;;;;:::i;:::-;45066:18:::1;:38:::0;;-1:-1:-1;;;;;;45066:38:0::1;-1:-1:-1::0;;;;;45066:38:0;::::1;::::0;;::::1;::::0;;;45121:42:::1;::::0;1871:51:1;;;45121:42:0::1;::::0;1859:2:1;1844:18;45121:42:0::1;1698:230:1::0;21373:333:0;-1:-1:-1;;;;;21465:19:0;;21457:68;;;;-1:-1:-1;;;21457:68:0;;15099:2:1;21457:68:0;;;15081:21:1;15138:2;15118:18;;;15111:30;15177:34;15157:18;;;15150:62;-1:-1:-1;;;15228:18:1;;;15221:34;15272:19;;21457:68:0;14897:400:1;21457:68:0;-1:-1:-1;;;;;21543:21:0;;21535:68;;;;-1:-1:-1;;;21535:68:0;;15504:2:1;21535:68:0;;;15486:21:1;15543:2;15523:18;;;15516:30;15582:34;15562:18;;;15555:62;-1:-1:-1;;;15633:18:1;;;15626:32;15675:19;;21535:68:0;15302:398:1;21535:68:0;-1:-1:-1;;;;;21615:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21666:32;;160:25:1;;;21666:32:0;;133:18:1;21666:32:0;;;;;;;;21373:333;;;:::o;23498:3449::-;-1:-1:-1;;;;;23617:18:0;;23609:68;;;;-1:-1:-1;;;23609:68:0;;15907:2:1;23609:68:0;;;15889:21:1;15946:2;15926:18;;;15919:30;15985:34;15965:18;;;15958:62;-1:-1:-1;;;16036:18:1;;;16029:35;16081:19;;23609:68:0;15705:401:1;23609:68:0;-1:-1:-1;;;;;23695:16:0;;23687:64;;;;-1:-1:-1;;;23687:64:0;;16313:2:1;23687:64:0;;;16295:21:1;16352:2;16332:18;;;16325:30;16391:34;16371:18;;;16364:62;-1:-1:-1;;;16442:18:1;;;16435:33;16485:19;;23687:64:0;16111:399:1;23687:64:0;23778:1;23769:6;:10;23761:64;;;;-1:-1:-1;;;23761:64:0;;16717:2:1;23761:64:0;;;16699:21:1;16756:2;16736:18;;;16729:30;16795:34;16775:18;;;16768:62;-1:-1:-1;;;16846:18:1;;;16839:39;16895:19;;23761:64:0;16515:405:1;23761:64:0;-1:-1:-1;;;;;23838:21:0;;;;;;:15;:21;;;;;:30;;;;;:120;;;;-1:-1:-1;;;;;;23926:21:0;;;;;;:15;:21;;;;;:32;;;;23891;;;;;:67;;23926:32;23891:67;:::i;:::-;23872:15;:86;;23838:120;23835:288;;;-1:-1:-1;;;;;23974:21:0;;24007:5;23974:21;;;:15;:21;;;;;:30;;;:38;;-1:-1:-1;;23974:38:0;;;24026:32;;;:36;;;24076:32;;:36;23835:288;-1:-1:-1;;;;;24139:21:0;;;;;;:15;:21;;;;;:30;;;;;:119;;;;-1:-1:-1;;;;;;24226:21:0;;;;;;:15;:21;;;;;:32;;;;24191;;;;;:67;;24226:32;24191:67;:::i;:::-;24173:15;:85;24139:119;24135:225;;;-1:-1:-1;;;;;24283:21:0;;;;;;:15;:21;;;;;:30;;;;;24282:31;24274:75;;;;-1:-1:-1;;;24274:75:0;;17127:2:1;24274:75:0;;;17109:21:1;17166:2;17146:18;;;17139:30;17205:33;17185:18;;;17178:61;17256:18;;24274:75:0;16925:355:1;24274:75:0;24371:17;24426:1;24402:21;:19;:21::i;:::-;:25;24398:165;;;24455:53;24486:21;:19;:21::i;:::-;24471:9;;24465:15;;24471:9;;24465:2;:15;:::i;:::-;24456:24;;:6;:24;:::i;24455:53::-;24443:65;;24398:165;;;-1:-1:-1;24550:1:0;24398:165;5800:7;5826:6;-1:-1:-1;;;;;24577:15:0;;;5826:6;;24577:15;;;;:32;;-1:-1:-1;5800:7:0;5826:6;-1:-1:-1;;;;;24596:13:0;;;5826:6;;24596:13;;24577:32;24574:1701;;;24629:14;;;;24625:137;;-1:-1:-1;;;;;24670:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24698:22:0;;;;;;:18;:22;;;;;;;;24670:50;24662:85;;;;-1:-1:-1;;;24662:85:0;;17487:2:1;24662:85:0;;;17469:21:1;17526:2;17506:18;;;17499:30;-1:-1:-1;;;17545:18:1;;;17538:52;17607:18;;24662:85:0;17285:346:1;24662:85:0;-1:-1:-1;;;;;24792:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;24828:35:0;;;;;;:31;:35;;;;;;;;24827:36;24792:71;24788:871;;;24918:16;;24901:13;24911:2;24901:9;:13::i;:::-;24892:22;;:6;:22;:::i;:::-;:42;;24884:74;;;;-1:-1:-1;;;24884:74:0;;17838:2:1;24884:74:0;;;17820:21:1;17877:2;17857:18;;;17850:30;-1:-1:-1;;;17896:18:1;;;17889:49;17955:18;;24884:74:0;17636:343:1;24884:74:0;24788:871;;;-1:-1:-1;;;;;24985:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;25019:37:0;;;;;;:31;:37;;;;;;;;25018:38;24985:71;24981:678;;;25097:12;;25084:9;:25;;25076:78;;;;-1:-1:-1;;;25076:78:0;;;;;;;:::i;24981:678::-;-1:-1:-1;;;;;25181:37:0;;;;;;:31;:37;;;;;;;;25180:38;:78;;;;-1:-1:-1;;;;;;25223:35:0;;;;;;:31;:35;;;;;;;;25222:36;25180:78;25177:482;;;25299:12;;25286:9;:25;;25278:78;;;;-1:-1:-1;;;25278:78:0;;;;;;;:::i;:::-;25408:16;;25391:13;25401:2;25391:9;:13::i;25177:482::-;-1:-1:-1;;;;;25473:37:0;;;;;;:31;:37;;;;;;;;:77;;;;-1:-1:-1;;;;;;25515:35:0;;;;;;:31;:35;;;;;;;;25514:36;25473:77;25469:190;;;25604:16;;25587:13;25597:2;25587:9;:13::i;:::-;25578:22;;:6;:22;:::i;:::-;:42;;25570:74;;;;-1:-1:-1;;;25570:74:0;;17838:2:1;25570:74:0;;;17820:21:1;17877:2;17857:18;;;17850:30;-1:-1:-1;;;17896:18:1;;;17889:49;17955:18;;25570:74:0;17636:343:1;25570:74:0;-1:-1:-1;;;;;25690:31:0;;;;;;:25;:31;;;;;;;;25689:32;:74;;;;-1:-1:-1;;;;;;25726:37:0;;;;;;:31;:37;;;;;;;;25725:38;25689:74;25685:567;;;25840:15;;-1:-1:-1;;;;;25806:21:0;;;;;;:15;:21;;;;;:31;;;25788:49;;:15;:49;:::i;:::-;:67;25783:455;;;25931:17;;-1:-1:-1;;;;;25887:21:0;;;;;;:15;:21;;;;;:28;:40;;25918:9;;25887:40;:::i;:::-;:61;;25879:119;;;;-1:-1:-1;;;25879:119:0;;18595:2:1;25879:119:0;;;18577:21:1;18634:2;18614:18;;;18607:30;18673:34;18653:18;;;18646:62;-1:-1:-1;;;18724:18:1;;;18717:43;18777:19;;25879:119:0;18393:409:1;25879:119:0;-1:-1:-1;;;;;26020:21:0;;;;;;:15;:21;;;;;:41;;26052:9;;26020:21;:41;;26052:9;;26020:41;:::i;:::-;;;;-1:-1:-1;25783:455:0;;-1:-1:-1;25783:455:0;;-1:-1:-1;;;;;26108:21:0;;;;;;:15;:21;;;;;26142:15;26108:31;;;:49;26179:40;;;25783:455;26286:28;26317:24;26335:4;26317:9;:24::i;:::-;26411:29;;26286:55;;-1:-1:-1;26387:53:0;;;;;;;26467:52;;-1:-1:-1;26503:16:0;;;;;;;26502:17;26467:52;:100;;;;-1:-1:-1;;;;;;26536:31:0;;;;;;:25;:31;;;;;;;;26535:32;26467:100;:137;;;;-1:-1:-1;26583:21:0;;;;;;;26467:137;26450:292;;;26652:29;;26629:52;;26695:36;26710:20;26695:14;:36::i;:::-;-1:-1:-1;;;;;26801:24:0;;26760:12;26801:24;;;:18;:24;;;;;;26775:4;;26801:24;;;:50;;-1:-1:-1;;;;;;26829:22:0;;;;;;:18;:22;;;;;;;;26801:50;26798:94;;;-1:-1:-1;26876:5:0;26798:94;26901:38;26916:4;26921:2;26924:6;26931:7;26901:14;:38::i;:::-;23599:3348;;;;23498:3449;;;:::o;1192:191::-;1278:7;1314:12;1306:6;;;;1298:29;;;;-1:-1:-1;;;1298:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1338:9:0;1350:5;1354:1;1350;:5;:::i;:::-;1338:17;1192:191;-1:-1:-1;;;;;1192:191:0:o;38786:161::-;38827:7;38847:15;38864;38883:19;:17;:19::i;:::-;38846:56;;-1:-1:-1;38846:56:0;-1:-1:-1;38919:20:0;38846:56;;38919:11;:20::i;:::-;38912:27;;;;38786:161;:::o;1649:132::-;1707:7;1734:39;1738:1;1741;1734:39;;;;;;;;;;;;;;;;;:3;:39::i;860:180::-;918:7;;950:5;954:1;950;:5;:::i;:::-;938:17;;979:1;974;:6;;966:46;;;;-1:-1:-1;;;966:46:0;;19009:2:1;966:46:0;;;18991:21:1;19048:2;19028:18;;;19021:30;19087:29;19067:18;;;19060:57;19134:18;;966:46:0;18807:351:1;37542:439:0;37601:7;37610;37619;37628;37637;37646;37666:23;37691:19;37712:14;37730:20;37742:7;37730:11;:20::i;:::-;37665:85;;;;;;37761:15;37778:23;37803:19;37826:53;37838:7;37847:11;37860:6;37868:10;:8;:10::i;:::-;37826:11;:53::i;:::-;37760:119;;;;-1:-1:-1;37760:119:0;;-1:-1:-1;37936:15:0;;-1:-1:-1;37953:11:0;;-1:-1:-1;37966:6:0;;-1:-1:-1;37542:439:0;;-1:-1:-1;;;;;37542:439:0:o;1048:136::-;1106:7;1133:43;1137:1;1140;1133:43;;;;;;;;;;;;;;;;;:3;:43::i;1391:250::-;1449:7;1475:6;1471:47;;-1:-1:-1;1505:1:0;1498:8;;1471:47;1530:9;1542:5;1546:1;1542;:5;:::i;:::-;1530:17;-1:-1:-1;1575:1:0;1566:5;1570:1;1530:17;1566:5;:::i;:::-;:10;1558:56;;;;-1:-1:-1;;;1558:56:0;;19587:2:1;1558:56:0;;;19569:21:1;19626:2;19606:18;;;19599:30;19665:34;19645:18;;;19638:62;-1:-1:-1;;;19716:18:1;;;19709:31;19757:19;;1558:56:0;19385:397:1;23169:321:0;17314:6;23282:22;;:7;:22;;;;:33;;23309:5;23282:26;:33::i;:::-;17314:6;23257:22;;;:58;23329:11;23257:22;23329:26;;;;;23325:102;;;17314:6;23394:22;;:7;:22;;;;:33;;23421:5;23394:26;:33::i;:::-;17314:6;23369:22;;:7;:22;;;:58;23325:102;23444:38;;160:25:1;;;17314:6:0;;-1:-1:-1;;;;;23444:38:0;;;;;148:2:1;133:18;23444:38:0;14:177:1;47578:129:0;47657:42;2410:10;47681:9;47692:6;47657:9;:42::i;27377:1965::-;19341:16;:23;;-1:-1:-1;;19341:23:0;;;;;27580:26:::1;::::0;27550:27:::1;::::0;27520::::1;::::0;27489:28:::1;::::0;19341:23;;27580:26;27550:27;27489:58:::1;::::0;::::1;:::i;:::-;:88;;;;:::i;:::-;:117;;;;:::i;:::-;27462:144;;27616:25;27699:16;27668:27;;27644:20;:52;;;;:::i;:::-;:71;;;;:::i;:::-;27616:99;;27725:25;27808:16;27777:27;;27753:20;:52;;;;:::i;:::-;:71;;;;:::i;:::-;27725:99;;27834:26;27919:16;27887:28;;27863:20;:53;;;;:::i;:::-;:72;;;;:::i;:::-;27834:101;;27945:24;28026:16;27996:26;;27972:20;:51;;;;:::i;:::-;:70;;;;:::i;:::-;27945:97:::0;-1:-1:-1;28059:12:0::1;28074:24;:17:::0;28096:1:::1;28074:21;:24::i;:::-;28059:39:::0;-1:-1:-1;28108:17:0::1;28128:27;:17:::0;28059:39;28128:21:::1;:27::i;:::-;28108:47:::0;-1:-1:-1;28190:21:0::1;28165:22;28310:4:::0;28291:16;28250:38:::1;28270:18:::0;28250:17;:38:::1;:::i;:::-;:57;;;;:::i;:::-;:64;;;;:::i;:::-;28221:93;;28325:36;28342:18;28325:16;:36::i;:::-;28374:18;28395:41;:21;28421:14:::0;28395:25:::1;:41::i;:::-;28374:62:::0;-1:-1:-1;28446:23:0::1;28492:18:::0;28472:17:::1;28485:4:::0;28374:62;28472:17:::1;:::i;:::-;:38;;;;:::i;:::-;28446:64:::0;-1:-1:-1;28520:23:0::1;28579:18:::0;28546:30:::1;28559:17:::0;28546:10;:30:::1;:::i;:::-;:51;;;;:::i;:::-;28520:77:::0;-1:-1:-1;28607:22:0::1;28664:18:::0;28632:29:::1;28645:16:::0;28632:10;:29:::1;:::i;:::-;:50;;;;:::i;:::-;28607:75:::0;-1:-1:-1;28692:24:0::1;28753:18:::0;28719:31:::1;28732:18:::0;28719:10;:31:::1;:::i;:::-;:52;;;;:::i;:::-;28812:17;::::0;28692:79;;-1:-1:-1;28783:82:0::1;::::0;-1:-1:-1;;;;;28812:17:0::1;28832:32;28860:3;28832:23;:15:::0;28852:2:::1;28832:19;:23::i;:32::-;28783:20;:82::i;:::-;28904:16;::::0;28875:80:::1;::::0;-1:-1:-1;;;;;28904:16:0::1;28923:31;28950:3;28923:22;:14:::0;28942:2:::1;28923:18;:22::i;28875:80::-;28994:18;::::0;28965:84:::1;::::0;-1:-1:-1;;;;;28994:18:0::1;29015:33;29044:3;29015:24;:16:::0;29036:2:::1;29015:20;:24::i;28965:84::-;29061:40;29074:9;29085:15;29061:12;:40::i;:::-;29142:1;29111:28;:32:::0;;;29153:27:::1;:31:::0;;;29194:27:::1;:31:::0;;;29235:26:::1;:30:::0;29291:43:::1;::::0;;19989:25:1;;;20045:2;20030:18;;20023:34;;;20073:18;;;20066:34;;;29291:43:0::1;::::0;19977:2:1;19962:18;29291:43:0::1;;;;;;;-1:-1:-1::0;;19387:16:0;:24;;-1:-1:-1;;19387:24:0;;;-1:-1:-1;;;;;;;;;;;;;27377:1965:0:o;30271:912::-;30382:7;30378:182;;30404:14;31268:1;31251:14;:18;;;31279:13;:17;;;31306:13;:17;;;31333:12;:16;;;31359:14;:18;;;31387:9;:13;31191:217;30404:14;30378:182;;;-1:-1:-1;;;;;30439:33:0;;;;;;:25;:33;;;;;;;;30435:125;;;30488:14;:12;:14::i;30435:125::-;30534:15;:13;:15::i;:::-;-1:-1:-1;;;;;30587:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30611:22:0;;;;;;:11;:22;;;;;;;;30610:23;30587:46;30583:587;;;30649:48;30671:6;30679:9;30690:6;30649:21;:48::i;:::-;30583:587;;;-1:-1:-1;;;;;30719:19:0;;;;;;:11;:19;;;;;;;;30718:20;:46;;;;-1:-1:-1;;;;;;30742:22:0;;;;;;:11;:22;;;;;;;;30718:46;30714:456;;;30780:46;30800:6;30808:9;30819:6;30780:19;:46::i;30714:456::-;-1:-1:-1;;;;;30848:19:0;;;;;;:11;:19;;;;;;;;30847:20;:47;;;;-1:-1:-1;;;;;;30872:22:0;;;;;;:11;:22;;;;;;;;30871:23;30847:47;30843:327;;;30910:44;30928:6;30936:9;30947:6;30910:17;:44::i;30843:327::-;-1:-1:-1;;;;;30975:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;30998:22:0;;;;;;:11;:22;;;;;;;;30975:45;30971:199;;;31036:48;31058:6;31066:9;31077:6;31036:21;:48::i;30971:199::-;31115:44;31133:6;31141:9;31152:6;31115:17;:44::i;38955:552::-;39051:7;;39086;;39005;;;;;39109:285;39133:9;:16;39129:20;;39109:285;;;39198:7;39174;:21;39182:9;39192:1;39182:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39182:12:0;39174:21;;;;;;;;;;;;;:31;;:66;;;39233:7;39209;:21;39217:9;39227:1;39217:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39217:12:0;39209:21;;;;;;;;;;;;;:31;39174:66;39170:97;;;39250:7;;39259;;39242:25;;;;;;;38955:552;;:::o;39170:97::-;39291:34;39303:7;:21;39311:9;39321:1;39311:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39311:12:0;39303:21;;;;;;;;;;;;;39291:7;;:11;:34::i;:::-;39281:44;;39349:34;39361:7;:21;39369:9;39379:1;39369:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39369:12:0;39361:21;;;;;;;;;;;;;39349:7;;:11;:34::i;:::-;39339:44;-1:-1:-1;39151:3:0;;;;:::i;:::-;;;;39109:285;;;-1:-1:-1;39429:7:0;;39417;;:20;;:11;:20::i;:::-;39407:7;:30;39403:61;;;39447:7;;39456;;39439:25;;;;;;38955:552;;:::o;39403:61::-;39482:7;;39491;;-1:-1:-1;38955:552:0;-1:-1:-1;38955:552:0:o;1789:191::-;1875:7;1910:12;1903:5;1895:28;;;;-1:-1:-1;;;1895:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1934:9:0;1946:5;1950:1;1946;:5;:::i;37989:338::-;38049:7;38058;38067;38086:19;38108:31;38131:7;38108:22;:31::i;:::-;38086:53;;38149:14;38166:26;38184:7;38166:17;:26::i;:::-;38149:43;-1:-1:-1;38202:23:0;38228:36;38149:43;38228:24;:7;38240:11;38228;:24::i;:::-;:28;;:36::i;:::-;38202:62;38299:11;;-1:-1:-1;38312:6:0;;-1:-1:-1;37989:338:0;;-1:-1:-1;;;37989:338:0:o;38335:443::-;38453:7;;;;38508:24;:7;38520:11;38508;:24::i;:::-;38490:42;-1:-1:-1;38542:19:0;38564:28;:11;38580;38564:15;:28::i;:::-;38542:50;-1:-1:-1;38602:14:0;38619:23;:6;38630:11;38619:10;:23::i;:::-;38602:40;-1:-1:-1;38652:23:0;38678:36;38602:40;38678:24;:7;38690:11;38678;:24::i;:36::-;38732:7;;;;-1:-1:-1;38758:11:0;;-1:-1:-1;38335:443:0;;-1:-1:-1;;;;;;;38335:443:0:o;29350:495::-;29442:16;;;29456:1;29442:16;;;;;;;;29418:21;;29442:16;;;;;;;;;;-1:-1:-1;29442:16:0;29418:40;;29486:4;29468;29473:1;29468:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29468:23:0;;;:7;;;;;;;;;;:23;;;;29511:15;;:22;;;-1:-1:-1;;;29511:22:0;;;;:15;;;;;:20;;:22;;;;;29468:7;;29511:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29501:4;29506:1;29501:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29501:32:0;;;:7;;;;;;;;;:32;29577:15;;29545:62;;29562:4;;29577:15;29595:11;29545:8;:62::i;:::-;29619:15;;:218;;-1:-1:-1;;;29619:218:0;;-1:-1:-1;;;;;29619:15:0;;;;:66;;:218;;29699:11;;29619:15;;29767:4;;29793;;29812:15;;29619:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29406:439;29350:495;:::o;42079:126::-;42171:26;;-1:-1:-1;;;;;42171:18:0;;;:26;;;;;42190:6;;42171:26;;;;42190:6;42171:18;:26;;;;;;;;;;;;;;;;;;;;;42079:126;;:::o;29853:410::-;29968:15;;29936:62;;29953:4;;-1:-1:-1;;;;;29968:15:0;29986:11;29936:8;:62::i;:::-;30010:15;;-1:-1:-1;;;;;30010:15:0;:31;30049:9;30081:4;30100:11;30010:15;;30209:7;5800;5826:6;-1:-1:-1;;;;;5826:6:0;;5762:77;30209:7;30010:245;;;;;;-1:-1:-1;;;;;;30010:245:0;;;-1:-1:-1;;;;;21843:15:1;;;30010:245:0;;;21825:34:1;21875:18;;;21868:34;;;;21918:18;;;21911:34;;;;21961:18;;;21954:34;22025:15;;;22004:19;;;21997:44;30230:15:0;22057:19:1;;;22050:35;21759:19;;30010:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31419:341::-;31478:17;;31461:14;:34;31520:16;;31504:13;:32;;;31561:16;;31545:13;:32;;;31601:15;;31586:12;:30;;;31642:17;;31625:14;:34;;;31680:70;;31642:17;;31680:50;;31601:15;31680:50;;:17;:32::i;:::-;:36;;:50::i;:70::-;31668:9;:82;31419:341::o;31768:345::-;31828:18;;31811:14;:35;31871:17;;31855:13;:33;;;31913:17;;31897:13;:33;;;31954:16;;31939:12;:31;;;31996:18;;31979:14;:35;;;32035:70;;31996:18;;32035:50;;31954:16;32035:50;;:17;:32::i;33857:880::-;33960:15;33977:23;34002:19;34023:23;34048:19;34069:14;34087:19;34098:7;34087:10;:19::i;:::-;-1:-1:-1;;;;;34135:15:0;;;;;;:7;:15;;;;;;33959:147;;-1:-1:-1;33959:147:0;;-1:-1:-1;33959:147:0;;-1:-1:-1;33959:147:0;-1:-1:-1;33959:147:0;-1:-1:-1;33959:147:0;-1:-1:-1;34135:28:0;;34155:7;34135:19;:28::i;:::-;-1:-1:-1;;;;;34117:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34192:7;:15;;;;:28;;34212:7;34192:19;:28::i;:::-;-1:-1:-1;;;;;34174:15:0;;;;;;;:7;:15;;;;;;:46;;;;34252:18;;;;;;;:39;;34275:15;34252:22;:39::i;:::-;-1:-1:-1;;;;;34231:18:0;;;;;;:7;:18;;;;;;;;:60;;;;34307:9;:13;34304:310;;34336:56;34351:40;34381:9;;34351:25;34362:13;;34351:6;:10;;:25;;;;:::i;:40::-;34336:14;:56::i;:::-;34406;34421:40;34451:9;;34421:25;34432:13;;34421:6;:10;;:25;;;;:::i;:40::-;34406:14;:56::i;:::-;34476:54;34490:39;34519:9;;34490:24;34501:12;;34490:6;:10;;:24;;;;:::i;:39::-;34476:13;:54::i;:::-;34544:58;34560:41;34591:9;;34560:26;34571:14;;34560:6;:10;;:26;;;;:::i;:41::-;34544:15;:58::i;:::-;34632:37;34644:11;34657;34632;:37::i;:::-;34702:9;-1:-1:-1;;;;;34685:44:0;34694:6;-1:-1:-1;;;;;34685:44:0;;34713:15;34685:44;;;;160:25:1;;148:2;133:18;;14:177;34685:44:0;;;;;;;;33948:789;;;;;;33857:880;;;:::o;32956:893::-;33057:15;33074:23;33099:19;33120:23;33145:19;33166:14;33184:19;33195:7;33184:10;:19::i;:::-;-1:-1:-1;;;;;33232:15:0;;;;;;:7;:15;;;;;;33056:147;;-1:-1:-1;33056:147:0;;-1:-1:-1;33056:147:0;;-1:-1:-1;33056:147:0;-1:-1:-1;33056:147:0;-1:-1:-1;33056:147:0;-1:-1:-1;33232:28:0;;33056:147;33232:19;:28::i;:::-;-1:-1:-1;;;;;33214:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;33292:18;;;;;:7;:18;;;;;:39;;33315:15;33292:22;:39::i;:::-;-1:-1:-1;;;;;33271:18:0;;;;;;:7;:18;;;;;;;;:60;;;;33363:7;:18;;;;:39;;33386:15;33363:22;:39::i;32121:827::-;32220:15;32237:23;32262:19;32283:23;32308:19;32329:14;32347:19;32358:7;32347:10;:19::i;:::-;-1:-1:-1;;;;;32395:15:0;;;;;;:7;:15;;;;;;32219:147;;-1:-1:-1;32219:147:0;;-1:-1:-1;32219:147:0;;-1:-1:-1;32219:147:0;-1:-1:-1;32219:147:0;-1:-1:-1;32219:147:0;-1:-1:-1;32395:28:0;;32219:147;32395:19;:28::i;34745:951::-;34848:15;34865:23;34890:19;34911:23;34936:19;34957:14;34975:19;34986:7;34975:10;:19::i;:::-;-1:-1:-1;;;;;35023:15:0;;;;;;:7;:15;;;;;;34847:147;;-1:-1:-1;34847:147:0;;-1:-1:-1;34847:147:0;;-1:-1:-1;34847:147:0;-1:-1:-1;34847:147:0;-1:-1:-1;34847:147:0;-1:-1:-1;35023:28:0;;35043:7;35023:19;:28::i;:::-;-1:-1:-1;;;;;35005:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35080:7;:15;;;;:28;;35100:7;35080:19;:28::i;39515:165::-;39586:7;39612:60;39657:5;39612:27;39624:14;;39612:7;:11;;:27;;;;:::i;39688:155::-;39754:7;39780:55;39820:5;39780:22;39792:9;;39780:7;:11;;:22;;;;:::i;35704:407::-;35767:19;35790:10;:8;:10::i;:::-;35767:33;-1:-1:-1;35811:18:0;35832:27;:10;35767:33;35832:14;:27::i;:::-;35811:48;;35901:10;35870:27;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;35963:4:0;35947:22;;;;:7;:22;;;;;;:38;;35974:10;35947:26;:38::i;:::-;35938:4;35922:22;;;;:7;:22;;;;;;;;:63;;;;35999:11;:26;;;;;;35996:107;;;36081:4;36065:22;;;;:7;:22;;;;;;:38;;36092:10;36065:26;:38::i;:::-;36056:4;36040:22;;;;:7;:22;;;;;:63;35756:355;;35704:407;:::o;36119:406::-;36182:19;36204:10;:8;:10::i;:::-;36182:32;-1:-1:-1;36225:18:0;36246:27;:10;36182:32;36246:14;:27::i;:::-;36225:48;;36315:10;36284:27;;:41;;;;;;;:::i;36533:398::-;36594:19;36616:10;:8;:10::i;:::-;36594:32;-1:-1:-1;36637:17:0;36657:26;:9;36594:32;36657:13;:26::i;:::-;36637:46;;36724:9;36694:26;;:39;;;;;;;:::i;36939:414::-;37004:19;37026:10;:8;:10::i;:::-;37004:32;-1:-1:-1;37047:19:0;37069:28;:11;37004:32;37069:15;:28::i;:::-;37047:50;;37140:11;37108:28;;:43;;;;;;;:::i;37361:173::-;37452:7;;:24;;37464:11;37452;:24::i;:::-;37442:7;:34;37499:10;;:27;;37514:11;37499:14;:27::i;:::-;37486:10;:40;-1:-1:-1;;37361:173:0:o;196:597: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;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;853:70;798:131;:::o;934:247::-;993:6;1046:2;1034:9;1025:7;1021:23;1017:32;1014:52;;;1062:1;1059;1052:12;1014:52;1101:9;1088:23;1120:31;1145:5;1120:31;:::i;1186:315::-;1254:6;1262;1315:2;1303:9;1294:7;1290:23;1286:32;1283:52;;;1331:1;1328;1321:12;1283:52;1370:9;1357:23;1389:31;1414:5;1389:31;:::i;:::-;1439:5;1491:2;1476:18;;;;1463:32;;-1:-1:-1;;;1186:315:1:o;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2394:180::-;2453:6;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;-1:-1:-1;2545:23:1;;2394:180;-1:-1:-1;2394:180:1:o;2768:160::-;2833:20;;2889:13;;2882:21;2872:32;;2862:60;;2918:1;2915;2908:12;2862:60;2768:160;;;:::o;2933:248::-;2998:6;3006;3059:2;3047:9;3038:7;3034:23;3030:32;3027:52;;;3075:1;3072;3065:12;3027:52;3111:9;3098:23;3088:33;;3140:35;3171:2;3160:9;3156:18;3140:35;:::i;:::-;3130:45;;2933:248;;;;;:::o;3394:::-;3462:6;3470;3523:2;3511:9;3502:7;3498:23;3494:32;3491:52;;;3539:1;3536;3529:12;3491:52;-1:-1:-1;;3562:23:1;;;3632:2;3617:18;;;3604:32;;-1:-1:-1;3394:248:1:o;3647:454::-;3742:6;3750;3758;3766;3774;3827:3;3815:9;3806:7;3802:23;3798:33;3795:53;;;3844:1;3841;3834:12;3795:53;-1:-1:-1;;3867:23:1;;;3937:2;3922:18;;3909:32;;-1:-1:-1;3988:2:1;3973:18;;3960:32;;4039:2;4024:18;;4011:32;;-1:-1:-1;4090:3:1;4075:19;4062:33;;-1:-1:-1;3647:454:1;-1:-1:-1;3647:454:1:o;4106:315::-;4171:6;4179;4232:2;4220:9;4211:7;4207:23;4203:32;4200:52;;;4248:1;4245;4238:12;4200:52;4287:9;4274:23;4306:31;4331:5;4306:31;:::i;:::-;4356:5;-1:-1:-1;4380:35:1;4411:2;4396:18;;4380:35;:::i;4647:180::-;4703:6;4756:2;4744:9;4735:7;4731:23;4727:32;4724:52;;;4772:1;4769;4762:12;4724:52;4795:26;4811:9;4795:26;:::i;4832:367::-;4895:8;4905:6;4959:3;4952:4;4944:6;4940:17;4936:27;4926:55;;4977:1;4974;4967:12;4926:55;-1:-1:-1;5000:20:1;;5043:18;5032:30;;5029:50;;;5075:1;5072;5065:12;5029:50;5112:4;5104:6;5100:17;5088:29;;5172:3;5165:4;5155:6;5152:1;5148:14;5140:6;5136:27;5132:38;5129:47;5126:67;;;5189:1;5186;5179:12;5126:67;4832:367;;;;;:::o;5204:773::-;5326:6;5334;5342;5350;5403:2;5391:9;5382:7;5378:23;5374:32;5371:52;;;5419:1;5416;5409:12;5371:52;5459:9;5446:23;5488:18;5529:2;5521:6;5518:14;5515:34;;;5545:1;5542;5535:12;5515:34;5584:70;5646:7;5637:6;5626:9;5622:22;5584:70;:::i;:::-;5673:8;;-1:-1:-1;5558:96:1;-1:-1:-1;5761:2:1;5746:18;;5733:32;;-1:-1:-1;5777:16:1;;;5774:36;;;5806:1;5803;5796:12;5774:36;;5845:72;5909:7;5898:8;5887:9;5883:24;5845:72;:::i;:::-;5204:773;;;;-1:-1:-1;5936:8:1;-1:-1:-1;;;;5204:773:1:o;5982:388::-;6050:6;6058;6111:2;6099:9;6090:7;6086:23;6082:32;6079:52;;;6127:1;6124;6117:12;6079:52;6166:9;6153:23;6185:31;6210:5;6185:31;:::i;:::-;6235:5;-1:-1:-1;6292:2:1;6277:18;;6264:32;6305:33;6264:32;6305:33;:::i;:::-;6357:7;6347:17;;;5982:388;;;;;:::o;6375:380::-;6454:1;6450:12;;;;6497;;;6518:61;;6572:4;6564:6;6560:17;6550:27;;6518:61;6625:2;6617:6;6614:14;6594:18;6591:38;6588:161;;;6671:10;6666:3;6662:20;6659:1;6652:31;6706:4;6703:1;6696:15;6734:4;6731:1;6724:15;6588:161;;6375:380;;;:::o;6760:356::-;6962:2;6944:21;;;6981:18;;;6974:30;7040:34;7035:2;7020:18;;7013:62;7107:2;7092:18;;6760:356::o;7888:127::-;7949:10;7944:3;7940:20;7937:1;7930:31;7980:4;7977:1;7970:15;8004:4;8001:1;7994:15;8020:127;8081:10;8076:3;8072:20;8069:1;8062:31;8112:4;8109:1;8102:15;8136:4;8133:1;8126:15;8152:125;8192:4;8220:1;8217;8214:8;8211:34;;;8225:18;;:::i;:::-;-1:-1:-1;8262:9:1;;8152:125::o;8282:127::-;8343:10;8338:3;8334:20;8331:1;8324:31;8374:4;8371:1;8364:15;8398:4;8395:1;8388:15;8414:135;8453:3;-1:-1:-1;;8474:17:1;;8471:43;;;8494:18;;:::i;:::-;-1:-1:-1;8541:1:1;8530:13;;8414:135::o;11179:422::-;11268:1;11311:5;11268:1;11325:270;11346:7;11336:8;11333:21;11325:270;;;11405:4;11401:1;11397:6;11393:17;11387:4;11384:27;11381:53;;;11414:18;;:::i;:::-;11464:7;11454:8;11450:22;11447:55;;;11484:16;;;;11447:55;11563:22;;;;11523:15;;;;11325:270;;;11329:3;11179:422;;;;;:::o;11606:806::-;11655:5;11685:8;11675:80;;-1:-1:-1;11726:1:1;11740:5;;11675:80;11774:4;11764:76;;-1:-1:-1;11811:1:1;11825:5;;11764:76;11856:4;11874:1;11869:59;;;;11942:1;11937:130;;;;11849:218;;11869:59;11899:1;11890:10;;11913:5;;;11937:130;11974:3;11964:8;11961:17;11958:43;;;11981:18;;:::i;:::-;-1:-1:-1;;12037:1:1;12023:16;;12052:5;;11849:218;;12151:2;12141:8;12138:16;12132:3;12126:4;12123:13;12119:36;12113:2;12103:8;12100:16;12095:2;12089:4;12086:12;12082:35;12079:77;12076:159;;;-1:-1:-1;12188:19:1;;;12220:5;;12076:159;12267:34;12292:8;12286:4;12267:34;:::i;:::-;12337:6;12333:1;12329:6;12325:19;12316:7;12313:32;12310:58;;;12348:18;;:::i;:::-;12386:20;;11606:806;-1:-1:-1;;;11606:806:1:o;12417:140::-;12475:5;12504:47;12545:4;12535:8;12531:19;12525:4;12504:47;:::i;12562:168::-;12602:7;12668:1;12664;12660:6;12656:14;12653:1;12650:21;12645:1;12638:9;12631:17;12627:45;12624:71;;;12675:18;;:::i;:::-;-1:-1:-1;12715:9:1;;12562:168::o;14168:128::-;14208:3;14239:1;14235:6;14232:1;14229:13;14226:39;;;14245:18;;:::i;:::-;-1:-1:-1;14281:9:1;;14168:128::o;14708:184::-;14778:6;14831:2;14819:9;14810:7;14806:23;14802:32;14799:52;;;14847:1;14844;14837:12;14799:52;-1:-1:-1;14870:16:1;;14708:184;-1:-1:-1;14708:184:1:o;17984:404::-;18186:2;18168:21;;;18225:2;18205:18;;;18198:30;18264:34;18259:2;18244:18;;18237:62;-1:-1:-1;;;18330:2:1;18315:18;;18308:38;18378:3;18363:19;;17984:404::o;19163:217::-;19203:1;19229;19219:132;;19273:10;19268:3;19264:20;19261:1;19254:31;19308:4;19305:1;19298:15;19336:4;19333:1;19326:15;19219:132;-1:-1:-1;19365:9:1;;19163:217::o;20243:251::-;20313:6;20366:2;20354:9;20345:7;20341:23;20337:32;20334:52;;;20382:1;20379;20372:12;20334:52;20414:9;20408:16;20433:31;20458:5;20433:31;:::i;20499:980::-;20761:4;20809:3;20798:9;20794:19;20840:6;20829:9;20822:25;20866:2;20904:6;20899:2;20888:9;20884:18;20877:34;20947:3;20942:2;20931:9;20927:18;20920:31;20971:6;21006;21000:13;21037:6;21029;21022:22;21075:3;21064:9;21060:19;21053:26;;21114:2;21106:6;21102:15;21088:29;;21135:1;21145:195;21159:6;21156:1;21153:13;21145:195;;;21224:13;;-1:-1:-1;;;;;21220:39:1;21208:52;;21315:15;;;;21280:12;;;;21256:1;21174:9;21145:195;;;-1:-1:-1;;;;;;;21396:32:1;;;;21391:2;21376:18;;21369:60;-1:-1:-1;;;21460:3:1;21445:19;21438:35;21357:3;20499:980;-1:-1:-1;;;20499:980:1:o;22096:306::-;22184:6;22192;22200;22253:2;22241:9;22232:7;22228:23;22224:32;22221:52;;;22269:1;22266;22259:12;22221:52;22298:9;22292:16;22282:26;;22348:2;22337:9;22333:18;22327:25;22317:35;;22392:2;22381:9;22377:18;22371:25;22361:35;;22096:306;;;;;:::o

Swarm Source

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