ETH Price: $2,407.11 (-0.62%)

Token

Game Of Dragons ($GOD)
 

Overview

Max Total Supply

100,000,000 $GOD

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 $GOD

Value
$0.00
0x90ea379502935639805fff41b3b229135b47421b
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
GameOfDragons

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-08-22
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.14;

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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


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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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 GameOfDragons is ERC20, Ownable {
    uint256 public buyFee = 92;
    uint256 public sellFee = 92;
    
    uint256 public liquidityShare = 16;
    uint256 public fee1Share = 42;
    uint256 public fee2Share = 42;

    address public fee1Wallet = 0x9F82E1a66BdB6A00b958c00eBC911D8305508962;
    address public fee2Wallet = 0x1B5A60c31f1425146b6219CE1db68a31173F8439;
    address public botFeeWallet = 0xc48b1e496Ed574BB9c8f7c98d9c058Ec047ae396;

    
    address public operator = 0x85abA2399478e65e21051eEf80A36fB5938345C0;
    address public newOwner = 0xD2a8093402912AeC59a95F55B1bB6F25D6fAf7C7;

    bool public walletToWalletTransferWithoutFee = false;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;
    
    address private DEAD = 0x000000000000000000000000000000000000dEaD;

    bool   public  enableTrading;

    bool    private swapping;
    uint256 public swapTokensAtAmount;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public automatedMarketMakerPairs;

  
    uint256 public timeAntiBot = 30 ; 
    
    mapping(address => bool) _isBot;
    uint256 public launchTime = 0;
    
    bool public antibotSystemEnable = true;

    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled = true;
    uint256 public  maxTransactionAmountBuy  = 5 * (10**23); //0.5% of total supply 
    uint256 public  maxTransactionAmountSell = 5 * (10**23); //0.5% of total supply 

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event FeesUpdated(uint256 buyFee, uint256 sellFee);
    event FeeSharesUpdated(uint256 liquidityShare, uint256 fee1Share, uint256 fee2Share);
    event Fee1WalletChanged(address fee1Wallet);
    event Fee2WalletChanged(address fee2Wallet);
    event BotFeeWalletChanged(address botFeeWallet);
    event OperatorWalletChanged(address operatorWallet);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    //event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity);
    //event SwapAndSendWallets(uint256 tokensSwapped, uint256 bnbSend);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitRatesChanged(uint256 maxTransferRateBuy, uint256 maxTransferRateSell);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);

    constructor () ERC20("Game Of Dragons", "$GOD") 
    {   
        newOwner = 0xD2a8093402912AeC59a95F55B1bB6F25D6fAf7C7;
        

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(0)] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[DEAD] = true;
        
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(0)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[DEAD] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[address(this)] = true;
 
        _isExcludedFromFees[fee1Wallet] = true;
        _isExcludedFromFees[fee2Wallet] = true;
        _isExcludedFromFees[botFeeWallet] = true;
        _isExcludedFromFees[newOwner] = true;

        _isExcludedFromMaxWalletLimit[fee1Wallet] = true;
        _isExcludedFromMaxWalletLimit[fee2Wallet] = true;
        _isExcludedFromMaxWalletLimit[botFeeWallet] = true;
        _isExcludedFromMaxWalletLimit[newOwner] = true;

        _isExcludedFromMaxTxLimit[fee1Wallet] = true;
        _isExcludedFromMaxTxLimit[fee2Wallet] = true;
        _isExcludedFromMaxTxLimit[botFeeWallet] = true;
        _isExcludedFromMaxTxLimit[newOwner] = true;
        
        
        _mint(newOwner, 100000000 * (10**18));
        swapTokensAtAmount = totalSupply() / 2000;

        operator = _msgSender();
    }


    

    modifier onlyOperator(){
        require(operator == _msgSender(),"Caller is not the Operator");
        _;
    }

    modifier onlyAuthorize(){
        require(operator == _msgSender() || owner() == _msgSender(),"Caller is not the Operator");
        _;
    }

    function changeOperatorWallet(address newAddress) external onlyOperator{
        require(newAddress != operator,"Operator Address is already same");
        require(!isContract(newAddress), "Operator wallet cannot be a contract");
        operator = newAddress;
        emit OperatorWalletChanged(operator);
    }


    receive() external payable {

  	}

    function setOpenTrading() external onlyAuthorize{
        require(enableTrading == false, "Trading is already enabled");
        enableTrading = true;
        launchTime = block.timestamp;

    }  


    function excludeAntibot(address ac) public onlyOwner {
        require(_isBot[ac], "not bot");
        _isBot[ac] = false;
    }


    function isBot(address acc) public view returns(bool) {
        return _isBot[acc];
    }



    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendETH(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 updateUniswapV2Router(address newAddress) external onlyOperator {
        require(newAddress != address(uniswapV2Router), "The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOperator {
        require(pair != uniswapV2Pair, "The PancakeSwap pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    //=======FeeManagement=======//
    function excludeFromFees(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function updateFees(uint256 _buyFee, uint256 _sellFee) external onlyOwner {
        require(_buyFee <= 250 && _sellFee <= 250, "Fees must be less than 25%");
        buyFee = _buyFee;
        sellFee = _sellFee;
        emit FeesUpdated(buyFee, sellFee);
    }

    function updateFeeShares(uint256 _fee1FeeShare, uint256 _liquidityFeeShare, uint256 _fee2Share) external onlyOwner {
        require(_fee1FeeShare + _liquidityFeeShare + _fee2Share == 100, "Fee shares must add up to 100");
        fee1Share = _fee1FeeShare;
        liquidityShare = _liquidityFeeShare;
        fee2Share = _fee2Share;
        emit FeeSharesUpdated(fee1Share, liquidityShare, fee2Share);
    }

    function enableWalletToWalletTransferWithoutFee(bool enable) external onlyOwner {
        require(walletToWalletTransferWithoutFee != enable, "Wallet to wallet transfer without fee is already set to that value");
        walletToWalletTransferWithoutFee = enable;
    }

    function changeFee1Wallet(address _fee1Wallet) external onlyOwner {
        require(_fee1Wallet != fee1Wallet, "fee1 wallet is already that address");
        require(!isContract(_fee1Wallet), "fee1 wallet cannot be a contract");
        fee1Wallet = _fee1Wallet;
        emit Fee1WalletChanged(fee1Wallet);
    }

    function changeFee2Wallet(address _fee2Wallet) external onlyOwner {
        require(_fee2Wallet != fee2Wallet, "fee2 wallet is already that address");
        require(!isContract(_fee2Wallet), "fee2 wallet cannot be a contract");
        fee2Wallet = _fee2Wallet;
        emit Fee2WalletChanged(fee2Wallet);
    }

    function changeBotFee2Wallet(address _botFeeWallet) external onlyOwner {
        require(_botFeeWallet != botFeeWallet, "botFee wallet is already that address");
        require(!isContract(_botFeeWallet), "botFee wallet cannot be a contract");
        botFeeWallet = _botFeeWallet;
        emit BotFeeWalletChanged(botFeeWallet);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
       

        if (launchTime > 0) {
            if(block.timestamp - launchTime <= timeAntiBot && from == uniswapV2Pair && antibotSystemEnable) {
    
                _isBot[to] = true;
            }
        }


        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }



        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            require(enableTrading, "Trading is not enabled");
        }

        if (maxWalletLimitEnabled) {
            if (_isExcludedFromMaxWalletLimit[from] == false
                && _isExcludedFromMaxWalletLimit[to] == false &&
                to != uniswapV2Pair
            ) {
                uint balance  = balanceOf(to);
                require(balance + amount <= maxWalletAmount(), "MaxWallet: Transfer amount exceeds the maxWalletAmount");
            }
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                _isExcludedFromMaxTxLimit[from] == false && 
                _isExcludedFromMaxTxLimit[to]   == false) 
            {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }

        



		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] && !_isExcludedFromFees[to]
        ) {
            swapping = true;

            uint256 liquidityTokens       = contractTokenBalance * liquidityShare / 100 / 2;
            uint256 liquidityTokensForETH = contractTokenBalance * liquidityShare / 100 / 2;
            
            uint256 fee1Tokens = contractTokenBalance * fee1Share / 100;
            uint256 fee2Tokens = contractTokenBalance * fee2Share / 100;

            uint256 tokensToSwap  = liquidityTokensForETH + fee1Tokens + fee2Tokens;

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

            uint256 initialBalance = address(this).balance;

            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokensToSwap,
                0, // accept any amount of ETH
                path,
                address(this),
                block.timestamp);
            
            uint256 newBalance = address(this).balance - initialBalance;

            if (liquidityShare > 0)
            {   
                uint256 liquidityETH = newBalance * liquidityTokensForETH / tokensToSwap; 

                uniswapV2Router.addLiquidityETH{value: liquidityETH}(
                    address(this),
                    liquidityTokens,
                    0, // slippage is unavoidable
                    0, // slippage is unavoidable
                    DEAD,
                    block.timestamp
                );
            }


            if(fee1Share > 0) {
                uint256 fee1ETH = newBalance * fee1Tokens / tokensToSwap;
                sendETH(payable(fee1Wallet), fee1ETH);

            }

            if(fee2Share > 0) {
                uint256 fee2ETH = newBalance * fee2Tokens / tokensToSwap;
                sendETH(payable(fee2Wallet), fee2ETH);

            }

/////////////

            swapping = false;
        }

        bool takeFee = !swapping;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        if(walletToWalletTransferWithoutFee && from != uniswapV2Pair && to != uniswapV2Pair) {
            takeFee = false;
        }
        

        if(takeFee) {
            uint256 _totalFees;
            if (_isBot[to] && from == uniswapV2Pair){
                _totalFees = 900;
                uint256 fees = amount * _totalFees / 1000;
                amount = amount - fees;
                super._transfer(from, botFeeWallet, fees);
            }
            
            else{
                if(from == uniswapV2Pair) {
                _totalFees = buyFee; 
                } 

                else {
                _totalFees = sellFee;
                }
            uint256 fees = amount * _totalFees / 1000;
        	amount = amount - fees;
            super._transfer(from, address(this), fees);
            }


        }


        super._transfer(from, to, amount);

    }

    //=======Swap=======//

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 100000, "SwapTokensAtAmount must be greater than 0.001% of total supply");
        swapTokensAtAmount = newAmount;
    }

    //=======MaxWallet=======//
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    bool    public maxWalletLimitEnabled = true;
    uint256 private maxWalletLimitRate   = 50;

    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitRateChanged(uint256 maxWalletLimitRate);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);

    function setEnableMaxWalletLimit(bool enable) external onlyOwner {
        require(enable != maxWalletLimitEnabled, "Max wallet limit is already that state");
        maxWalletLimitEnabled = enable;
        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }

    function maxWalletAmount() public view returns (uint256) {
        return totalSupply() * maxWalletLimitRate / 1000;
    }

    function setMaxWalletRate_Denominator1000(uint256 _val) external onlyOwner {
        require(_val >= 10, "Max wallet percentage cannot be lower than 1%");
        maxWalletLimitRate = _val;
        emit MaxWalletLimitRateChanged(maxWalletLimitRate);
    }

    function setExcludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require(_isExcludedFromMaxWalletLimit[account] != exclude, "Account is already set to that state");
        _isExcludedFromMaxWalletLimit[account] = exclude;
        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    //=======MaxTransaction=======//
    function setEnableMaxTransactionLimit(bool enable) external onlyOwner {
        require(
            enable != maxTransactionLimitEnabled, 
            "Max transaction limit is already set to that state"
        );
        maxTransactionLimitEnabled = enable;
        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner {
        require(
            _maxTransactionAmountBuy  >= totalSupply() / (10 ** decimals()) / 1000 && 
            _maxTransactionAmountSell >= totalSupply() / (10 ** decimals()) / 1000, 
            "Max Transaction limis cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmountBuy  = _maxTransactionAmountBuy  * (10 ** decimals());
        maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals());
        emit MaxTransactionLimitRatesChanged(maxTransactionAmountBuy, maxTransactionAmountSell);
    }

    function setExcludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require(
            _isExcludedFromMaxTxLimit[account] != exclude, 
            "Account is already set to that state"
        );
        _isExcludedFromMaxTxLimit[account] = exclude;
        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }
}

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":"botFeeWallet","type":"address"}],"name":"BotFeeWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"fee1Wallet","type":"address"}],"name":"Fee1WalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"fee2Wallet","type":"address"}],"name":"Fee2WalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee1Share","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee2Share","type":"uint256"}],"name":"FeeSharesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransferRateBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransferRateSell","type":"uint256"}],"name":"MaxTransactionLimitRatesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimitRate","type":"uint256"}],"name":"MaxWalletLimitRateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operatorWallet","type":"address"}],"name":"OperatorWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"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":[],"name":"antibotSystemEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"botFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_botFeeWallet","type":"address"}],"name":"changeBotFee2Wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fee1Wallet","type":"address"}],"name":"changeFee1Wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fee2Wallet","type":"address"}],"name":"changeFee2Wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"changeOperatorWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","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":[],"name":"enableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableWalletToWalletTransferWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ac","type":"address"}],"name":"excludeAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee1Share","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee1Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee2Share","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee2Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"acc","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setMaxWalletRate_Denominator1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setOpenTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeAntiBot","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee1FeeShare","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeShare","type":"uint256"},{"internalType":"uint256","name":"_fee2Share","type":"uint256"}],"name":"updateFeeShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletToWalletTransferWithoutFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052605c60068190556007556010600855602a6009819055600a55600b80546001600160a01b0319908116739f82e1a66bdb6a00b958c00ebc911d830550896217909155600c80548216731b5a60c31f1425146b6219ce1db68a31173f8439179055600d8054821673c48b1e496ed574bb9c8f7c98d9c058ec047ae396179055600e805482167385aba2399478e65e21051eef80a36fb5938345c0179055600f80546001600160a81b03191673d2a8093402912aec59a95f55b1bb6f25d6faf7c71790556012805490911661dead179055601e60165560006018556019805460ff199081166001908117909255601b80548216831790556969e10de76676d0800000601c819055601d55601f8054909116909117905560326020553480156200012a57600080fd5b50604080518082018252600f81526e47616d65204f6620447261676f6e7360881b6020808301918252835180850190945260048452630911d3d160e21b9084015281519192916200017e916003916200099f565b508051620001949060049060208401906200099f565b5050506000620001a96200069e60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600f80546001600160a01b03191673d2a8093402912aec59a95f55b1bb6f25d6faf7c71790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa15801562000273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000299919062000a45565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030d919062000a45565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000381919062000a45565b601080546001600160a01b038086166001600160a01b031992831681179093556011805491851691909216179055909150620003c2903090600019620006a2565b620003cf816001620007ce565b6001601a6000620003e86005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601a9093527fb75ecc04ed35f89790e98640e901bda41eceff0cb896cf2765fb6976802537508054851660019081179091553084528284208054861682179055601254909116835290822080549093168117909255601e90620004816005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601e9093527f65ce8396b736f5da9d881cc6fbcb11ef9721292dc41ec8c40879fd9edea5744d80548516600190811790915530845282842080548616821790556012549091168352908220805490931681179092556014906200051a6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560125482168152601484528281208054861660019081179091553082528382208054871682179055600b8054841683528483208054881683179055600c8054851684528584208054891684179055600d80548616855286852080548a1685179055600f80548716865287862080548b1686179055835487168652601e895287862080548b168617905582548716865287862080548b168617905581548716865287862080548b168617905580548716865287862080548b1686179055925486168552601a90975285842080548916841790555484168352848320805488168317905594548316825283822080548716821790558454831682529290208054909416909117909255546200066891166a52b7d2dcc80cd2e4000000620008ba565b6107d06200067560025490565b62000681919062000a77565b6013555050600e80546001600160a01b0319163317905562000afd565b3390565b6001600160a01b0383166200070a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200076d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000701565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503620008665760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c75650000000000000000606482015260840162000701565b6001600160a01b038216600081815260156020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620009125760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000701565b806002600082825462000926919062000a9a565b90915550506001600160a01b038216600090815260208190526040812080548392906200095590849062000a9a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620009ad9062000ac1565b90600052602060002090601f016020900481019282620009d1576000855562000a1c565b82601f10620009ec57805160ff191683800117855562000a1c565b8280016001018555821562000a1c579182015b8281111562000a1c578251825591602001919060010190620009ff565b5062000a2a92915062000a2e565b5090565b5b8082111562000a2a576000815560010162000a2f565b60006020828403121562000a5857600080fd5b81516001600160a01b038116811462000a7057600080fd5b9392505050565b60008262000a9557634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000abc57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c9082168062000ad657607f821691505b60208210810362000af757634e487b7160e01b600052602260045260246000fd5b50919050565b61384e8062000b0d6000396000f3fe6080604052600436106103b15760003560e01c806382088d26116101e7578063b6f7f6811161010d578063dd62ed3e116100a0578063f5feabbd1161006f578063f5feabbd14610b45578063f60287fe14610b65578063f9d0831a14610b7b578063ff35451c14610b9b57600080fd5b8063dd62ed3e14610aa9578063e2f4560514610aef578063f2fde38b14610b05578063f5a82bfd14610b2557600080fd5b8063c0246668116100dc578063c024666814610a33578063cadbe6c114610a53578063d4ee1d9014610a69578063dbb853d614610a8957600080fd5b8063b6f7f681146109ce578063b749a6d7146109ee578063b902e1cd14610a04578063bf60defe14610a1957600080fd5b8063a06798cd11610185578063a9059cbb11610154578063a9059cbb14610949578063aa4bde2814610969578063afa4f3b21461097e578063b62496f51461099e57600080fd5b8063a06798cd146108b0578063a457c2d7146108d0578063a5c5ee77146108f0578063a8a69b9d1461091057600080fd5b8063929f1360116101c1578063929f13601461083b578063940c0e2a1461085b57806395d89b411461087b5780639a7a23d61461089057600080fd5b806382088d26146107dc5780638a8c523c146107fc5780638da5cb5b1461081d57600080fd5b8063313ce567116102d7578063570ca7351161026a5780636db79437116102395780636db794371461075b57806370a082311461077b578063715018a6146107b1578063790ca413146107c657600080fd5b8063570ca735146106e5578063580e1f3f1461070557806359136fa51461072557806365b8dbc01461073b57600080fd5b806349bd5a5e116102a657806349bd5a5e1461064c5780634fbee1931461066c5780635654d0b3146106a557806356a6cabf146106c557600080fd5b8063313ce567146105c157806339509351146105dd5780633bbac579146105fd578063470624021461063657600080fd5b806318160ddd1161034f57806323b872dd1161031e57806323b872dd146105515780632a6c7dba146105715780632b14ca56146105915780632ba86bf2146105a757600080fd5b806318160ddd146104c957806318d9ceae146104de5780631cf2492d1461051757806321a9d82a1461053757600080fd5b8063150c880c1161038b578063150c880c1461043857806315291cd41461045a5780631529fbbf146104705780631694505e1461049157600080fd5b80630105d0fd146103bd57806306fdde03146103e6578063095ea7b31461040857600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d3601c5481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506103fb610bbb565b6040516103dd91906131d4565b34801561041457600080fd5b5061042861042336600461323e565b610c4d565b60405190151581526020016103dd565b34801561044457600080fd5b50610458610453366004613278565b610c64565b005b34801561046657600080fd5b506103d360085481565b34801561047c57600080fd5b50600f5461042890600160a01b900460ff1681565b34801561049d57600080fd5b506010546104b1906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b3480156104d557600080fd5b506002546103d3565b3480156104ea57600080fd5b506104286104f93660046132b1565b6001600160a01b03166000908152601a602052604090205460ff1690565b34801561052357600080fd5b506104586105323660046132b1565b610d37565b34801561054357600080fd5b50601f546104289060ff1681565b34801561055d57600080fd5b5061042861056c3660046132d5565b610e78565b34801561057d57600080fd5b5061045861058c366004613316565b610f29565b34801561059d57600080fd5b506103d360075481565b3480156105b357600080fd5b50601b546104289060ff1681565b3480156105cd57600080fd5b50604051601281526020016103dd565b3480156105e957600080fd5b506104286105f836600461323e565b611001565b34801561060957600080fd5b506104286106183660046132b1565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561064257600080fd5b506103d360065481565b34801561065857600080fd5b506011546104b1906001600160a01b031681565b34801561067857600080fd5b506104286106873660046132b1565b6001600160a01b031660009081526014602052604090205460ff1690565b3480156106b157600080fd5b506104586106c0366004613316565b61103d565b3480156106d157600080fd5b506104586106e0366004613316565b611118565b3480156106f157600080fd5b50600e546104b1906001600160a01b031681565b34801561071157600080fd5b50600d546104b1906001600160a01b031681565b34801561073157600080fd5b506103d3601d5481565b34801561074757600080fd5b506104586107563660046132b1565b6111fc565b34801561076757600080fd5b50610458610776366004613333565b611466565b34801561078757600080fd5b506103d36107963660046132b1565b6001600160a01b031660009081526020819052604090205490565b3480156107bd57600080fd5b50610458611536565b3480156107d257600080fd5b506103d360185481565b3480156107e857600080fd5b50600b546104b1906001600160a01b031681565b34801561080857600080fd5b5060125461042890600160a01b900460ff1681565b34801561082957600080fd5b506005546001600160a01b03166104b1565b34801561084757600080fd5b50610458610856366004613278565b6115aa565b34801561086757600080fd5b50610458610876366004613355565b61166c565b34801561088757600080fd5b506103fb611730565b34801561089c57600080fd5b506104586108ab366004613278565b61173f565b3480156108bc57600080fd5b506104586108cb3660046132b1565b611809565b3480156108dc57600080fd5b506104286108eb36600461323e565b611950565b3480156108fc57600080fd5b5061045861090b3660046132b1565b6119e9565b34801561091c57600080fd5b5061042861092b3660046132b1565b6001600160a01b03166000908152601e602052604090205460ff1690565b34801561095557600080fd5b5061042861096436600461323e565b611b23565b34801561097557600080fd5b506103d3611b30565b34801561098a57600080fd5b50610458610999366004613355565b611b5a565b3480156109aa57600080fd5b506104286109b93660046132b1565b60156020526000908152604090205460ff1681565b3480156109da57600080fd5b506104586109e9366004613333565b611c14565b3480156109fa57600080fd5b506103d3600a5481565b348015610a1057600080fd5b50610458611d77565b348015610a2557600080fd5b506019546104289060ff1681565b348015610a3f57600080fd5b50610458610a4e366004613278565b611e29565b348015610a5f57600080fd5b506103d360095481565b348015610a7557600080fd5b50600f546104b1906001600160a01b031681565b348015610a9557600080fd5b50610458610aa43660046132b1565b611f2e565b348015610ab557600080fd5b506103d3610ac436600461336e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610afb57600080fd5b506103d360135481565b348015610b1157600080fd5b50610458610b203660046132b1565b612068565b348015610b3157600080fd5b50610458610b4036600461339c565b612153565b348015610b5157600080fd5b50610458610b603660046132b1565b612236565b348015610b7157600080fd5b506103d360165481565b348015610b8757600080fd5b50610458610b963660046132b1565b6122d3565b348015610ba757600080fd5b50600c546104b1906001600160a01b031681565b606060038054610bca906133c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf6906133c8565b8015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b5050505050905090565b6000610c5a338484612477565b5060015b92915050565b6005546001600160a01b03163314610c975760405162461bcd60e51b8152600401610c8e90613402565b60405180910390fd5b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503610cd75760405162461bcd60e51b8152600401610c8e90613437565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6005546001600160a01b03163314610d615760405162461bcd60e51b8152600401610c8e90613402565b600c546001600160a01b0390811690821603610dcb5760405162461bcd60e51b815260206004820152602360248201527f666565322077616c6c657420697320616c72656164792074686174206164647260448201526265737360e81b6064820152608401610c8e565b6001600160a01b0381163b15610e235760405162461bcd60e51b815260206004820181905260248201527f666565322077616c6c65742063616e6e6f74206265206120636f6e74726163746044820152606401610c8e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f84e94630ac16ef0cfeb2db16816e2ecccc8542d78581ac3113cc5633dd13e0fa906020015b60405180910390a150565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610f135782811015610f065760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c8e565b610f138533858403612477565b610f1e85858561259b565b506001949350505050565b6005546001600160a01b03163314610f535760405162461bcd60e51b8152600401610c8e90613402565b601f5460ff16151581151503610fba5760405162461bcd60e51b815260206004820152602660248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207468617460448201526520737461746560d01b6064820152608401610c8e565b601f805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610e6d565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c5a918590611038908690613491565b612477565b6005546001600160a01b031633146110675760405162461bcd60e51b8152600401610c8e90613402565b801515600f60149054906101000a900460ff161515036110fa5760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610c8e565b600f8054911515600160a01b0260ff60a01b19909216919091179055565b6005546001600160a01b031633146111425760405162461bcd60e51b8152600401610c8e90613402565b601b5460ff161515811515036111b55760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610c8e565b601b805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610e6d565b600e546001600160a01b031633146112265760405162461bcd60e51b8152600401610c8e906134a9565b6010546001600160a01b03908116908216036112905760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610c8e565b6010546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3601080546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015611327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134b91906134e0565b6001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d191906134e0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561141e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144291906134e0565b601180546001600160a01b0319166001600160a01b03929092169190911790555050565b6005546001600160a01b031633146114905760405162461bcd60e51b8152600401610c8e90613402565b60fa82111580156114a2575060fa8111155b6114ee5760405162461bcd60e51b815260206004820152601a60248201527f46656573206d757374206265206c657373207468616e203235250000000000006044820152606401610c8e565b6006829055600781905560408051838152602081018390527f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a191015b60405180910390a15050565b6005546001600160a01b031633146115605760405162461bcd60e51b8152600401610c8e90613402565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115d45760405162461bcd60e51b8152600401610c8e90613402565b6001600160a01b0382166000908152601e602052604090205481151560ff9091161515036116145760405162461bcd60e51b8152600401610c8e90613437565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101610d2b565b6005546001600160a01b031633146116965760405162461bcd60e51b8152600401610c8e90613402565b600a8110156116fd5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b6064820152608401610c8e565b60208181556040518281527ffbede00c52e68e7972265f0deb49773af2ec3e07ebaf22d74be3c4f0c6d568679101610e6d565b606060048054610bca906133c8565b600e546001600160a01b031633146117695760405162461bcd60e51b8152600401610c8e906134a9565b6011546001600160a01b03908116908316036117fb5760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572606482015264506169727360d81b608482015260a401610c8e565b6118058282612e7d565b5050565b6005546001600160a01b031633146118335760405162461bcd60e51b8152600401610c8e90613402565b600d546001600160a01b039081169082160361189f5760405162461bcd60e51b815260206004820152602560248201527f626f744665652077616c6c657420697320616c72656164792074686174206164604482015264647265737360d81b6064820152608401610c8e565b6001600160a01b0381163b156119025760405162461bcd60e51b815260206004820152602260248201527f626f744665652077616c6c65742063616e6e6f74206265206120636f6e74726160448201526118dd60f21b6064820152608401610c8e565b600d80546001600160a01b0319166001600160a01b0383169081179091556040519081527faeb1bee205df22bc81934c711056c79abf944776e94470482dbc8d51c3ad94ca90602001610e6d565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119d25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c8e565b6119df3385858403612477565b5060019392505050565b6005546001600160a01b03163314611a135760405162461bcd60e51b8152600401610c8e90613402565b600b546001600160a01b0390811690821603611a7d5760405162461bcd60e51b815260206004820152602360248201527f666565312077616c6c657420697320616c72656164792074686174206164647260448201526265737360e81b6064820152608401610c8e565b6001600160a01b0381163b15611ad55760405162461bcd60e51b815260206004820181905260248201527f666565312077616c6c65742063616e6e6f74206265206120636f6e74726163746044820152606401610c8e565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fcffec7a894de37f9234bd4641661dad48f5792883bbe5f5c469e3bb858bea0d290602001610e6d565b6000610c5a33848461259b565b60006103e8602054611b4160025490565b611b4b91906134fd565b611b55919061351c565b905090565b6005546001600160a01b03163314611b845760405162461bcd60e51b8152600401610c8e90613402565b620186a0611b9160025490565b611b9b919061351c565b8111611c0f5760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610c8e565b601355565b6005546001600160a01b03163314611c3e5760405162461bcd60e51b8152600401610c8e90613402565b6103e8611c4d6012600a613622565b600254611c5a919061351c565b611c64919061351c565b8210158015611c9857506103e8611c7d6012600a613622565b600254611c8a919061351c565b611c94919061351c565b8110155b611d0a5760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610c8e565b611d166012600a613622565b611d2090836134fd565b601c55611d2f6012600a613622565b611d3990826134fd565b601d819055601c546040517f2a88f79986e057b8152c19cea35cd214cf53364efbf95d5b22b37797c05be55f9261152a928252602082015260400190565b600e546001600160a01b0316331480611d9a57506005546001600160a01b031633145b611db65760405162461bcd60e51b8152600401610c8e906134a9565b601254600160a01b900460ff1615611e105760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610c8e565b6012805460ff60a01b1916600160a01b17905542601855565b6005546001600160a01b03163314611e535760405162461bcd60e51b8152600401610c8e90613402565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503611ed65760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610c8e565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610d2b565b600e546001600160a01b03163314611f585760405162461bcd60e51b8152600401610c8e906134a9565b600e546001600160a01b0390811690821603611fb65760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f72204164647265737320697320616c72656164792073616d656044820152606401610c8e565b6001600160a01b0381163b1561201a5760405162461bcd60e51b8152602060048201526024808201527f4f70657261746f722077616c6c65742063616e6e6f74206265206120636f6e746044820152631c9858dd60e21b6064820152608401610c8e565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527f32d323979a0053c92306e15a8f86e9dc39ac29ce7966da018f4b71f3c6f7d82690602001610e6d565b6005546001600160a01b031633146120925760405162461bcd60e51b8152600401610c8e90613402565b6001600160a01b0381166120f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461217d5760405162461bcd60e51b8152600401610c8e90613402565b806121888385613491565b6121929190613491565b6064146121e15760405162461bcd60e51b815260206004820152601d60248201527f46656520736861726573206d7573742061646420757020746f203130300000006044820152606401610c8e565b60098390556008829055600a81905560408051848152602081018490529081018290527f4677abe8dbff9a9de3cc464f74e0c16415fc3e839597772eb5fe5ece02a6a90a9060600160405180910390a1505050565b6005546001600160a01b031633146122605760405162461bcd60e51b8152600401610c8e90613402565b6001600160a01b03811660009081526017602052604090205460ff166122b25760405162461bcd60e51b81526020600482015260076024820152661b9bdd08189bdd60ca1b6044820152606401610c8e565b6001600160a01b03166000908152601760205260409020805460ff19169055565b6005546001600160a01b031633146122fd5760405162461bcd60e51b8152600401610c8e90613402565b306001600160a01b038216036123555760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610c8e565b6001600160a01b03811661238f5760405133904780156108fc02916000818181858888f19350505050158015611805573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156123d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fc9190613631565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561244c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612470919061364a565b5050505b50565b6001600160a01b0383166124d95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8e565b6001600160a01b03821661253a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125c15760405162461bcd60e51b8152600401610c8e90613667565b6001600160a01b0382166125e75760405162461bcd60e51b8152600401610c8e906136ac565b60185415612651576016546018546125ff90426136ef565b1115801561261a57506011546001600160a01b038481169116145b8015612628575060195460ff165b15612651576001600160a01b0382166000908152601760205260409020805460ff191660011790555b8060000361266a5761266583836000612f67565b505050565b6001600160a01b03831660009081526014602052604090205460ff161580156126ac57506001600160a01b03821660009081526014602052604090205460ff16155b1561270357601254600160a01b900460ff166127035760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610c8e565b601f5460ff1615612809576001600160a01b0383166000908152601e602052604090205460ff1615801561275057506001600160a01b0382166000908152601e602052604090205460ff16155b801561276a57506011546001600160a01b03838116911614155b15612809576001600160a01b038216600090815260208190526040902054612790611b30565b61279a8383613491565b11156128075760405162461bcd60e51b815260206004820152603660248201527f4d617857616c6c65743a205472616e7366657220616d6f756e74206578636565604482015275191cc81d1a19481b585e15d85b1b195d105b5bdd5b9d60521b6064820152608401610c8e565b505b601b5460ff16156128eb576011546001600160a01b038481169116148061283d57506011546001600160a01b038381169116145b801561286257506001600160a01b0383166000908152601a602052604090205460ff16155b801561288757506001600160a01b0382166000908152601a602052604090205460ff16155b156128eb576011546001600160a01b03908116908416036128c957601c548111156128c45760405162461bcd60e51b8152600401610c8e90613706565b6128eb565b601d548111156128eb5760405162461bcd60e51b8152600401610c8e90613706565b30600090815260208190526040902054601354811080159081906129195750601254600160a81b900460ff16155b801561293e57506001600160a01b03851660009081526015602052604090205460ff16155b801561296357506001600160a01b03851660009081526014602052604090205460ff16155b801561298857506001600160a01b03841660009081526014602052604090205460ff16155b15612ce5576012805460ff60a81b1916600160a81b1790556008546000906002906064906129b690866134fd565b6129c0919061351c565b6129ca919061351c565b9050600060026064600854866129e091906134fd565b6129ea919061351c565b6129f4919061351c565b90506000606460095486612a0891906134fd565b612a12919061351c565b905060006064600a5487612a2691906134fd565b612a30919061351c565b9050600081612a3f8486613491565b612a499190613491565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612a8357612a83613763565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0091906134e0565b81600181518110612b1357612b13613763565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b81524792919091169063791ac94790612b5d908690600090879030904290600401613779565b600060405180830381600087803b158015612b7757600080fd5b505af1158015612b8b573d6000803e3d6000fd5b5050505060008147612b9d91906136ef565b60085490915015612c5b57600084612bb589846134fd565b612bbf919061351c565b60105460125460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af1158015612c31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c5691906137ea565b505050505b60095415612c9557600084612c7088846134fd565b612c7a919061351c565b600b54909150612c93906001600160a01b0316826130bb565b505b600a5415612ccf57600084612caa87846134fd565b612cb4919061351c565b600c54909150612ccd906001600160a01b0316826130bb565b505b50506012805460ff60a81b191690555050505050505b6012546001600160a01b03861660009081526014602052604090205460ff600160a81b909204821615911680612d3357506001600160a01b03851660009081526014602052604090205460ff165b15612d3c575060005b600f54600160a01b900460ff168015612d6357506011546001600160a01b03878116911614155b8015612d7d57506011546001600160a01b03868116911614155b15612d86575060005b8015612e6a576001600160a01b03851660009081526017602052604081205460ff168015612dc157506011546001600160a01b038881169116145b15612e10575061038460006103e8612dd983886134fd565b612de3919061351c565b9050612def81876136ef565b600d54909650612e0a9089906001600160a01b031683612f67565b50612e68565b6011546001600160a01b0390811690881603612e2f5750600654612e34565b506007545b60006103e8612e4383886134fd565b612e4d919061351c565b9050612e5981876136ef565b9550612e66883083612f67565b505b505b612e75868686612f67565b505050505050565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503612f135760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610c8e565b6001600160a01b038216600081815260156020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612f8d5760405162461bcd60e51b8152600401610c8e90613667565b6001600160a01b038216612fb35760405162461bcd60e51b8152600401610c8e906136ac565b6001600160a01b0383166000908152602081905260409020548181101561302b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c8e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613062908490613491565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130ae91815260200190565b60405180910390a3612470565b8047101561310b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c8e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613158576040519150601f19603f3d011682016040523d82523d6000602084013e61315d565b606091505b50509050806126655760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c8e565b600060208083528351808285015260005b81811015613201578581018301518582016040015282016131e5565b81811115613213576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461247457600080fd5b6000806040838503121561325157600080fd5b823561325c81613229565b946020939093013593505050565b801515811461247457600080fd5b6000806040838503121561328b57600080fd5b823561329681613229565b915060208301356132a68161326a565b809150509250929050565b6000602082840312156132c357600080fd5b81356132ce81613229565b9392505050565b6000806000606084860312156132ea57600080fd5b83356132f581613229565b9250602084013561330581613229565b929592945050506040919091013590565b60006020828403121561332857600080fd5b81356132ce8161326a565b6000806040838503121561334657600080fd5b50508035926020909101359150565b60006020828403121561336757600080fd5b5035919050565b6000806040838503121561338157600080fd5b823561338c81613229565b915060208301356132a681613229565b6000806000606084860312156133b157600080fd5b505081359360208301359350604090920135919050565b600181811c908216806133dc57607f821691505b6020821081036133fc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f4163636f756e7420697320616c72656164792073657420746f207468617420736040820152637461746560e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156134a4576134a461347b565b500190565b6020808252601a908201527f43616c6c6572206973206e6f7420746865204f70657261746f72000000000000604082015260600190565b6000602082840312156134f257600080fd5b81516132ce81613229565b60008160001904831182151516156135175761351761347b565b500290565b60008261353957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561357957816000190482111561355f5761355f61347b565b8085161561356c57918102915b93841c9390800290613543565b509250929050565b60008261359057506001610c5e565b8161359d57506000610c5e565b81600181146135b357600281146135bd576135d9565b6001915050610c5e565b60ff8411156135ce576135ce61347b565b50506001821b610c5e565b5060208310610133831016604e8410600b84101617156135fc575081810a610c5e565b613606838361353e565b806000190482111561361a5761361a61347b565b029392505050565b60006132ce60ff841683613581565b60006020828403121561364357600080fd5b5051919050565b60006020828403121561365c57600080fd5b81516132ce8161326a565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156137015761370161347b565b500390565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137c95784516001600160a01b0316835293830193918301916001016137a4565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156137ff57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c462c2205b5d8620f178a44748315c153ee0d78ab5e978f30ea9bcda66604e5e64736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c806382088d26116101e7578063b6f7f6811161010d578063dd62ed3e116100a0578063f5feabbd1161006f578063f5feabbd14610b45578063f60287fe14610b65578063f9d0831a14610b7b578063ff35451c14610b9b57600080fd5b8063dd62ed3e14610aa9578063e2f4560514610aef578063f2fde38b14610b05578063f5a82bfd14610b2557600080fd5b8063c0246668116100dc578063c024666814610a33578063cadbe6c114610a53578063d4ee1d9014610a69578063dbb853d614610a8957600080fd5b8063b6f7f681146109ce578063b749a6d7146109ee578063b902e1cd14610a04578063bf60defe14610a1957600080fd5b8063a06798cd11610185578063a9059cbb11610154578063a9059cbb14610949578063aa4bde2814610969578063afa4f3b21461097e578063b62496f51461099e57600080fd5b8063a06798cd146108b0578063a457c2d7146108d0578063a5c5ee77146108f0578063a8a69b9d1461091057600080fd5b8063929f1360116101c1578063929f13601461083b578063940c0e2a1461085b57806395d89b411461087b5780639a7a23d61461089057600080fd5b806382088d26146107dc5780638a8c523c146107fc5780638da5cb5b1461081d57600080fd5b8063313ce567116102d7578063570ca7351161026a5780636db79437116102395780636db794371461075b57806370a082311461077b578063715018a6146107b1578063790ca413146107c657600080fd5b8063570ca735146106e5578063580e1f3f1461070557806359136fa51461072557806365b8dbc01461073b57600080fd5b806349bd5a5e116102a657806349bd5a5e1461064c5780634fbee1931461066c5780635654d0b3146106a557806356a6cabf146106c557600080fd5b8063313ce567146105c157806339509351146105dd5780633bbac579146105fd578063470624021461063657600080fd5b806318160ddd1161034f57806323b872dd1161031e57806323b872dd146105515780632a6c7dba146105715780632b14ca56146105915780632ba86bf2146105a757600080fd5b806318160ddd146104c957806318d9ceae146104de5780631cf2492d1461051757806321a9d82a1461053757600080fd5b8063150c880c1161038b578063150c880c1461043857806315291cd41461045a5780631529fbbf146104705780631694505e1461049157600080fd5b80630105d0fd146103bd57806306fdde03146103e6578063095ea7b31461040857600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d3601c5481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506103fb610bbb565b6040516103dd91906131d4565b34801561041457600080fd5b5061042861042336600461323e565b610c4d565b60405190151581526020016103dd565b34801561044457600080fd5b50610458610453366004613278565b610c64565b005b34801561046657600080fd5b506103d360085481565b34801561047c57600080fd5b50600f5461042890600160a01b900460ff1681565b34801561049d57600080fd5b506010546104b1906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b3480156104d557600080fd5b506002546103d3565b3480156104ea57600080fd5b506104286104f93660046132b1565b6001600160a01b03166000908152601a602052604090205460ff1690565b34801561052357600080fd5b506104586105323660046132b1565b610d37565b34801561054357600080fd5b50601f546104289060ff1681565b34801561055d57600080fd5b5061042861056c3660046132d5565b610e78565b34801561057d57600080fd5b5061045861058c366004613316565b610f29565b34801561059d57600080fd5b506103d360075481565b3480156105b357600080fd5b50601b546104289060ff1681565b3480156105cd57600080fd5b50604051601281526020016103dd565b3480156105e957600080fd5b506104286105f836600461323e565b611001565b34801561060957600080fd5b506104286106183660046132b1565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561064257600080fd5b506103d360065481565b34801561065857600080fd5b506011546104b1906001600160a01b031681565b34801561067857600080fd5b506104286106873660046132b1565b6001600160a01b031660009081526014602052604090205460ff1690565b3480156106b157600080fd5b506104586106c0366004613316565b61103d565b3480156106d157600080fd5b506104586106e0366004613316565b611118565b3480156106f157600080fd5b50600e546104b1906001600160a01b031681565b34801561071157600080fd5b50600d546104b1906001600160a01b031681565b34801561073157600080fd5b506103d3601d5481565b34801561074757600080fd5b506104586107563660046132b1565b6111fc565b34801561076757600080fd5b50610458610776366004613333565b611466565b34801561078757600080fd5b506103d36107963660046132b1565b6001600160a01b031660009081526020819052604090205490565b3480156107bd57600080fd5b50610458611536565b3480156107d257600080fd5b506103d360185481565b3480156107e857600080fd5b50600b546104b1906001600160a01b031681565b34801561080857600080fd5b5060125461042890600160a01b900460ff1681565b34801561082957600080fd5b506005546001600160a01b03166104b1565b34801561084757600080fd5b50610458610856366004613278565b6115aa565b34801561086757600080fd5b50610458610876366004613355565b61166c565b34801561088757600080fd5b506103fb611730565b34801561089c57600080fd5b506104586108ab366004613278565b61173f565b3480156108bc57600080fd5b506104586108cb3660046132b1565b611809565b3480156108dc57600080fd5b506104286108eb36600461323e565b611950565b3480156108fc57600080fd5b5061045861090b3660046132b1565b6119e9565b34801561091c57600080fd5b5061042861092b3660046132b1565b6001600160a01b03166000908152601e602052604090205460ff1690565b34801561095557600080fd5b5061042861096436600461323e565b611b23565b34801561097557600080fd5b506103d3611b30565b34801561098a57600080fd5b50610458610999366004613355565b611b5a565b3480156109aa57600080fd5b506104286109b93660046132b1565b60156020526000908152604090205460ff1681565b3480156109da57600080fd5b506104586109e9366004613333565b611c14565b3480156109fa57600080fd5b506103d3600a5481565b348015610a1057600080fd5b50610458611d77565b348015610a2557600080fd5b506019546104289060ff1681565b348015610a3f57600080fd5b50610458610a4e366004613278565b611e29565b348015610a5f57600080fd5b506103d360095481565b348015610a7557600080fd5b50600f546104b1906001600160a01b031681565b348015610a9557600080fd5b50610458610aa43660046132b1565b611f2e565b348015610ab557600080fd5b506103d3610ac436600461336e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610afb57600080fd5b506103d360135481565b348015610b1157600080fd5b50610458610b203660046132b1565b612068565b348015610b3157600080fd5b50610458610b4036600461339c565b612153565b348015610b5157600080fd5b50610458610b603660046132b1565b612236565b348015610b7157600080fd5b506103d360165481565b348015610b8757600080fd5b50610458610b963660046132b1565b6122d3565b348015610ba757600080fd5b50600c546104b1906001600160a01b031681565b606060038054610bca906133c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf6906133c8565b8015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b5050505050905090565b6000610c5a338484612477565b5060015b92915050565b6005546001600160a01b03163314610c975760405162461bcd60e51b8152600401610c8e90613402565b60405180910390fd5b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503610cd75760405162461bcd60e51b8152600401610c8e90613437565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6005546001600160a01b03163314610d615760405162461bcd60e51b8152600401610c8e90613402565b600c546001600160a01b0390811690821603610dcb5760405162461bcd60e51b815260206004820152602360248201527f666565322077616c6c657420697320616c72656164792074686174206164647260448201526265737360e81b6064820152608401610c8e565b6001600160a01b0381163b15610e235760405162461bcd60e51b815260206004820181905260248201527f666565322077616c6c65742063616e6e6f74206265206120636f6e74726163746044820152606401610c8e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f84e94630ac16ef0cfeb2db16816e2ecccc8542d78581ac3113cc5633dd13e0fa906020015b60405180910390a150565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610f135782811015610f065760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c8e565b610f138533858403612477565b610f1e85858561259b565b506001949350505050565b6005546001600160a01b03163314610f535760405162461bcd60e51b8152600401610c8e90613402565b601f5460ff16151581151503610fba5760405162461bcd60e51b815260206004820152602660248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207468617460448201526520737461746560d01b6064820152608401610c8e565b601f805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610e6d565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c5a918590611038908690613491565b612477565b6005546001600160a01b031633146110675760405162461bcd60e51b8152600401610c8e90613402565b801515600f60149054906101000a900460ff161515036110fa5760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610c8e565b600f8054911515600160a01b0260ff60a01b19909216919091179055565b6005546001600160a01b031633146111425760405162461bcd60e51b8152600401610c8e90613402565b601b5460ff161515811515036111b55760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610c8e565b601b805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610e6d565b600e546001600160a01b031633146112265760405162461bcd60e51b8152600401610c8e906134a9565b6010546001600160a01b03908116908216036112905760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610c8e565b6010546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3601080546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015611327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134b91906134e0565b6001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d191906134e0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561141e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144291906134e0565b601180546001600160a01b0319166001600160a01b03929092169190911790555050565b6005546001600160a01b031633146114905760405162461bcd60e51b8152600401610c8e90613402565b60fa82111580156114a2575060fa8111155b6114ee5760405162461bcd60e51b815260206004820152601a60248201527f46656573206d757374206265206c657373207468616e203235250000000000006044820152606401610c8e565b6006829055600781905560408051838152602081018390527f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a191015b60405180910390a15050565b6005546001600160a01b031633146115605760405162461bcd60e51b8152600401610c8e90613402565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115d45760405162461bcd60e51b8152600401610c8e90613402565b6001600160a01b0382166000908152601e602052604090205481151560ff9091161515036116145760405162461bcd60e51b8152600401610c8e90613437565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101610d2b565b6005546001600160a01b031633146116965760405162461bcd60e51b8152600401610c8e90613402565b600a8110156116fd5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b6064820152608401610c8e565b60208181556040518281527ffbede00c52e68e7972265f0deb49773af2ec3e07ebaf22d74be3c4f0c6d568679101610e6d565b606060048054610bca906133c8565b600e546001600160a01b031633146117695760405162461bcd60e51b8152600401610c8e906134a9565b6011546001600160a01b03908116908316036117fb5760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572606482015264506169727360d81b608482015260a401610c8e565b6118058282612e7d565b5050565b6005546001600160a01b031633146118335760405162461bcd60e51b8152600401610c8e90613402565b600d546001600160a01b039081169082160361189f5760405162461bcd60e51b815260206004820152602560248201527f626f744665652077616c6c657420697320616c72656164792074686174206164604482015264647265737360d81b6064820152608401610c8e565b6001600160a01b0381163b156119025760405162461bcd60e51b815260206004820152602260248201527f626f744665652077616c6c65742063616e6e6f74206265206120636f6e74726160448201526118dd60f21b6064820152608401610c8e565b600d80546001600160a01b0319166001600160a01b0383169081179091556040519081527faeb1bee205df22bc81934c711056c79abf944776e94470482dbc8d51c3ad94ca90602001610e6d565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119d25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c8e565b6119df3385858403612477565b5060019392505050565b6005546001600160a01b03163314611a135760405162461bcd60e51b8152600401610c8e90613402565b600b546001600160a01b0390811690821603611a7d5760405162461bcd60e51b815260206004820152602360248201527f666565312077616c6c657420697320616c72656164792074686174206164647260448201526265737360e81b6064820152608401610c8e565b6001600160a01b0381163b15611ad55760405162461bcd60e51b815260206004820181905260248201527f666565312077616c6c65742063616e6e6f74206265206120636f6e74726163746044820152606401610c8e565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fcffec7a894de37f9234bd4641661dad48f5792883bbe5f5c469e3bb858bea0d290602001610e6d565b6000610c5a33848461259b565b60006103e8602054611b4160025490565b611b4b91906134fd565b611b55919061351c565b905090565b6005546001600160a01b03163314611b845760405162461bcd60e51b8152600401610c8e90613402565b620186a0611b9160025490565b611b9b919061351c565b8111611c0f5760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610c8e565b601355565b6005546001600160a01b03163314611c3e5760405162461bcd60e51b8152600401610c8e90613402565b6103e8611c4d6012600a613622565b600254611c5a919061351c565b611c64919061351c565b8210158015611c9857506103e8611c7d6012600a613622565b600254611c8a919061351c565b611c94919061351c565b8110155b611d0a5760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610c8e565b611d166012600a613622565b611d2090836134fd565b601c55611d2f6012600a613622565b611d3990826134fd565b601d819055601c546040517f2a88f79986e057b8152c19cea35cd214cf53364efbf95d5b22b37797c05be55f9261152a928252602082015260400190565b600e546001600160a01b0316331480611d9a57506005546001600160a01b031633145b611db65760405162461bcd60e51b8152600401610c8e906134a9565b601254600160a01b900460ff1615611e105760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610c8e565b6012805460ff60a01b1916600160a01b17905542601855565b6005546001600160a01b03163314611e535760405162461bcd60e51b8152600401610c8e90613402565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503611ed65760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610c8e565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610d2b565b600e546001600160a01b03163314611f585760405162461bcd60e51b8152600401610c8e906134a9565b600e546001600160a01b0390811690821603611fb65760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f72204164647265737320697320616c72656164792073616d656044820152606401610c8e565b6001600160a01b0381163b1561201a5760405162461bcd60e51b8152602060048201526024808201527f4f70657261746f722077616c6c65742063616e6e6f74206265206120636f6e746044820152631c9858dd60e21b6064820152608401610c8e565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527f32d323979a0053c92306e15a8f86e9dc39ac29ce7966da018f4b71f3c6f7d82690602001610e6d565b6005546001600160a01b031633146120925760405162461bcd60e51b8152600401610c8e90613402565b6001600160a01b0381166120f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461217d5760405162461bcd60e51b8152600401610c8e90613402565b806121888385613491565b6121929190613491565b6064146121e15760405162461bcd60e51b815260206004820152601d60248201527f46656520736861726573206d7573742061646420757020746f203130300000006044820152606401610c8e565b60098390556008829055600a81905560408051848152602081018490529081018290527f4677abe8dbff9a9de3cc464f74e0c16415fc3e839597772eb5fe5ece02a6a90a9060600160405180910390a1505050565b6005546001600160a01b031633146122605760405162461bcd60e51b8152600401610c8e90613402565b6001600160a01b03811660009081526017602052604090205460ff166122b25760405162461bcd60e51b81526020600482015260076024820152661b9bdd08189bdd60ca1b6044820152606401610c8e565b6001600160a01b03166000908152601760205260409020805460ff19169055565b6005546001600160a01b031633146122fd5760405162461bcd60e51b8152600401610c8e90613402565b306001600160a01b038216036123555760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610c8e565b6001600160a01b03811661238f5760405133904780156108fc02916000818181858888f19350505050158015611805573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156123d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fc9190613631565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561244c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612470919061364a565b5050505b50565b6001600160a01b0383166124d95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8e565b6001600160a01b03821661253a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125c15760405162461bcd60e51b8152600401610c8e90613667565b6001600160a01b0382166125e75760405162461bcd60e51b8152600401610c8e906136ac565b60185415612651576016546018546125ff90426136ef565b1115801561261a57506011546001600160a01b038481169116145b8015612628575060195460ff165b15612651576001600160a01b0382166000908152601760205260409020805460ff191660011790555b8060000361266a5761266583836000612f67565b505050565b6001600160a01b03831660009081526014602052604090205460ff161580156126ac57506001600160a01b03821660009081526014602052604090205460ff16155b1561270357601254600160a01b900460ff166127035760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610c8e565b601f5460ff1615612809576001600160a01b0383166000908152601e602052604090205460ff1615801561275057506001600160a01b0382166000908152601e602052604090205460ff16155b801561276a57506011546001600160a01b03838116911614155b15612809576001600160a01b038216600090815260208190526040902054612790611b30565b61279a8383613491565b11156128075760405162461bcd60e51b815260206004820152603660248201527f4d617857616c6c65743a205472616e7366657220616d6f756e74206578636565604482015275191cc81d1a19481b585e15d85b1b195d105b5bdd5b9d60521b6064820152608401610c8e565b505b601b5460ff16156128eb576011546001600160a01b038481169116148061283d57506011546001600160a01b038381169116145b801561286257506001600160a01b0383166000908152601a602052604090205460ff16155b801561288757506001600160a01b0382166000908152601a602052604090205460ff16155b156128eb576011546001600160a01b03908116908416036128c957601c548111156128c45760405162461bcd60e51b8152600401610c8e90613706565b6128eb565b601d548111156128eb5760405162461bcd60e51b8152600401610c8e90613706565b30600090815260208190526040902054601354811080159081906129195750601254600160a81b900460ff16155b801561293e57506001600160a01b03851660009081526015602052604090205460ff16155b801561296357506001600160a01b03851660009081526014602052604090205460ff16155b801561298857506001600160a01b03841660009081526014602052604090205460ff16155b15612ce5576012805460ff60a81b1916600160a81b1790556008546000906002906064906129b690866134fd565b6129c0919061351c565b6129ca919061351c565b9050600060026064600854866129e091906134fd565b6129ea919061351c565b6129f4919061351c565b90506000606460095486612a0891906134fd565b612a12919061351c565b905060006064600a5487612a2691906134fd565b612a30919061351c565b9050600081612a3f8486613491565b612a499190613491565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612a8357612a83613763565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0091906134e0565b81600181518110612b1357612b13613763565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b81524792919091169063791ac94790612b5d908690600090879030904290600401613779565b600060405180830381600087803b158015612b7757600080fd5b505af1158015612b8b573d6000803e3d6000fd5b5050505060008147612b9d91906136ef565b60085490915015612c5b57600084612bb589846134fd565b612bbf919061351c565b60105460125460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af1158015612c31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c5691906137ea565b505050505b60095415612c9557600084612c7088846134fd565b612c7a919061351c565b600b54909150612c93906001600160a01b0316826130bb565b505b600a5415612ccf57600084612caa87846134fd565b612cb4919061351c565b600c54909150612ccd906001600160a01b0316826130bb565b505b50506012805460ff60a81b191690555050505050505b6012546001600160a01b03861660009081526014602052604090205460ff600160a81b909204821615911680612d3357506001600160a01b03851660009081526014602052604090205460ff165b15612d3c575060005b600f54600160a01b900460ff168015612d6357506011546001600160a01b03878116911614155b8015612d7d57506011546001600160a01b03868116911614155b15612d86575060005b8015612e6a576001600160a01b03851660009081526017602052604081205460ff168015612dc157506011546001600160a01b038881169116145b15612e10575061038460006103e8612dd983886134fd565b612de3919061351c565b9050612def81876136ef565b600d54909650612e0a9089906001600160a01b031683612f67565b50612e68565b6011546001600160a01b0390811690881603612e2f5750600654612e34565b506007545b60006103e8612e4383886134fd565b612e4d919061351c565b9050612e5981876136ef565b9550612e66883083612f67565b505b505b612e75868686612f67565b505050505050565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503612f135760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610c8e565b6001600160a01b038216600081815260156020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612f8d5760405162461bcd60e51b8152600401610c8e90613667565b6001600160a01b038216612fb35760405162461bcd60e51b8152600401610c8e906136ac565b6001600160a01b0383166000908152602081905260409020548181101561302b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c8e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613062908490613491565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130ae91815260200190565b60405180910390a3612470565b8047101561310b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c8e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613158576040519150601f19603f3d011682016040523d82523d6000602084013e61315d565b606091505b50509050806126655760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c8e565b600060208083528351808285015260005b81811015613201578581018301518582016040015282016131e5565b81811115613213576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461247457600080fd5b6000806040838503121561325157600080fd5b823561325c81613229565b946020939093013593505050565b801515811461247457600080fd5b6000806040838503121561328b57600080fd5b823561329681613229565b915060208301356132a68161326a565b809150509250929050565b6000602082840312156132c357600080fd5b81356132ce81613229565b9392505050565b6000806000606084860312156132ea57600080fd5b83356132f581613229565b9250602084013561330581613229565b929592945050506040919091013590565b60006020828403121561332857600080fd5b81356132ce8161326a565b6000806040838503121561334657600080fd5b50508035926020909101359150565b60006020828403121561336757600080fd5b5035919050565b6000806040838503121561338157600080fd5b823561338c81613229565b915060208301356132a681613229565b6000806000606084860312156133b157600080fd5b505081359360208301359350604090920135919050565b600181811c908216806133dc57607f821691505b6020821081036133fc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f4163636f756e7420697320616c72656164792073657420746f207468617420736040820152637461746560e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156134a4576134a461347b565b500190565b6020808252601a908201527f43616c6c6572206973206e6f7420746865204f70657261746f72000000000000604082015260600190565b6000602082840312156134f257600080fd5b81516132ce81613229565b60008160001904831182151516156135175761351761347b565b500290565b60008261353957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561357957816000190482111561355f5761355f61347b565b8085161561356c57918102915b93841c9390800290613543565b509250929050565b60008261359057506001610c5e565b8161359d57506000610c5e565b81600181146135b357600281146135bd576135d9565b6001915050610c5e565b60ff8411156135ce576135ce61347b565b50506001821b610c5e565b5060208310610133831016604e8410600b84101617156135fc575081810a610c5e565b613606838361353e565b806000190482111561361a5761361a61347b565b029392505050565b60006132ce60ff841683613581565b60006020828403121561364357600080fd5b5051919050565b60006020828403121561365c57600080fd5b81516132ce8161326a565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156137015761370161347b565b500390565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137c95784516001600160a01b0316835293830193918301916001016137a4565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156137ff57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c462c2205b5d8620f178a44748315c153ee0d78ab5e978f30ea9bcda66604e5e64736f6c634300080e0033

Deployed Bytecode Sourcemap

15481:18943:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16870:55;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;16870:55:0;;;;;;;;2809:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3723:169::-;;;;;;;;;;-1:-1:-1;3723:169:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;3723:169:0;1254:187:1;33908:364:0;;;;;;;;;;-1:-1:-1;33908:364:0;;;;;:::i;:::-;;:::i;:::-;;15602:34;;;;;;;;;;;;;;;;16110:52;;;;;;;;;;-1:-1:-1;16110:52:0;;;;-1:-1:-1;;;16110:52:0;;;;;;16171:41;;;;;;;;;;-1:-1:-1;16171:41:0;;;;-1:-1:-1;;;;;16171:41:0;;;;;;-1:-1:-1;;;;;2147:32:1;;;2129:51;;2117:2;2102:18;16171:41:0;1956:230:1;3130:108:0;;;;;;;;;;-1:-1:-1;3218:12:0;;3130:108;;34280:141;;;;;;;;;;-1:-1:-1;34280:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;34379:34:0;34355:4;34379:34;;;:25;:34;;;;;;;;;34280:141;25005:318;;;;;;;;;;-1:-1:-1;25005:318:0;;;;;:::i;:::-;;:::i;31359:43::-;;;;;;;;;;-1:-1:-1;31359:43:0;;;;;;;;3900:573;;;;;;;;;;-1:-1:-1;3900:573:0;;;;;:::i;:::-;;:::i;31668:272::-;;;;;;;;;;-1:-1:-1;31668:272:0;;;;;:::i;:::-;;:::i;15562:27::-;;;;;;;;;;;;;;;;16814:49;;;;;;;;;;-1:-1:-1;16814:49:0;;;;;;;;3029:93;;;;;;;;;;-1:-1:-1;3029:93:0;;3112:2;3292:36:1;;3280:2;3265:18;3029:93:0;3150:184:1;4481:215:0;;;;;;;;;;-1:-1:-1;4481:215:0;;;;;:::i;:::-;;:::i;21144:91::-;;;;;;;;;;-1:-1:-1;21144:91:0;;;;;:::i;:::-;-1:-1:-1;;;;;21216:11:0;21192:4;21216:11;;;:6;:11;;;;;;;;;21144:91;15529:26;;;;;;;;;;;;;;;;16219:29;;;;;;;;;;-1:-1:-1;16219:29:0;;;;-1:-1:-1;;;;;16219:29:0;;;23570:125;;;;;;;;;;-1:-1:-1;23570:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;23659:28:0;23635:4;23659:28;;;:19;:28;;;;;;;;;23570:125;24399:272;;;;;;;;;;-1:-1:-1;24399:272:0;;;;;:::i;:::-;;:::i;32865:347::-;;;;;;;;;;-1:-1:-1;32865:347:0;;;;;:::i;:::-;;:::i;15958:68::-;;;;;;;;;;-1:-1:-1;15958:68:0;;;;-1:-1:-1;;;;;15958:68:0;;;15871:72;;;;;;;;;;-1:-1:-1;15871:72:0;;;;-1:-1:-1;;;;;15871:72:0;;;16956:55;;;;;;;;;;;;;;;;22142:497;;;;;;;;;;-1:-1:-1;22142:497:0;;;;;:::i;:::-;;:::i;23703:265::-;;;;;;;;;;-1:-1:-1;23703:265:0;;;;;:::i;:::-;;:::i;3246:127::-;;;;;;;;;;-1:-1:-1;3246:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3347:18:0;3320:7;3347:18;;;;;;;;;;;;3246:127;1996:148;;;;;;;;;;;;;:::i;16660:29::-;;;;;;;;;;;;;;;;15717:70;;;;;;;;;;-1:-1:-1;15717:70:0;;;;-1:-1:-1;;;;;15717:70:0;;;16335:28;;;;;;;;;;-1:-1:-1;16335:28:0;;;;-1:-1:-1;;;16335:28:0;;;;;;1780:79;;;;;;;;;;-1:-1:-1;1845:6:0;;-1:-1:-1;;;;;1845:6:0;1780:79;;32500:319;;;;;;;;;;-1:-1:-1;32500:319:0;;;;;:::i;:::-;;:::i;32233:259::-;;;;;;;;;;-1:-1:-1;32233:259:0;;;;;:::i;:::-;;:::i;2917:104::-;;;;;;;;;;;;;:::i;22647:261::-;;;;;;;;;;-1:-1:-1;22647:261:0;;;;;:::i;:::-;;:::i;25331:341::-;;;;;;;;;;-1:-1:-1;25331:341:0;;;;;:::i;:::-;;:::i;4704:413::-;;;;;;;;;;-1:-1:-1;4704:413:0;;;;;:::i;:::-;;:::i;24679:318::-;;;;;;;;;;-1:-1:-1;24679:318:0;;;;;:::i;:::-;;:::i;31948:145::-;;;;;;;;;;-1:-1:-1;31948:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;32047:38:0;32023:4;32047:38;;;:29;:38;;;;;;;;;31948:145;3381:175;;;;;;;;;;-1:-1:-1;3381:175:0;;;;;:::i;:::-;;:::i;32101:124::-;;;;;;;;;;;;;:::i;31012:237::-;;;;;;;;;;-1:-1:-1;31012:237:0;;;;;:::i;:::-;;:::i;16505:58::-;;;;;;;;;;-1:-1:-1;16505:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33220:680;;;;;;;;;;-1:-1:-1;33220:680:0;;;;;:::i;:::-;;:::i;15679:29::-;;;;;;;;;;;;;;;;20791:200;;;;;;;;;;;;;:::i;16702:38::-;;;;;;;;;;-1:-1:-1;16702:38:0;;;;;;;;23270:292;;;;;;;;;;-1:-1:-1;23270:292:0;;;;;:::i;:::-;;:::i;15643:29::-;;;;;;;;;;;;;;;;16033:68;;;;;;;;;;-1:-1:-1;16033:68:0;;;;-1:-1:-1;;;;;16033:68:0;;;20419:318;;;;;;;;;;-1:-1:-1;20419:318:0;;;;;:::i;:::-;;:::i;3564:151::-;;;;;;;;;;-1:-1:-1;3564:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3680:18:0;;;3653:7;3680:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3564:151;16403:33;;;;;;;;;;;;;;;;2152:244;;;;;;;;;;-1:-1:-1;2152:244:0;;;;;:::i;:::-;;:::i;23976:415::-;;;;;;;;;;-1:-1:-1;23976:415:0;;;;;:::i;:::-;;:::i;21003:131::-;;;;;;;;;;-1:-1:-1;21003:131:0;;;;;:::i;:::-;;:::i;16576:31::-;;;;;;;;;;;;;;;;21247:441;;;;;;;;;;-1:-1:-1;21247:441:0;;;;;:::i;:::-;;:::i;15794:70::-;;;;;;;;;;-1:-1:-1;15794:70:0;;;;-1:-1:-1;;;;;15794:70:0;;;2809:100;2863:13;2896:5;2889:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2809:100;:::o;3723:169::-;3806:4;3823:39;1183:10;3846:7;3855:6;3823:8;:39::i;:::-;-1:-1:-1;3880:4:0;3723:169;;;;;:::o;33908:364::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;34034:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;:45;::::1;;:34;::::0;;::::1;:45;;::::0;34012:132:::1;;;;-1:-1:-1::0;;;34012:132:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34155:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:44;;-1:-1:-1;;34155:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34215:49;;1394:41:1;;;34215:49:0::1;::::0;1367:18:1;34215:49:0::1;;;;;;;;33908:364:::0;;:::o;25005:318::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;25105:10:::1;::::0;-1:-1:-1;;;;;25105:10:0;;::::1;25090:25:::0;;::::1;::::0;25082:73:::1;;;::::0;-1:-1:-1;;;25082:73:0;;6052:2:1;25082:73:0::1;::::0;::::1;6034:21:1::0;6091:2;6071:18;;;6064:30;6130:34;6110:18;;;6103:62;-1:-1:-1;;;6181:18:1;;;6174:33;6224:19;;25082:73:0::1;5850:399:1::0;25082:73:0::1;-1:-1:-1::0;;;;;21780:19:0;;;:23;25166:69:::1;;;::::0;-1:-1:-1;;;25166:69:0;;6456:2:1;25166:69:0::1;::::0;::::1;6438:21:1::0;;;6475:18;;;6468:30;6534:34;6514:18;;;6507:62;6586:18;;25166:69:0::1;6254:356:1::0;25166:69:0::1;25246:10;:24:::0;;-1:-1:-1;;;;;;25246:24:0::1;-1:-1:-1::0;;;;;25246:24:0;::::1;::::0;;::::1;::::0;;;25286:29:::1;::::0;2129:51:1;;;25286:29:0::1;::::0;2117:2:1;2102:18;25286:29:0::1;;;;;;;;25005:318:::0;:::o;3900:573::-;-1:-1:-1;;;;;4084:19:0;;4040:4;4084:19;;;:11;:19;;;;;;;;1183:10;4084:33;;;;;;;;-1:-1:-1;;4132:37:0;;4128:265;;4214:6;4194:16;:26;;4186:79;;;;-1:-1:-1;;;4186:79:0;;6817:2:1;4186:79:0;;;6799:21:1;6856:2;6836:18;;;6829:30;6895:34;6875:18;;;6868:62;-1:-1:-1;;;6946:18:1;;;6939:38;6994:19;;4186:79:0;6615:404:1;4186:79:0;4309:57;4318:6;1183:10;4359:6;4340:16;:25;4309:8;:57::i;:::-;4405:36;4415:6;4423:9;4434:6;4405:9;:36::i;:::-;-1:-1:-1;4461:4:0;;3900:573;-1:-1:-1;;;;3900:573:0:o;31668:272::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;31762:21:::1;::::0;::::1;;31752:31;;::::0;::::1;;::::0;31744:82:::1;;;::::0;-1:-1:-1;;;31744:82:0;;7226:2:1;31744:82:0::1;::::0;::::1;7208:21:1::0;7265:2;7245:18;;;7238:30;7304:34;7284:18;;;7277:62;-1:-1:-1;;;7355:18:1;;;7348:36;7401:19;;31744:82:0::1;7024:402:1::0;31744:82:0::1;31837:21;:30:::0;;-1:-1:-1;;31837:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31883:49:::1;::::0;31837:30:::1;31910:21:::0;;;1419:14:1;1412:22;1394:41;;31883:49:0::1;::::0;1382:2:1;1367:18;31883:49:0::1;1254:187:1::0;4481:215:0;1183:10;4569:4;4618:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4618:34:0;;;;;;;;;;4569:4;;4586:80;;4609:7;;4618:47;;4655:10;;4618:47;:::i;:::-;4586:8;:80::i;24399:272::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;24534:6:::1;24498:42;;:32;;;;;;;;;;;:42;;::::0;24490:121:::1;;;::::0;-1:-1:-1;;;24490:121:0;;7898:2:1;24490:121:0::1;::::0;::::1;7880:21:1::0;7937:2;7917:18;;;7910:30;7976:34;7956:18;;;7949:62;8047:34;8027:18;;;8020:62;-1:-1:-1;;;8098:19:1;;;8091:33;8141:19;;24490:121:0::1;7696:470:1::0;24490:121:0::1;24622:32;:41:::0;;;::::1;;-1:-1:-1::0;;;24622:41:0::1;-1:-1:-1::0;;;;24622:41:0;;::::1;::::0;;;::::1;::::0;;24399:272::o;32865:347::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;32978:26:::1;::::0;::::1;;32968:36;;::::0;::::1;;::::0;32946:137:::1;;;::::0;-1:-1:-1;;;32946:137:0;;8373:2:1;32946:137:0::1;::::0;::::1;8355:21:1::0;8412:2;8392:18;;;8385:30;8451:34;8431:18;;;8424:62;-1:-1:-1;;;8502:18:1;;;8495:48;8560:19;;32946:137:0::1;8171:414:1::0;32946:137:0::1;33094:26;:35:::0;;-1:-1:-1;;33094:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33145:59:::1;::::0;33094:35:::1;33177:26:::0;;;1419:14:1;1412:22;1394:41;;33145:59:0::1;::::0;1382:2:1;1367:18;33145:59:0::1;1254:187:1::0;22142:497:0;20185:8;;-1:-1:-1;;;;;20185:8:0;1183:10;20185:24;20177:62;;;;-1:-1:-1;;;20177:62:0;;;;;;;:::i;:::-;22256:15:::1;::::0;-1:-1:-1;;;;;22256:15:0;;::::1;22234:38:::0;;::::1;::::0;22226:86:::1;;;::::0;-1:-1:-1;;;22226:86:0;;9147:2:1;22226:86:0::1;::::0;::::1;9129:21:1::0;9186:2;9166:18;;;9159:30;9225:34;9205:18;;;9198:62;-1:-1:-1;;;9276:18:1;;;9269:33;9319:19;;22226:86:0::1;8945:399:1::0;22226:86:0::1;22370:15;::::0;22328:59:::1;::::0;-1:-1:-1;;;;;22370:15:0;;::::1;::::0;22328:59;::::1;::::0;::::1;::::0;22370:15:::1;::::0;22328:59:::1;22398:15;:48:::0;;-1:-1:-1;;;;;;22398:48:0::1;-1:-1:-1::0;;;;;22398:48:0;::::1;::::0;;::::1;::::0;;;22500:25:::1;::::0;;-1:-1:-1;;;22500:25:0;;;;-1:-1:-1;;22398:48:0;22500:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;22398:48;22500:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22482:69:0::1;;22560:4;22567:15;;;;;;;;;-1:-1:-1::0;;;;;22567:15:0::1;-1:-1:-1::0;;;;;22567:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22482:108;::::0;-1:-1:-1;;;;;;22482:108:0::1;::::0;;;;;;-1:-1:-1;;;;;9835:15:1;;;22482:108:0::1;::::0;::::1;9817:34:1::0;9887:15;;9867:18;;;9860:43;9752:18;;22482:108:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22601:13;:30:::0;;-1:-1:-1;;;;;;22601:30:0::1;-1:-1:-1::0;;;;;22601:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;22142:497:0:o;23703:265::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;23807:3:::1;23796:7;:14;;:33;;;;;23826:3;23814:8;:15;;23796:33;23788:72;;;::::0;-1:-1:-1;;;23788:72:0;;10116:2:1;23788:72:0::1;::::0;::::1;10098:21:1::0;10155:2;10135:18;;;10128:30;10194:28;10174:18;;;10167:56;10240:18;;23788:72:0::1;9914:350:1::0;23788:72:0::1;23871:6;:16:::0;;;23898:7:::1;:18:::0;;;23932:28:::1;::::0;;10443:25:1;;;10499:2;10484:18;;10477:34;;;23932:28:0::1;::::0;10416:18:1;23932:28:0::1;;;;;;;;23703:265:::0;;:::o;1996:148::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;2087:6:::1;::::0;2066:40:::1;::::0;2103:1:::1;::::0;-1:-1:-1;;;;;2087:6:0::1;::::0;2066:40:::1;::::0;2103:1;;2066:40:::1;2117:6;:19:::0;;-1:-1:-1;;;;;;2117:19:0::1;::::0;;1996:148::o;32500:319::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32602:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:49;::::1;;:38;::::0;;::::1;:49;;::::0;32594:98:::1;;;;-1:-1:-1::0;;;32594:98:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32703:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;32703:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32767:44;;1394:41:1;;;32767:44:0::1;::::0;1367:18:1;32767:44:0::1;1254:187:1::0;32233:259:0;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;32335:2:::1;32327:4;:10;;32319:68;;;::::0;-1:-1:-1;;;32319:68:0;;10724:2:1;32319:68:0::1;::::0;::::1;10706:21:1::0;10763:2;10743:18;;;10736:30;10802:34;10782:18;;;10775:62;-1:-1:-1;;;10853:18:1;;;10846:43;10906:19;;32319:68:0::1;10522:409:1::0;32319:68:0::1;32398:18;:25:::0;;;32439:45:::1;::::0;160:25:1;;;32439:45:0::1;::::0;133:18:1;32439:45:0::1;14:177:1::0;2917:104:0;2973:13;3006:7;2999:14;;;;;:::i;22647:261::-;20185:8;;-1:-1:-1;;;;;20185:8:0;1183:10;20185:24;20177:62;;;;-1:-1:-1;;;20177:62:0;;;;;;;:::i;:::-;22759:13:::1;::::0;-1:-1:-1;;;;;22759:13:0;;::::1;22751:21:::0;;::::1;::::0;22743:103:::1;;;::::0;-1:-1:-1;;;22743:103:0;;11138:2:1;22743:103:0::1;::::0;::::1;11120:21:1::0;11177:2;11157:18;;;11150:30;11216:34;11196:18;;;11189:62;11287:34;11267:18;;;11260:62;-1:-1:-1;;;11338:19:1;;;11331:36;11384:19;;22743:103:0::1;10936:473:1::0;22743:103:0::1;22859:41;22888:4;22894:5;22859:28;:41::i;:::-;22647:261:::0;;:::o;25331:341::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;25438:12:::1;::::0;-1:-1:-1;;;;;25438:12:0;;::::1;25421:29:::0;;::::1;::::0;25413:79:::1;;;::::0;-1:-1:-1;;;25413:79:0;;11616:2:1;25413:79:0::1;::::0;::::1;11598:21:1::0;11655:2;11635:18;;;11628:30;11694:34;11674:18;;;11667:62;-1:-1:-1;;;11745:18:1;;;11738:35;11790:19;;25413:79:0::1;11414:401:1::0;25413:79:0::1;-1:-1:-1::0;;;;;21780:19:0;;;:23;25503:73:::1;;;::::0;-1:-1:-1;;;25503:73:0;;12022:2:1;25503:73:0::1;::::0;::::1;12004:21:1::0;12061:2;12041:18;;;12034:30;12100:34;12080:18;;;12073:62;-1:-1:-1;;;12151:18:1;;;12144:32;12193:19;;25503:73:0::1;11820:398:1::0;25503:73:0::1;25587:12;:28:::0;;-1:-1:-1;;;;;;25587:28:0::1;-1:-1:-1::0;;;;;25587:28:0;::::1;::::0;;::::1;::::0;;;25631:33:::1;::::0;2129:51:1;;;25631:33:0::1;::::0;2117:2:1;2102:18;25631:33:0::1;1956:230:1::0;4704:413:0;1183:10;4797:4;4841:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4841:34:0;;;;;;;;;;4894:35;;;;4886:85;;;;-1:-1:-1;;;4886:85:0;;12425:2:1;4886:85:0;;;12407:21:1;12464:2;12444:18;;;12437:30;12503:34;12483:18;;;12476:62;-1:-1:-1;;;12554:18:1;;;12547:35;12599:19;;4886:85:0;12223:401:1;4886:85:0;5007:67;1183:10;5030:7;5058:15;5039:16;:34;5007:8;:67::i;:::-;-1:-1:-1;5105:4:0;;4704:413;-1:-1:-1;;;4704:413:0:o;24679:318::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;24779:10:::1;::::0;-1:-1:-1;;;;;24779:10:0;;::::1;24764:25:::0;;::::1;::::0;24756:73:::1;;;::::0;-1:-1:-1;;;24756:73:0;;12831:2:1;24756:73:0::1;::::0;::::1;12813:21:1::0;12870:2;12850:18;;;12843:30;12909:34;12889:18;;;12882:62;-1:-1:-1;;;12960:18:1;;;12953:33;13003:19;;24756:73:0::1;12629:399:1::0;24756:73:0::1;-1:-1:-1::0;;;;;21780:19:0;;;:23;24840:69:::1;;;::::0;-1:-1:-1;;;24840:69:0;;13235:2:1;24840:69:0::1;::::0;::::1;13217:21:1::0;;;13254:18;;;13247:30;13313:34;13293:18;;;13286:62;13365:18;;24840:69:0::1;13033:356:1::0;24840:69:0::1;24920:10;:24:::0;;-1:-1:-1;;;;;;24920:24:0::1;-1:-1:-1::0;;;;;24920:24:0;::::1;::::0;;::::1;::::0;;;24960:29:::1;::::0;2129:51:1;;;24960:29:0::1;::::0;2117:2:1;2102:18;24960:29:0::1;1956:230:1::0;3381:175:0;3467:4;3484:42;1183:10;3508:9;3519:6;3484:9;:42::i;32101:124::-;32149:7;32213:4;32192:18;;32176:13;3218:12;;;3130:108;32176:13;:34;;;;:::i;:::-;:41;;;;:::i;:::-;32169:48;;32101:124;:::o;31012:237::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;31127:6:::1;31111:13;3218:12:::0;;;3130:108;31111:13:::1;:22;;;;:::i;:::-;31099:9;:34;31091:109;;;::::0;-1:-1:-1;;;31091:109:0;;13991:2:1;31091:109:0::1;::::0;::::1;13973:21:1::0;14030:2;14010:18;;;14003:30;14069:34;14049:18;;;14042:62;14140:32;14120:18;;;14113:60;14190:19;;31091:109:0::1;13789:426:1::0;31091:109:0::1;31211:18;:30:::0;31012:237::o;33220:680::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;33441:4:::1;33421:16;3112:2:::0;33421::::1;:16;:::i;:::-;3218:12:::0;;33404:34:::1;;;;:::i;:::-;:41;;;;:::i;:::-;33375:24;:70;;:158;;;;-1:-1:-1::0;33529:4:0::1;33509:16;3112:2:::0;33509::::1;:16;:::i;:::-;3218:12:::0;;33492:34:::1;;;;:::i;:::-;:41;;;;:::i;:::-;33463:25;:70;;33375:158;33353:272;;;::::0;-1:-1:-1;;;33353:272:0;;15805:2:1;33353:272:0::1;::::0;::::1;15787:21:1::0;15844:2;15824:18;;;15817:30;15883:34;15863:18;;;15856:62;15954:33;15934:18;;;15927:61;16005:19;;33353:272:0::1;15603:427:1::0;33353:272:0::1;33693:16;3112:2:::0;33693::::1;:16;:::i;:::-;33664:46;::::0;:24;:46:::1;:::i;:::-;33637:23;:73:::0;33777:16:::1;3112:2:::0;33777::::1;:16;:::i;:::-;33748:46;::::0;:25;:46:::1;:::i;:::-;33721:24;:73:::0;;;33842:23:::1;::::0;33810:82:::1;::::0;::::1;::::0;::::1;::::0;10443:25:1;;10499:2;10484:18;;10477:34;10431:2;10416:18;;10269:248;20791:200:0;20310:8;;-1:-1:-1;;;;;20310:8:0;1183:10;20310:24;;:51;;-1:-1:-1;1845:6:0;;-1:-1:-1;;;;;1845:6:0;1183:10;20338:23;20310:51;20302:89;;;;-1:-1:-1;;;20302:89:0;;;;;;;:::i;:::-;20858:13:::1;::::0;-1:-1:-1;;;20858:13:0;::::1;;;:22;20850:61;;;::::0;-1:-1:-1;;;20850:61:0;;16237:2:1;20850:61:0::1;::::0;::::1;16219:21:1::0;16276:2;16256:18;;;16249:30;16315:28;16295:18;;;16288:56;16361:18;;20850:61:0::1;16035:350:1::0;20850:61:0::1;20922:13;:20:::0;;-1:-1:-1;;;;20922:20:0::1;-1:-1:-1::0;;;20922:20:0::1;::::0;;20966:15:::1;20953:10;:28:::0;20791:200::o;23270:292::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23365:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;23357:95:::1;;;::::0;-1:-1:-1;;;23357:95:0;;16592:2:1;23357:95:0::1;::::0;::::1;16574:21:1::0;16631:2;16611:18;;;16604:30;16670:34;16650:18;;;16643:62;-1:-1:-1;;;16721:18:1;;;16714:40;16771:19;;23357:95:0::1;16390:406:1::0;23357:95:0::1;-1:-1:-1::0;;;;;23463:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23463:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23520:34;;1394:41:1;;;23520:34:0::1;::::0;1367:18:1;23520:34:0::1;1254:187:1::0;20419:318:0;20185:8;;-1:-1:-1;;;;;20185:8:0;1183:10;20185:24;20177:62;;;;-1:-1:-1;;;20177:62:0;;;;;;;:::i;:::-;20523:8:::1;::::0;-1:-1:-1;;;;;20523:8:0;;::::1;20509:22:::0;;::::1;::::0;20501:66:::1;;;::::0;-1:-1:-1;;;20501:66:0;;17003:2:1;20501:66:0::1;::::0;::::1;16985:21:1::0;;;17022:18;;;17015:30;17081:34;17061:18;;;17054:62;17133:18;;20501:66:0::1;16801:356:1::0;20501:66:0::1;-1:-1:-1::0;;;;;21780:19:0;;;:23;20578:72:::1;;;::::0;-1:-1:-1;;;20578:72:0;;17364:2:1;20578:72:0::1;::::0;::::1;17346:21:1::0;17403:2;17383:18;;;17376:30;17442:34;17422:18;;;17415:62;-1:-1:-1;;;17493:18:1;;;17486:34;17537:19;;20578:72:0::1;17162:400:1::0;20578:72:0::1;20661:8;:21:::0;;-1:-1:-1;;;;;;20661:21:0::1;-1:-1:-1::0;;;;;20661:21:0;::::1;::::0;;::::1;::::0;;;20698:31:::1;::::0;2129:51:1;;;20698:31:0::1;::::0;2117:2:1;2102:18;20698:31:0::1;1956:230:1::0;2152:244:0;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2241:22:0;::::1;2233:73;;;::::0;-1:-1:-1;;;2233:73:0;;17769:2:1;2233:73:0::1;::::0;::::1;17751:21:1::0;17808:2;17788:18;;;17781:30;17847:34;17827:18;;;17820:62;-1:-1:-1;;;17898:18:1;;;17891:36;17944:19;;2233:73:0::1;17567:402:1::0;2233:73:0::1;2343:6;::::0;2322:38:::1;::::0;-1:-1:-1;;;;;2322:38:0;;::::1;::::0;2343:6:::1;::::0;2322:38:::1;::::0;2343:6:::1;::::0;2322:38:::1;2371:6;:17:::0;;-1:-1:-1;;;;;;2371:17:0::1;-1:-1:-1::0;;;;;2371:17:0;;;::::1;::::0;;;::::1;::::0;;2152:244::o;23976:415::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;24147:10;24110:34:::1;24126:18:::0;24110:13;:34:::1;:::i;:::-;:47;;;;:::i;:::-;24161:3;24110:54;24102:96;;;::::0;-1:-1:-1;;;24102:96:0;;18176:2:1;24102:96:0::1;::::0;::::1;18158:21:1::0;18215:2;18195:18;;;18188:30;18254:31;18234:18;;;18227:59;18303:18;;24102:96:0::1;17974:353:1::0;24102:96:0::1;24209:9;:25:::0;;;24245:14:::1;:35:::0;;;24291:9:::1;:22:::0;;;24329:54:::1;::::0;;18534:25:1;;;18590:2;18575:18;;18568:34;;;18618:18;;;18611:34;;;24329:54:0::1;::::0;18522:2:1;18507:18;24329:54:0::1;;;;;;;23976:415:::0;;;:::o;21003:131::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21075:10:0;::::1;;::::0;;;:6:::1;:10;::::0;;;;;::::1;;21067:30;;;::::0;-1:-1:-1;;;21067:30:0;;18858:2:1;21067:30:0::1;::::0;::::1;18840:21:1::0;18897:1;18877:18;;;18870:29;-1:-1:-1;;;18915:18:1;;;18908:37;18962:18;;21067:30:0::1;18656:330:1::0;21067:30:0::1;-1:-1:-1::0;;;;;21108:10:0::1;21121:5;21108:10:::0;;;:6:::1;:10;::::0;;;;:18;;-1:-1:-1;;21108:18:0::1;::::0;;21003:131::o;21247:441::-;1907:6;;-1:-1:-1;;;;;1907:6:0;1183:10;1907:22;1899:67;;;;-1:-1:-1;;;1899:67:0;;;;;;;:::i;:::-;21343:4:::1;-1:-1:-1::0;;;;;21326:22:0;::::1;::::0;21318:67:::1;;;::::0;-1:-1:-1;;;21318:67:0;;19193:2:1;21318:67:0::1;::::0;::::1;19175:21:1::0;;;19212:18;;;19205:30;19271:34;19251:18;;;19244:62;19323:18;;21318:67:0::1;18991:356:1::0;21318:67:0::1;-1:-1:-1::0;;;;;21400:21:0;::::1;21396:126;;21438:51;::::0;21446:10:::1;::::0;21467:21:::1;21438:51:::0;::::1;;;::::0;::::1;::::0;;;21467:21;21446:10;21438:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;21396:126;21594:35;::::0;-1:-1:-1;;;21594:35:0;;21623:4:::1;21594:35;::::0;::::1;2129:51:1::0;21559:5:0;;21532:17:::1;::::0;-1:-1:-1;;;;;21594:20:0;::::1;::::0;::::1;::::0;2102:18:1;;21594:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21640:40;::::0;-1:-1:-1;;;21640:40:0;;21660:10:::1;21640:40;::::0;::::1;19715:51:1::0;19782:18;;;19775:34;;;21576:53:0;;-1:-1:-1;;;;;;21640:19:0;::::1;::::0;::::1;::::0;19688:18:1;;21640:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21307:381;;1977:1;21247:441:::0;:::o;6872:380::-;-1:-1:-1;;;;;7008:19:0;;7000:68;;;;-1:-1:-1;;;7000:68:0;;20272:2:1;7000:68:0;;;20254:21:1;20311:2;20291:18;;;20284:30;20350:34;20330:18;;;20323:62;-1:-1:-1;;;20401:18:1;;;20394:34;20445:19;;7000:68:0;20070:400:1;7000:68:0;-1:-1:-1;;;;;7087:21:0;;7079:68;;;;-1:-1:-1;;;7079:68:0;;20677:2:1;7079:68:0;;;20659:21:1;20716:2;20696:18;;;20689:30;20755:34;20735:18;;;20728:62;-1:-1:-1;;;20806:18:1;;;20799:32;20848:19;;7079:68:0;20475:398:1;7079:68:0;-1:-1:-1;;;;;7160:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7212:32;;160:25:1;;;7212:32:0;;133:18:1;7212:32:0;;;;;;;6872:380;;;:::o;25680:5294::-;-1:-1:-1;;;;;25813:18:0;;25805:68;;;;-1:-1:-1;;;25805:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25892:16:0;;25884:64;;;;-1:-1:-1;;;25884:64:0;;;;;;;:::i;:::-;25974:10;;:14;25970:200;;26040:11;;26026:10;;26008:28;;:15;:28;:::i;:::-;:43;;:68;;;;-1:-1:-1;26063:13:0;;-1:-1:-1;;;;;26055:21:0;;;26063:13;;26055:21;26008:68;:91;;;;-1:-1:-1;26080:19:0;;;;26008:91;26005:154;;;-1:-1:-1;;;;;26126:10:0;;;;;;:6;:10;;;;;:17;;-1:-1:-1;;26126:17:0;26139:4;26126:17;;;26005:154;26187:6;26197:1;26187:11;26184:92;;26215:28;26231:4;26237:2;26241:1;26215:15;:28::i;:::-;25680:5294;;;:::o;26184:92::-;-1:-1:-1;;;;;26296:25:0;;;;;;:19;:25;;;;;;;;26295:26;:54;;;;-1:-1:-1;;;;;;26326:23:0;;;;;;:19;:23;;;;;;;;26325:24;26295:54;26292:134;;;26374:13;;-1:-1:-1;;;26374:13:0;;;;26366:48;;;;-1:-1:-1;;;26366:48:0;;22020:2:1;26366:48:0;;;22002:21:1;22059:2;22039:18;;;22032:30;-1:-1:-1;;;22078:18:1;;;22071:52;22140:18;;26366:48:0;21818:346:1;26366:48:0;26442:21;;;;26438:407;;;-1:-1:-1;;;;;26484:35:0;;;;;;:29;:35;;;;;;;;:44;;;:107;;-1:-1:-1;;;;;;26549:33:0;;;;;;:29;:33;;;;;;;;:42;26484:107;:147;;;;-1:-1:-1;26618:13:0;;-1:-1:-1;;;;;26612:19:0;;;26618:13;;26612:19;;26484:147;26480:354;;;-1:-1:-1;;;;;3347:18:0;;26666:12;3347:18;;;;;;;;;;;26742:17;:15;:17::i;:::-;26722:16;26732:6;26722:7;:16;:::i;:::-;:37;;26714:104;;;;-1:-1:-1;;;26714:104:0;;22371:2:1;26714:104:0;;;22353:21:1;22410:2;22390:18;;;22383:30;22449:34;22429:18;;;22422:62;-1:-1:-1;;;22500:18:1;;;22493:52;22562:19;;26714:104:0;22169:418:1;26714:104:0;26647:187;26480:354;26861:26;;;;26857:770;;;26927:13;;-1:-1:-1;;;;;26919:21:0;;;26927:13;;26919:21;;:44;;-1:-1:-1;26950:13:0;;-1:-1:-1;;;;;26944:19:0;;;26950:13;;26944:19;26919:44;26918:107;;;;-1:-1:-1;;;;;;26985:31:0;;;;;;:25;:31;;;;;;;;:40;26918:107;:169;;;;-1:-1:-1;;;;;;27047:29:0;;;;;;:25;:29;;;;;;;;:40;26918:169;26914:702;;;27134:13;;-1:-1:-1;;;;;27134:13:0;;;27126:21;;;;27122:479;;27216:23;;27206:6;:33;;27172:180;;;;-1:-1:-1;;;27172:180:0;;;;;;;:::i;:::-;27122:479;;;27445:24;;27435:6;:34;;27401:180;;;;-1:-1:-1;;;27401:180:0;;;;;;;:::i;:::-;27698:4;27649:28;3347:18;;;;;;;;;;;27756;;27732:42;;;;;;;27791:33;;-1:-1:-1;27816:8:0;;-1:-1:-1;;;27816:8:0;;;;27815:9;27791:33;:82;;;;-1:-1:-1;;;;;;27842:31:0;;;;;;:25;:31;;;;;;;;27841:32;27791:82;:125;;;;-1:-1:-1;;;;;;27891:25:0;;;;;;:19;:25;;;;;;;;27890:26;27791:125;:153;;;;-1:-1:-1;;;;;;27921:23:0;;;;;;:19;:23;;;;;;;;27920:24;27791:153;27787:2111;;;27971:8;:15;;-1:-1:-1;;;;27971:15:0;-1:-1:-1;;;27971:15:0;;;28058:14;;27971:15;;28081:1;;28075:3;;28035:37;;:20;:37;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;28003:79;;28097:29;28175:1;28169:3;28152:14;;28129:20;:37;;;;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;28097:79;;28205:18;28261:3;28249:9;;28226:20;:32;;;;:::i;:::-;:38;;;;:::i;:::-;28205:59;;28279:18;28335:3;28323:9;;28300:20;:32;;;;:::i;:::-;:38;;;;:::i;:::-;28279:59;-1:-1:-1;28355:20:0;28279:59;28379:34;28403:10;28379:21;:34;:::i;:::-;:47;;;;:::i;:::-;28467:16;;;28481:1;28467:16;;;;;;;;28355:71;;-1:-1:-1;28443:21:0;;28467:16;;;;;;;;;;;;-1:-1:-1;28467:16:0;28443:40;;28516:4;28498;28503:1;28498:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28498:23:0;;;:7;;;;;;;;;;:23;;;;28546:15;;:22;;;-1:-1:-1;;;28546:22:0;;;;:15;;;;;:20;;:22;;;;;28498:7;;28546:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28536:4;28541:1;28536:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28536:32:0;;;:7;;;;;;;;;:32;28648:15;;:235;;-1:-1:-1;;;28648:235:0;;28610:21;;28648:15;;;;;:66;;:235;;28733:12;;28585:22;;28812:4;;28843;;28867:15;;28648:235;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28912:18;28957:14;28933:21;:38;;;;:::i;:::-;28992:14;;28912:59;;-1:-1:-1;28992:18:0;28988:481;;29047:20;29107:12;29070:34;29083:21;29070:10;:34;:::i;:::-;:49;;;;:::i;:::-;29141:15;;29392:4;;29141:312;;-1:-1:-1;;;29141:312:0;;29224:4;29141:312;;;24610:34:1;24660:18;;;24653:34;;;29141:15:0;24703:18:1;;;24696:34;;;24746:18;;;24739:34;-1:-1:-1;;;;;29392:4:0;;;24789:19:1;;;24782:44;29419:15:0;24842:19:1;;;24835:35;29047:72:0;;-1:-1:-1;29141:15:0;;:31;;29047:72;;24544:19:1;;29141:312:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29025:444;28988:481;29490:9;;:13;29487:167;;29524:15;29568:12;29542:23;29555:10;29542;:23;:::i;:::-;:38;;;;:::i;:::-;29615:10;;29524:56;;-1:-1:-1;29599:37:0;;-1:-1:-1;;;;;29615:10:0;29524:56;29599:7;:37::i;:::-;29505:149;29487:167;29673:9;;:13;29670:167;;29707:15;29751:12;29725:23;29738:10;29725;:23;:::i;:::-;:38;;;;:::i;:::-;29798:10;;29707:56;;-1:-1:-1;29782:37:0;;-1:-1:-1;;;;;29798:10:0;29707:56;29782:7;:37::i;:::-;29688:149;29670:167;-1:-1:-1;;29870:8:0;:16;;-1:-1:-1;;;;29870:16:0;;;-1:-1:-1;;;;;;27787:2111:0;29926:8;;-1:-1:-1;;;;;29950:25:0;;29910:12;29950:25;;;:19;:25;;;;;;29926:8;-1:-1:-1;;;29926:8:0;;;;;29925:9;;29950:25;;:52;;-1:-1:-1;;;;;;29979:23:0;;;;;;:19;:23;;;;;;;;29950:52;29947:99;;;-1:-1:-1;30029:5:0;29947:99;30061:32;;-1:-1:-1;;;30061:32:0;;;;:57;;;;-1:-1:-1;30105:13:0;;-1:-1:-1;;;;;30097:21:0;;;30105:13;;30097:21;;30061:57;:80;;;;-1:-1:-1;30128:13:0;;-1:-1:-1;;;;;30122:19:0;;;30128:13;;30122:19;;30061:80;30058:127;;;-1:-1:-1;30168:5:0;30058:127;30210:7;30207:710;;;-1:-1:-1;;;;;30271:10:0;;30234:18;30271:10;;;:6;:10;;;;;;;;:35;;;;-1:-1:-1;30293:13:0;;-1:-1:-1;;;;;30285:21:0;;;30293:13;;30285:21;30271:35;30267:635;;;-1:-1:-1;30339:3:0;30361:12;30398:4;30376:19;30339:3;30376:6;:19;:::i;:::-;:26;;;;:::i;:::-;30361:41;-1:-1:-1;30430:13:0;30361:41;30430:6;:13;:::i;:::-;30484:12;;30421:22;;-1:-1:-1;30462:41:0;;30478:4;;-1:-1:-1;;;;;30484:12:0;30498:4;30462:15;:41::i;:::-;30307:212;30267:635;;;30581:13;;-1:-1:-1;;;;;30581:13:0;;;30573:21;;;;30570:170;;-1:-1:-1;30628:6:0;;30570:170;;;-1:-1:-1;30713:7:0;;30570:170;30754:12;30791:4;30769:19;30778:10;30769:6;:19;:::i;:::-;:26;;;;:::i;:::-;30754:41;-1:-1:-1;30816:13:0;30754:41;30816:6;:13;:::i;:::-;30807:22;;30844:42;30860:4;30874;30881;30844:15;:42::i;:::-;30551:351;30267:635;30219:698;30207:710;30931:33;30947:4;30953:2;30957:6;30931:15;:33::i;:::-;25794:5180;;;25680:5294;;;:::o;22917:308::-;-1:-1:-1;;;;;23008:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;23000:109;;;;-1:-1:-1;;;23000:109:0;;25394:2:1;23000:109:0;;;25376:21:1;25433:2;25413:18;;;25406:30;25472:34;25452:18;;;25445:62;25543:26;25523:18;;;25516:54;25587:19;;23000:109:0;25192:420:1;23000:109:0;-1:-1:-1;;;;;23120:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;23120:39:0;;;;;;;;;;23177:40;;23120:39;;:31;23177:40;;;22917:308;;:::o;5125:733::-;-1:-1:-1;;;;;5265:20:0;;5257:70;;;;-1:-1:-1;;;5257:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5346:23:0;;5338:71;;;;-1:-1:-1;;;5338:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5506:17:0;;5482:21;5506:17;;;;;;;;;;;5542:23;;;;5534:74;;;;-1:-1:-1;;;5534:74:0;;25819:2:1;5534:74:0;;;25801:21:1;25858:2;25838:18;;;25831:30;25897:34;25877:18;;;25870:62;-1:-1:-1;;;25948:18:1;;;25941:36;25994:19;;5534:74:0;25617:402:1;5534:74:0;-1:-1:-1;;;;;5644:17:0;;;:9;:17;;;;;;;;;;;5664:22;;;5644:42;;5708:20;;;;;;;;:30;;5680:6;;5644:9;5708:30;;5680:6;;5708:30;:::i;:::-;;;;;;;;5773:9;-1:-1:-1;;;;;5756:35:0;5765:6;-1:-1:-1;;;;;5756:35:0;;5784:6;5756:35;;;;160:25:1;;148:2;133:18;;14:177;5756:35:0;;;;;;;;5804:46;25680:5294;21819:315;21932:6;21907:21;:31;;21899:73;;;;-1:-1:-1;;;21899:73:0;;26226:2:1;21899:73:0;;;26208:21:1;26265:2;26245:18;;;26238:30;26304:31;26284:18;;;26277:59;26353:18;;21899:73:0;26024:353:1;21899:73:0;21986:12;22004:9;-1:-1:-1;;;;;22004:14:0;22026:6;22004:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21985:52;;;22056:7;22048:78;;;;-1:-1:-1;;;22048:78:0;;26794:2:1;22048:78:0;;;26776:21:1;26833:2;26813:18;;;26806:30;26872:34;26852:18;;;26845:62;26943:28;26923:18;;;26916:56;26989:19;;22048:78:0;26592:422:1;196:597;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;934:315;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:118::-;1532:5;1525:13;1518:21;1511:5;1508:32;1498:60;;1554:1;1551;1544:12;1569:382;1634:6;1642;1695:2;1683:9;1674:7;1670:23;1666:32;1663:52;;;1711:1;1708;1701:12;1663:52;1750:9;1737:23;1769:31;1794:5;1769:31;:::i;:::-;1819:5;-1:-1:-1;1876:2:1;1861:18;;1848:32;1889:30;1848:32;1889:30;:::i;:::-;1938:7;1928:17;;;1569:382;;;;;:::o;2191:247::-;2250:6;2303:2;2291:9;2282:7;2278:23;2274:32;2271:52;;;2319:1;2316;2309:12;2271:52;2358:9;2345:23;2377:31;2402:5;2377:31;:::i;:::-;2427:5;2191:247;-1:-1:-1;;;2191:247:1:o;2443:456::-;2520:6;2528;2536;2589:2;2577:9;2568:7;2564:23;2560:32;2557:52;;;2605:1;2602;2595:12;2557:52;2644:9;2631:23;2663:31;2688:5;2663:31;:::i;:::-;2713:5;-1:-1:-1;2770:2:1;2755:18;;2742:32;2783:33;2742:32;2783:33;:::i;:::-;2443:456;;2835:7;;-1:-1:-1;;;2889:2:1;2874:18;;;;2861:32;;2443:456::o;2904:241::-;2960:6;3013:2;3001:9;2992:7;2988:23;2984:32;2981:52;;;3029:1;3026;3019:12;2981:52;3068:9;3055:23;3087:28;3109:5;3087:28;:::i;3547:248::-;3615:6;3623;3676:2;3664:9;3655:7;3651:23;3647:32;3644:52;;;3692:1;3689;3682:12;3644:52;-1:-1:-1;;3715:23:1;;;3785:2;3770:18;;;3757:32;;-1:-1:-1;3547:248:1:o;3800:180::-;3859:6;3912:2;3900:9;3891:7;3887:23;3883:32;3880:52;;;3928:1;3925;3918:12;3880:52;-1:-1:-1;3951:23:1;;3800:180;-1:-1:-1;3800:180:1:o;3985:388::-;4053:6;4061;4114:2;4102:9;4093:7;4089:23;4085:32;4082:52;;;4130:1;4127;4120:12;4082:52;4169:9;4156:23;4188:31;4213:5;4188:31;:::i;:::-;4238:5;-1:-1:-1;4295:2:1;4280:18;;4267:32;4308:33;4267:32;4308:33;:::i;4378:316::-;4455:6;4463;4471;4524:2;4512:9;4503:7;4499:23;4495:32;4492:52;;;4540:1;4537;4530:12;4492:52;-1:-1:-1;;4563:23:1;;;4633:2;4618:18;;4605:32;;-1:-1:-1;4684:2:1;4669:18;;;4656:32;;4378:316;-1:-1:-1;4378:316:1:o;4699:380::-;4778:1;4774:12;;;;4821;;;4842:61;;4896:4;4888:6;4884:17;4874:27;;4842:61;4949:2;4941:6;4938:14;4918:18;4915:38;4912:161;;4995:10;4990:3;4986:20;4983:1;4976:31;5030:4;5027:1;5020:15;5058:4;5055:1;5048:15;4912:161;;4699:380;;;:::o;5084:356::-;5286:2;5268:21;;;5305:18;;;5298:30;5364:34;5359:2;5344:18;;5337:62;5431:2;5416:18;;5084:356::o;5445:400::-;5647:2;5629:21;;;5686:2;5666:18;;;5659:30;5725:34;5720:2;5705:18;;5698:62;-1:-1:-1;;;5791:2:1;5776:18;;5769:34;5835:3;5820:19;;5445:400::o;7431:127::-;7492:10;7487:3;7483:20;7480:1;7473:31;7523:4;7520:1;7513:15;7547:4;7544:1;7537:15;7563:128;7603:3;7634:1;7630:6;7627:1;7624:13;7621:39;;;7640:18;;:::i;:::-;-1:-1:-1;7676:9:1;;7563:128::o;8590:350::-;8792:2;8774:21;;;8831:2;8811:18;;;8804:30;8870:28;8865:2;8850:18;;8843:56;8931:2;8916:18;;8590:350::o;9349:251::-;9419:6;9472:2;9460:9;9451:7;9447:23;9443:32;9440:52;;;9488:1;9485;9478:12;9440:52;9520:9;9514:16;9539:31;9564:5;9539:31;:::i;13394:168::-;13434:7;13500:1;13496;13492:6;13488:14;13485:1;13482:21;13477:1;13470:9;13463:17;13459:45;13456:71;;;13507:18;;:::i;:::-;-1:-1:-1;13547:9:1;;13394:168::o;13567:217::-;13607:1;13633;13623:132;;13677:10;13672:3;13668:20;13665:1;13658:31;13712:4;13709:1;13702:15;13740:4;13737:1;13730:15;13623:132;-1:-1:-1;13769:9:1;;13567:217::o;14220:422::-;14309:1;14352:5;14309:1;14366:270;14387:7;14377:8;14374:21;14366:270;;;14446:4;14442:1;14438:6;14434:17;14428:4;14425:27;14422:53;;;14455:18;;:::i;:::-;14505:7;14495:8;14491:22;14488:55;;;14525:16;;;;14488:55;14604:22;;;;14564:15;;;;14366:270;;;14370:3;14220:422;;;;;:::o;14647:806::-;14696:5;14726:8;14716:80;;-1:-1:-1;14767:1:1;14781:5;;14716:80;14815:4;14805:76;;-1:-1:-1;14852:1:1;14866:5;;14805:76;14897:4;14915:1;14910:59;;;;14983:1;14978:130;;;;14890:218;;14910:59;14940:1;14931:10;;14954:5;;;14978:130;15015:3;15005:8;15002:17;14999:43;;;15022:18;;:::i;:::-;-1:-1:-1;;15078:1:1;15064:16;;15093:5;;14890:218;;15192:2;15182:8;15179:16;15173:3;15167:4;15164:13;15160:36;15154:2;15144:8;15141:16;15136:2;15130:4;15127:12;15123:35;15120:77;15117:159;;;-1:-1:-1;15229:19:1;;;15261:5;;15117:159;15308:34;15333:8;15327:4;15308:34;:::i;:::-;15378:6;15374:1;15370:6;15366:19;15357:7;15354:32;15351:58;;;15389:18;;:::i;:::-;15427:20;;14647:806;-1:-1:-1;;;14647:806:1:o;15458:140::-;15516:5;15545:47;15586:4;15576:8;15572:19;15566:4;15545:47;:::i;19352:184::-;19422:6;19475:2;19463:9;19454:7;19450:23;19446:32;19443:52;;;19491:1;19488;19481:12;19443:52;-1:-1:-1;19514:16:1;;19352:184;-1:-1:-1;19352:184:1:o;19820:245::-;19887:6;19940:2;19928:9;19919:7;19915:23;19911:32;19908:52;;;19956:1;19953;19946:12;19908:52;19988:9;19982:16;20007:28;20029:5;20007:28;:::i;20878:401::-;21080:2;21062:21;;;21119:2;21099:18;;;21092:30;21158:34;21153:2;21138:18;;21131:62;-1:-1:-1;;;21224:2:1;21209:18;;21202:35;21269:3;21254:19;;20878:401::o;21284:399::-;21486:2;21468:21;;;21525:2;21505:18;;;21498:30;21564:34;21559:2;21544:18;;21537:62;-1:-1:-1;;;21630:2:1;21615:18;;21608:33;21673:3;21658:19;;21284:399::o;21688:125::-;21728:4;21756:1;21753;21750:8;21747:34;;;21761:18;;:::i;:::-;-1:-1:-1;21798:9:1;;21688:125::o;22592:423::-;22794:2;22776:21;;;22833:2;22813:18;;;22806:30;22872:34;22867:2;22852:18;;22845:62;22943:29;22938:2;22923:18;;22916:57;23005:3;22990:19;;22592:423::o;23152:127::-;23213:10;23208:3;23204:20;23201:1;23194:31;23244:4;23241:1;23234:15;23268:4;23265:1;23258:15;23284:980;23546:4;23594:3;23583:9;23579:19;23625:6;23614:9;23607:25;23651:2;23689:6;23684:2;23673:9;23669:18;23662:34;23732:3;23727:2;23716:9;23712:18;23705:31;23756:6;23791;23785:13;23822:6;23814;23807:22;23860:3;23849:9;23845:19;23838:26;;23899:2;23891:6;23887:15;23873:29;;23920:1;23930:195;23944:6;23941:1;23938:13;23930:195;;;24009:13;;-1:-1:-1;;;;;24005:39:1;23993:52;;24100:15;;;;24065:12;;;;24041:1;23959:9;23930:195;;;-1:-1:-1;;;;;;;24181:32:1;;;;24176:2;24161:18;;24154:60;-1:-1:-1;;;24245:3:1;24230:19;24223:35;24142:3;23284:980;-1:-1:-1;;;23284:980:1:o;24881:306::-;24969:6;24977;24985;25038:2;25026:9;25017:7;25013:23;25009:32;25006:52;;;25054:1;25051;25044:12;25006:52;25083:9;25077:16;25067:26;;25133:2;25122:9;25118:18;25112:25;25102:35;;25177:2;25166:9;25162:18;25156:25;25146:35;;24881:306;;;;;:::o

Swarm Source

ipfs://c462c2205b5d8620f178a44748315c153ee0d78ab5e978f30ea9bcda66604e5e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.