ETH Price: $3,475.42 (-1.69%)
Gas: 4 Gwei

Token

Saitameow (SAITAMEOW)
 

Overview

Max Total Supply

1,000,000,000,000 SAITAMEOW

Holders

103

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
475,138,446.069072555152246674 SAITAMEOW

Value
$0.00
0x081e73978fd69039286af1185ff7c6b388e80791
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:
SaitameowToken

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

//                                .+z}'
//                              ,fXEXk}
//                ^!~'  ,<nwU6EzNaPDRRE`
//               ~kkXw\SRR%gW888NNWDqbs
//               ,wRh7DDdRR%%DqKKdRgWy'
//                *X|qPXqDDRRR%%%%%%%%L`
//                 'YKDDDDDDDDDdUA6KRRd`
//                  oDDAXq6DUDbg@@m@6DD~
//                  7D6Q@XNASUDKQ@RWqDK;
//                  ~bUQQBgAd}DDDDqxts}'
//                   zofuAddd~;jKDdwzii
//                   .|7JXqK}}=ozbdwoP;  `'.`
//                    '*7tXUUUqqKbbddL  !*?L>!+!`
//                      ;zSwPkXUAqAt~`':++!^=?7mL`
//                        `,;^cTc7c7._,^+;;=<|<|vL`
//                           `<ykz>|;~';~~===;!<*i^
//                        `;Liubyaj!~~_,,~!;~+=+!*\'
//                      ,<?JbzPRkjJz=',,_:',_~~!+~`
//                    `+hbbXRUa5sJzT7*~,,,,~~~,`
//                    ~zKKKEhNJzzz7vi\7Jci+^|7*
//          `         :oqqXjwZc77vTccjwqbALwEamA.
//         '!;=!^^'   ,tXjvTTT7vv\7{wqbDRofjwEwhQ!
//        '!!^;^^^*'  'i\\\\zyjzt}kAqKD%%iEmahEmhQI
//        `:;;!^+!;:',,LiiTzI\zz}kAAqbRgXfywwSkwmXQq`
//          `'~~~;!!!^~||L|77y;~~~;^=?zamfjEwmPkmwK@8,
//             `.,~~~~,!~'~xjj*```,,,',:~iZmwwmhwwwN@Q,
//                   ```.`,<LL~,~;^+^;_,,=mawwwwEwwEQ@Q,
//                     '~;+<<7su5X6AqKDDUimmwwwmwwwwd@@B`
//                   `!?*?i\Lzyk6kP6qqbDDy{wwwwwwwwwmQ@@K
//                 `,i\\||\7j6APYyAAqqKbDbiwwwwwwwwwmE@@@c
//             ';*|Lv\\\\\i\Jow<c6A6EmhKKKcwEEEEwwwwwmD@@@~
//           ,*\\>Jxc\\\\\\\iL?;csyUAqqbKD7EkkkhEwwwwmf@@@K`
//  ,'     ~Lc*:`Lj\iLLii\\\\\iii7mAAAqKDRzkqXXXkEwwmwIQ@@@~`
//  iA6m5S6y+'  ~uiiL||Li\7Yz{mZ+\j6AAqKDRJqd6UUXhEwwwmk@@@j`
//   ';+<+;`    =\iL|||LzyjvxwwE*iz66AqKdRJDRqA6XkEwwwwo@@@N``
//              '|iL|||L7T\<^oXUn?ia6AqqbDqXWKqAUkPwwwm5@@@@``
//               `;*?|L*r;;+|<KKu^ifUXEUKbDaQDbq6XPEwwmE@@@@`
//                 `:~:_~~~;rL;  `*+=++=|zymQ8gRdqUXkhfN@@@Q
//                  ^o!~~~~~~!|!` :~~^+++=|yQQQQNWRDdKu@@@@h
//                `5QWR?.,~~~~;=; `~~;++++?,5QQQQQQBNdK@@@@;
//               ^qyL_    `,~~~!^  _~;r===|.  .,~;^ika@@@@d
//              '`          `~~;*` .~;^===|'        ,Q@@@Q'
//                           '~!<`  ~~!+==|,       'Q@@@Q~
//                            .'`   .~;+==<~      ,Q@@@b~
//                                   ~~^++=^`    *Q@QS_
//                                   `~~;^+|.   z6f!`
//                                    _~~r+7`
//                                    '~~!+v
//                                    `_~;^|`
//                                     `',,.



//      _______  _______  ___   _______  _______  __   __  _______  _______  _     _
//     |       ||   _   ||   | |       ||   _   ||  |_|  ||       ||       || | _ | |
//     |  _____||  |_|  ||   | |_     _||  |_|  ||       ||    ___||   _   || || || |
//     | |_____ |       ||   |   |   |  |       ||       ||   |___ |  | |  ||       |
//     |_____  ||       ||   |   |   |  |       ||       ||    ___||  |_|  ||       |
//      _____| ||   _   ||   |   |   |  |   _   || ||_|| ||   |___ |       ||   _   |
//     |_______||__| |__||___|   |___|  |__| |__||_|   |_||_______||_______||__| |__|


//   ...::: tg:  https://t.me/saitameowportal
//    ...:: twt: https://twitter.com/SaitameowToken
//     ...: web: https://saitameow.com


pragma solidity 0.8.11;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

}

interface IDexFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

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

    address payable public operationsAddress;
    address payable public devAddress;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;
    bool public limitsInEffect = true;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e12 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Saitameow";
    string private constant _symbol = "SAITAMEOW";
    uint8 private constant _decimals = 18;

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

    uint256 private _operationsFee;

    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    uint256 public _buyTaxFee = 200;
    uint256 public _buyLiquidityFee = 200;
    uint256 public _buyOperationsFee = 800;

    uint256 public _sellTaxFee = 200;
    uint256 public _sellLiquidityFee = 400;
    uint256 public _sellOperationsFee = 1200;

    mapping (address => bool) public privateSaleWallets;
    mapping (address => uint256) public nextPrivateWalletSellDate;
    uint256 public maxPrivSaleSell = 1.1 ether;

    uint256 public launchBlock = 0; // 0 means trading is not active
    uint256 private earlyBlocks;
    mapping (address => bool) public earlyBird;
    uint256 public birdsCaught;

    uint256 public _liquidityTokensToSwap;
    uint256 public _operationsTokensToSwap;

    uint256 public maxTransactionAmount;
    uint256 public maxWalletLimit;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    mapping (address => bool) public _isExcludedFromWalletLimit;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IDexRouter public dexRouter;
    address public lpPair;

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

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);

    event SetAutomatedMarketMakerPair(address pair, bool value);

    event ExcludeFromReward(address excludedAddress);

    event IncludeInReward(address includedAddress);

    event ExcludeFromFee(address excludedAddress);

    event IncludeInFee(address includedAddress);

    event SetBuyFee(uint256 operationsFee, uint256 liquidityFee, uint256 reflectFee);

    event SetSellFee(uint256 operationsFee, uint256 liquidityFee, uint256 reflectFee);

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedOperationsAddress(address operations);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBird(address bird);

    event Meow();

    event LimitsRemoved();

    event TransferDelayDisabled();

    event UpdatedPrivateMaxSell(uint256 amount);


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



    constructor() payable {
        _rOwned[address(this)] = _rTotal/100*25;
        _rOwned[0xaF9DdeA7C3CDE29Ac792CA261C5433C418300A39] = _rTotal/100*10;
        _rOwned[address(0xdead)] = _rTotal/100*50;
        _rOwned[msg.sender] = _rTotal/100*15;

        maxTransactionAmount = _tTotal * 1 / 10000;
        minimumTokensBeforeSwap = _tTotal * 50 / 100000;

        operationsAddress = payable(0x61e71f4ADAae18ebC294bfc4da47f3dd8335a343); // DEV + MARKETING OPERATIONS ADDRESS

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[0xaF9DdeA7C3CDE29Ac792CA261C5433C418300A39] = true;
        _isExcludedFromFee[0x61e71f4ADAae18ebC294bfc4da47f3dd8335a343] = true;

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(0xaF9DdeA7C3CDE29Ac792CA261C5433C418300A39, true);
        excludeFromMaxTransaction(0x61e71f4ADAae18ebC294bfc4da47f3dd8335a343, true);

        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(0xdead), true);
        excludeFromMaxWallet(0xaF9DdeA7C3CDE29Ac792CA261C5433C418300A39, true);
        excludeFromMaxWallet(0x61e71f4ADAae18ebC294bfc4da47f3dd8335a343, true);

        excludeFromReward(msg.sender);

        emit Transfer(address(0), address(this), _tTotal/100*25);
        emit Transfer(address(0), address(0xaF9DdeA7C3CDE29Ac792CA261C5433C418300A39), _tTotal/100*10);
        emit Transfer(address(0), address(0xdead), _tTotal/1000*50);
        emit Transfer(address(0), address(msg.sender), _tTotal/100*15);
    }

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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 isExcludedFromReward(address account)
        external
        view
        returns (bool)
    {
        return _isExcluded[account];
    }

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

    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit LimitsRemoved();
    }

    // disable Transfer delay
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit TransferDelayDisabled();
    }

    function _caughtEarlyBird(address wallet, bool value) internal {
        earlyBird[wallet] = value;
    }

    function addEarlyBird(address wallet) external onlyOwner() {
        require(!earlyBird[wallet], "The bird is the word.");
        require(wallet != lpPair, "This is the Uniswap pair silly");
        _caughtEarlyBird(wallet, true);
    }

    function reviveEarlyBird(address wallet) external onlyOwner {
        require(earlyBird[wallet], "Early bird caught the worm!");
        _caughtEarlyBird(wallet, false);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function excludeFromMaxWallet(address updAds, bool isEx) public onlyOwner {
        _isExcludedFromWalletLimit[updAds] = isEx;
    }

    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function setPrivateSaleMaxSell(uint256 amount) external onlyOwner{
        require(amount >= 25 && amount <= 500, "Must set between 0.25 and 50 ETH");
        maxPrivSaleSell = amount * 1e16;
        emit UpdatedPrivateMaxSell(amount);
    }

     // change the minimum amount of tokens to sell from fees
    function updateMinimumTokensBeforeSwap(uint256 newAmount) external onlyOwner{
  	    require(newAmount >= _tTotal * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= _tTotal * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    minimumTokensBeforeSwap = newAmount;
  	}

    function updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(newNum >= (_tTotal * 2 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.2%");
        maxTransactionAmount = newNum * (1e18);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (_tTotal * 1 / 1000)/1e18, "Cannot set maxWalletLimit lower than 1%");
        maxWalletLimit = newNum * (1e18);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        _isExcludedFromWalletLimit[pair] = value;
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
    }

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

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

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

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");


        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }

        if(privateSaleWallets[from]){
            if(automatedMarketMakerPairs[to]){
                require(amount <= getPrivateSaleMaxSell(), "Attempting to sell over max sell amount.  Check max.");
            } else if(!_isExcludedFromFee[to]){
                revert("Private sale cannot transfer and must sell only or transfer to a whitelisted address.");
            }
        }


        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapAndLiquify
            ){

                // buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                }
                // sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

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

        removeAllFee();
        buyOrSellSwitch = TRANSFER;

        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {

          require(!earlyBird[from] || to == owner() || to == address(0xdead), "Birds cannot transfer tokens in or out except to owner or dead address.");
          require(balanceOf(to) + amount <= maxWalletLimit || _isExcludedFromWalletLimit[to], "Transfer will exceed wallet limit");

            // Buy
            if (automatedMarketMakerPairs[from]) {

              // Early birds catch the worm!
              if (block.number < launchBlock + earlyBlocks) {
                  _caughtEarlyBird(to, true);
                  birdsCaught += 1;
                  emit CaughtEarlyBird(to);

                  _taxFee = _buyTaxFee;
                  _liquidityFee = _buyLiquidityFee + _buyOperationsFee;

                  if(_liquidityFee > 0){
                      buyOrSellSwitch = BUY;
                    }

              } else {
                  _taxFee = _buyTaxFee;
                  _liquidityFee = _buyLiquidityFee + _buyOperationsFee;
                  if(_liquidityFee > 0){
                    buyOrSellSwitch = BUY;
                  }
              }
            }
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = SELL;
                }
            }
        }

        _tokenTransfer(from, to, amount);
        restoreAllFee();

    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _operationsTokensToSwap;
        bool success;

        // prevent overly large contract sells.
        if(contractBalance >= minimumTokensBeforeSwap * 20){
            contractBalance = minimumTokensBeforeSwap * 20;
        }

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = contractBalance * _liquidityTokensToSwap / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance-(tokensForLiquidity);

        swapTokensForETH(amountToSwapForETH);

        uint256 ethBalance = address(this).balance;

        uint256 ethForOperations = ethBalance* (_operationsTokensToSwap) / (totalTokensToSwap - (_liquidityTokensToSwap/2));

        uint256 ethForLiquidity = ethBalance - ethForOperations;

        _liquidityTokensToSwap = 0;
        _operationsTokensToSwap = 0;

        if(tokensForLiquidity > 0 && ethForLiquidity > 0){
            addLiquidity(tokensForLiquidity, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }

        // send remainder to operations
        (success,) = address(operationsAddress).call{value: address(this).balance}("");
    }

    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= minimumTokensBeforeSwap, "Can only swap back if above the threshold.");
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function getPrivateSaleMaxSell() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(maxPrivSaleSell, path);
        return amounts[1] + (amounts[1] * (_sellTaxFee + _sellLiquidityFee + _sellOperationsFee))/10000;
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

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

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

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

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

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

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

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal-(rFee);
        _tFeeTotal = _tFeeTotal+(tFee);
    }

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

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

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

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

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

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _operationsTokensToSwap += tLiquidity * _buyOperationsFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _operationsTokensToSwap += tLiquidity * _sellOperationsFee / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity * (currentRate);
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * _taxFee / 10000;
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount * _liquidityFee / 10000;
    }

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

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

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

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

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

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

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyOperationsFee)
        external
        onlyOwner
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyOperationsFee = buyOperationsFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyOperationsFee <= 1500, "Must keep buy taxes below 15%");
        emit SetBuyFee(buyOperationsFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellOperationsFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellOperationsFee = sellOperationsFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellOperationsFee <= 2000, "Must keep sell taxes below 20%");
        emit SetSellFee(sellOperationsFee, sellLiquidityFee, sellTaxFee);
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        _isExcludedFromFee[operationsAddress] = false;
        operationsAddress = payable(_operationsAddress);
        _isExcludedFromFee[operationsAddress] = true;
        emit UpdatedOperationsAddress(_operationsAddress);
    }

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


    receive() external payable {}

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

    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function meow(address[] memory wallets, uint256[] memory amountsInTokens, uint256 penaltyBlocks) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot re-meow.");
        require(penaltyBlocks < 10, "Cannot make penalty blocks more than 10");

        removeAllFee();
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 100, "Can only airdrop 100 wallets per txn due to gas limits");
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            privateSaleWallets[wallet] = true;
            uint256 amount = amountsInTokens[i];
            _transfer(msg.sender, wallet, amount);
        }

        maxTransactionAmount = _tTotal * 30 / 10000;
        maxWalletLimit =  _tTotal * 120 / 10000;

        tradingActive = true;
        swapAndLiquifyEnabled = true;
        launchBlock = block.number;
        earlyBlocks = penaltyBlocks;
        emit Meow();

        // initialize router
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        excludeFromMaxTransaction(address(lpPair), true);
        excludeFromMaxWallet(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        // add the liquidity

        require(address(this).balance > 0, "Must have meow ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have meow Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
        restoreAllFee();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"bird","type":"address"}],"name":"CaughtEarlyBird","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[],"name":"Meow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"operationsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"operationsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"TransferDelayDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operations","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operationsTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"addEarlyBird","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"birdsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"earlyBird","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPrivateSaleMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPrivSaleSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"uint256","name":"penaltyBlocks","type":"uint256"}],"name":"meow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextPrivateWalletSellDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateSaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"reviveEarlyBird","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyOperationsFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPrivateSaleMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellOperationsFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526008805461ffff19166101001790556200002e6c0c9f2c9cd04674edea4000000060001962000af6565b6200003c9060001962000b23565b600c55600e54600f5560115460125560c8601481905560158190556103206016556017556101906018556104b0601955670f43fc2c04ee0000601c556000601d819055602a805461ffff60a81b1916905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506064600c54620000dd919062000b3d565b620000ea90601962000b54565b30600090815260046020526040902055600c546200010b9060649062000b3d565b6200011890600a62000b54565b73af9ddea7c3cde29ac792ca261c5433c418300a3960005260046020527f714aa0cb862cf521f0d6d69a2689e3867e0db3a337646e02c0fb4f8aa41dae4855600c54620001689060649062000b3d565b6200017590603262000b54565b61dead60005260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd55600c54620001b39060649062000b3d565b620001c090600f62000b54565b33600090815260046020526040902055612710620001ed6c0c9f2c9cd04674edea40000000600162000b54565b620001f9919062000b3d565b602355620186a06200021a6c0c9f2c9cd04674edea40000000603262000b54565b62000226919062000b3d565b602855600280546001600160a01b0319167361e71f4adaae18ebc294bfc4da47f3dd8335a343179055600160096000620002686000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600990925281208054831660019081179091557fb4a8f8024cbb0dafff95e84d697cc332bd1945961d91c71fc3ba58a32dde4b1980548416821790557361e71f4adaae18ebc294bfc4da47f3dd8335a3439091527f7bc83fe9bdbf2304ff83c2db2ea58998f2c753fb8ff87907ad5e5a1443f50af68054909216179055620003336200032b6000546001600160a01b031690565b600162000562565b6200034030600162000562565b6200034f61dead600162000562565b6200037073af9ddea7c3cde29ac792ca261c5433c418300a39600162000562565b620003917361e71f4adaae18ebc294bfc4da47f3dd8335a343600162000562565b620003b0620003a86000546001600160a01b031690565b6001620005dc565b620003bd306001620005dc565b620003cc61dead6001620005dc565b620003ed73af9ddea7c3cde29ac792ca261c5433c418300a396001620005dc565b6200040e7361e71f4adaae18ebc294bfc4da47f3dd8335a3436001620005dc565b620004193362000652565b3060006000805160206200561c8339815191526200044660646c0c9f2c9cd04674edea4000000062000b3d565b6200045390601962000b54565b60405190815260200160405180910390a373af9ddea7c3cde29ac792ca261c5433c418300a3960006000805160206200561c833981519152620004a560646c0c9f2c9cd04674edea4000000062000b3d565b620004b290600a62000b54565b60405190815260200160405180910390a361dead60006000805160206200561c833981519152620004f36103e86c0c9f2c9cd04674edea4000000062000b3d565b6200050090603262000b54565b60405190815260200160405180910390a33360006000805160206200561c8339815191526200053e60646c0c9f2c9cd04674edea4000000062000b3d565b6200054b90600f62000b54565b60405190815260200160405180910390a362000bc5565b6000546001600160a01b03163314620005b15760405162461bcd60e51b81526020600482018190526024820152600080516020620055fc83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620006275760405162461bcd60e51b81526020600482018190526024820152600080516020620055fc8339815191526044820152606401620005a8565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146200069d5760405162461bcd60e51b81526020600482018190526024820152600080516020620055fc8339815191526044820152606401620005a8565b6001600160a01b0381166000908152600a602052604090205460ff1615620007085760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620005a8565b600b546032906200071b90600162000b76565b1115620007a75760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401620005a8565b6001600160a01b0381166000908152600460205260409020541562000804576001600160a01b038116600090815260046020526040902054620007ea906200086a565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000600c54821115620008d35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620005a8565b6000620008df620008f4565b9050620008ed818462000b3d565b9392505050565b60008080620009026200091a565b909250905062000913818362000b3d565b9250505090565b600c5460009081906c0c9f2c9cd04674edea40000000825b600b5481101562000a97578260046000600b848154811062000958576200095862000b91565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620009c757508160056000600b8481548110620009a057620009a062000b91565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620009e8575050600c54936c0c9f2c9cd04674edea400000009350915050565b60046000600b838154811062000a025762000a0262000b91565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000a33908462000b23565b925060056000600b838154811062000a4f5762000a4f62000b91565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000a80908362000b23565b91508062000a8e8162000ba7565b91505062000932565b506c0c9f2c9cd04674edea40000000600c5462000ab5919062000b3d565b82101562000ad7575050600c54926c0c9f2c9cd04674edea4000000092509050565b90939092509050565b634e487b7160e01b600052601260045260246000fd5b60008262000b085762000b0862000ae0565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000b385762000b3862000b0d565b500390565b60008262000b4f5762000b4f62000ae0565b500490565b600081600019048311821515161562000b715762000b7162000b0d565b500290565b6000821982111562000b8c5762000b8c62000b0d565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bbe5762000bbe62000b0d565b5060010190565b614a278062000bd56000396000f3fe60806040526004361061041f5760003560e01c806370a082311161021e578063bbc0c74211610123578063e82a416d116100ab578063ea4cfe121161007a578063ea4cfe1214610ccc578063efcc52de14610cec578063f2fde38b14610d02578063f5648a4f14610d22578063f58810a814610d3757600080fd5b8063e82a416d14610c61578063e884f26014610c77578063ea20df0d14610c8c578063ea2f0b3714610cac57600080fd5b8063c8c8ebe4116100f2578063c8c8ebe414610bb9578063d00efb2f14610bcf578063d2fcc00114610be5578063dc44b6a014610c05578063dd62ed3e14610c1b57600080fd5b8063bbc0c74214610b2e578063bea8525214610b4f578063c49b9a8014610b7f578063c876d0b914610b9f57600080fd5b80638da5cb5b116101a6578063a457c2d711610175578063a457c2d714610a78578063a9059cbb14610a98578063acee28d114610ab8578063afd6ce6114610ace578063b62496f514610afe57600080fd5b80638da5cb5b146109f357806395d89b4114610a115780639a7a23d614610a43578063a073d37f14610a6357600080fd5b80637571336a116101ed5780637571336a1461094e5780638366e79a1461096e57806388790a681461098e57806388f82020146109a45780638a761b9e146109dd57600080fd5b806370a08231146108ef578063713d09741461090f578063715018a614610924578063751039fc1461093957600080fd5b806339509351116103245780634a62bb65116102ac57806352390c021161027b57806352390c02146108405780635342acb414610860578063557ed1ba146108995780635c3352d3146108ac57806366a88d96146108d957600080fd5b80634a62bb65146107bb5780634a74bb02146107da5780634d335508146107fb57806351f205e41461082b57600080fd5b8063416381ea116102f3578063416381ea14610725578063437823ec1461073b578063452ed4f11461075b5780634549b0391461077b578063499b83941461079b57600080fd5b806339509351146106af5780633a594bd6146106cf5780633ad10ef6146106ef5780634047ea3e1461070f57600080fd5b80631c499ab0116103a757806323b872dd1161037657806323b872dd1461061357806325519cf2146106335780632d83811914610653578063313ce567146106735780633685d4191461068f57600080fd5b80631c499ab0146105a75780631c68372d146105c75780631d865c30146105dd578063200a692d146105fd57600080fd5b8063095ea7b3116103ee578063095ea7b3146104e957806310d5de531461051957806313114a9d1461054957806318160ddd1461056857806318e1c1231461058757600080fd5b80630517d13d1461042b57806306fdde031461044d5780630758d9241461049157806308043751146104c957600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044b610446366004614370565b610d57565b005b34801561045957600080fd5b5060408051808201909152600981526853616974616d656f7760b81b60208201525b6040516104889190614389565b60405180910390f35b34801561049d57600080fd5b506029546104b1906001600160a01b031681565b6040516001600160a01b039091168152602001610488565b3480156104d557600080fd5b5061044b6104e4366004614370565b610e40565b3480156104f557600080fd5b506105096105043660046143f3565b610f91565b6040519015158152602001610488565b34801561052557600080fd5b5061050961053436600461441f565b60256020526000908152604090205460ff1681565b34801561055557600080fd5b50600d545b604051908152602001610488565b34801561057457600080fd5b5068327cb2734119d3b7a9601e1b61055a565b34801561059357600080fd5b5061044b6105a2366004614370565b610fa8565b3480156105b357600080fd5b5061044b6105c2366004614370565b61107c565b3480156105d357600080fd5b5061055a60195481565b3480156105e957600080fd5b5061044b6105f836600461443c565b611154565b34801561060957600080fd5b5061055a60175481565b34801561061f57600080fd5b5061050961062e366004614468565b61123a565b34801561063f57600080fd5b5061044b61064e36600461443c565b6112e4565b34801561065f57600080fd5b5061055a61066e366004614370565b6113c1565b34801561067f57600080fd5b5060405160128152602001610488565b34801561069b57600080fd5b5061044b6106aa36600461441f565b611445565b3480156106bb57600080fd5b506105096106ca3660046143f3565b6115fc565b3480156106db57600080fd5b5061044b6106ea36600461441f565b611638565b3480156106fb57600080fd5b506003546104b1906001600160a01b031681565b34801561071b57600080fd5b5061055a60215481565b34801561073157600080fd5b5061055a60225481565b34801561074757600080fd5b5061044b61075636600461441f565b61172f565b34801561076757600080fd5b50602a546104b1906001600160a01b031681565b34801561078757600080fd5b5061055a6107963660046144b7565b6117ad565b3480156107a757600080fd5b5061044b6107b636600461441f565b611844565b3480156107c757600080fd5b5060085461050990610100900460ff1681565b3480156107e657600080fd5b50602a5461050990600160a81b900460ff1681565b34801561080757600080fd5b5061050961081636600461441f565b601f6020526000908152604090205460ff1681565b34801561083757600080fd5b5061044b611951565b34801561084c57600080fd5b5061044b61085b36600461441f565b611a25565b34801561086c57600080fd5b5061050961087b36600461441f565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156108a557600080fd5b504261055a565b3480156108b857600080fd5b5061055a6108c736600461441f565b601b6020526000908152604090205481565b3480156108e557600080fd5b5061055a60245481565b3480156108fb57600080fd5b5061055a61090a36600461441f565b611c13565b34801561091b57600080fd5b5061055a611c72565b34801561093057600080fd5b5061044b611e7c565b34801561094557600080fd5b5061044b611ef0565b34801561095a57600080fd5b5061044b6109693660046144e7565b611f50565b34801561097a57600080fd5b50610509610989366004614515565b611fa5565b34801561099a57600080fd5b5061055a60185481565b3480156109b057600080fd5b506105096109bf36600461441f565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156109e957600080fd5b5061055a60205481565b3480156109ff57600080fd5b506000546001600160a01b03166104b1565b348015610a1d57600080fd5b5060408051808201909152600981526853414954414d454f5760b81b602082015261047b565b348015610a4f57600080fd5b5061044b610a5e3660046144e7565b6121ad565b348015610a6f57600080fd5b5060285461055a565b348015610a8457600080fd5b50610509610a933660046143f3565b612265565b348015610aa457600080fd5b50610509610ab33660046143f3565b6122fe565b348015610ac457600080fd5b5061055a601c5481565b348015610ada57600080fd5b50610509610ae936600461441f565b601a6020526000908152604090205460ff1681565b348015610b0a57600080fd5b50610509610b1936600461441f565b60276020526000908152604090205460ff1681565b348015610b3a57600080fd5b50602a5461050990600160b01b900460ff1681565b348015610b5b57600080fd5b50610509610b6a36600461441f565b60266020526000908152604090205460ff1681565b348015610b8b57600080fd5b5061044b610b9a366004614543565b61230b565b348015610bab57600080fd5b506008546105099060ff1681565b348015610bc557600080fd5b5061055a60235481565b348015610bdb57600080fd5b5061055a601d5481565b348015610bf157600080fd5b5061044b610c003660046144e7565b612382565b348015610c1157600080fd5b5061055a60155481565b348015610c2757600080fd5b5061055a610c36366004614515565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c6d57600080fd5b5061055a60165481565b348015610c8357600080fd5b5061044b6123d7565b348015610c9857600080fd5b5061044b610ca736600461441f565b612436565b348015610cb857600080fd5b5061044b610cc736600461441f565b6124d3565b348015610cd857600080fd5b506002546104b1906001600160a01b031681565b348015610cf857600080fd5b5061055a60145481565b348015610d0e57600080fd5b5061044b610d1d36600461441f565b61254e565b348015610d2e57600080fd5b5061044b612638565b348015610d4357600080fd5b5061044b610d52366004614636565b6126af565b6000546001600160a01b03163314610d8a5760405162461bcd60e51b8152600401610d8190614701565b60405180910390fd5b670de0b6b3a76400006103e8610dad68327cb2734119d3b7a9601e1b600261474c565b610db7919061476b565b610dc1919061476b565b811015610e285760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e322560881b6064820152608401610d81565b610e3a81670de0b6b3a764000061474c565b60235550565b6000546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610d8190614701565b620186a0610e8568327cb2734119d3b7a9601e1b600161474c565b610e8f919061476b565b811015610efc5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d81565b6103e8610f1668327cb2734119d3b7a9601e1b600561474c565b610f20919061476b565b811115610f8c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d81565b602855565b6000610f9e338484612cd9565b5060015b92915050565b6000546001600160a01b03163314610fd25760405162461bcd60e51b8152600401610d8190614701565b60198110158015610fe557506101f48111155b6110315760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e323520616e64203530204554486044820152606401610d81565b61104281662386f26fc1000061474c565b601c556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6000546001600160a01b031633146110a65760405162461bcd60e51b8152600401610d8190614701565b670de0b6b3a76400006103e86110c968327cb2734119d3b7a9601e1b600161474c565b6110d3919061476b565b6110dd919061476b565b81101561113c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617857616c6c65744c696d6974206c6f776572206044820152667468616e20312560c81b6064820152608401610d81565b61114e81670de0b6b3a764000061474c565b60245550565b6000546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610d8190614701565b6017839055601882905560198190556107d08161119b848661478d565b6111a5919061478d565b11156111f35760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610d81565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000611247848484612dfd565b6001600160a01b0384166000908152600660209081526040808320338452909152902054828110156112cc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d81565b6112d98533858403612cd9565b506001949350505050565b6000546001600160a01b0316331461130e5760405162461bcd60e51b8152600401610d8190614701565b6014839055601582905560168190556105dc8161132b848661478d565b611335919061478d565b11156113835760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610d81565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a7736209060600161122d565b6000600c548211156114285760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d81565b60006114326136ed565b905061143e818461476b565b9392505050565b6000546001600160a01b0316331461146f5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166000908152600a602052604090205460ff166114d75760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d81565b60005b600b548110156115f857816001600160a01b0316600b8281548110611501576115016147a5565b6000918252602090912001546001600160a01b031614156115e657600b805461152c906001906147bb565b8154811061153c5761153c6147a5565b600091825260209091200154600b80546001600160a01b039092169183908110611568576115686147a5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b8054806115c0576115c06147d2565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806115f0816147e8565b9150506114da565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610f9e91859061163390869061478d565b612cd9565b6000546001600160a01b031633146116625760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166000908152601f602052604090205460ff16156116c35760405162461bcd60e51b81526020600482015260156024820152742a3432903134b9321034b9903a3432903bb7b9321760591b6044820152606401610d81565b602a546001600160a01b03828116911614156117215760405162461bcd60e51b815260206004820152601e60248201527f546869732069732074686520556e697377617020706169722073696c6c7900006044820152606401610d81565b61172c816001613709565b50565b6000546001600160a01b031633146117595760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b629101611071565b600068327cb2734119d3b7a9601e1b83111561180b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d81565b8161182a57600061181b84613734565b50939550610fa2945050505050565b600061183584613734565b50929550610fa2945050505050565b6000546001600160a01b0316331461186e5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166118d35760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d81565b600280546001600160a01b039081166000908152600960209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d29829101611071565b6000546001600160a01b0316331461197b5760405162461bcd60e51b8152600401610d8190614701565b600061198630611c13565b90506028548110156119ed5760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610d81565b6119f5613783565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611071565b6000546001600160a01b03163314611a4f5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166000908152600a602052604090205460ff1615611ab85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d81565b600b54603290611ac990600161478d565b1115611b535760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d81565b6001600160a01b03811660009081526004602052604090205415611bad576001600160a01b038116600090815260046020526040902054611b93906113c1565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6001600160a01b0381166000908152600a602052604081205460ff1615611c5057506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610fa2906113c1565b604080516002808252606082018352600092839291906020830190803683375050602954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d049190614803565b81600081518110611d1757611d176147a5565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611d4b57611d4b6147a5565b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050602954601c5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611dba918690600401614864565b600060405180830381865afa158015611dd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dff9190810190614885565b9050612710601954601854601754611e17919061478d565b611e21919061478d565b82600181518110611e3457611e346147a5565b6020026020010151611e46919061474c565b611e50919061476b565b81600181518110611e6357611e636147a5565b6020026020010151611e75919061478d565b9250505090565b6000546001600160a01b03163314611ea65760405162461bcd60e51b8152600401610d8190614701565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611f1a5760405162461bcd60e51b8152600401610d8190614701565b6008805461ffff191690556040517f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef90600090a1565b6000546001600160a01b03163314611f7a5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611fd05760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0383166120265760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d81565b6001600160a01b03831630141561207f5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d81565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190614916565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561213d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612161919061492f565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b031633146121d75760405162461bcd60e51b8152600401610d8190614701565b602a546001600160a01b038381169116141561225b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d81565b6115f88282613953565b3360009081526006602090815260408083206001600160a01b0386168452909152812054828110156122e75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d81565b6122f43385858403612cd9565b5060019392505050565b6000610f9e338484612dfd565b6000546001600160a01b031633146123355760405162461bcd60e51b8152600401610d8190614701565b602a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061107190831515815260200190565b6000546001600160a01b031633146123ac5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146124015760405162461bcd60e51b8152600401610d8190614701565b6008805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b031633146124605760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166000908152601f602052604090205460ff166124c85760405162461bcd60e51b815260206004820152601b60248201527f4561726c792062697264206361756768742074686520776f726d2100000000006044820152606401610d81565b61172c816000613709565b6000546001600160a01b031633146124fd5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611071565b6000546001600160a01b031633146125785760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166125dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d81565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146126625760405162461bcd60e51b8152600401610d8190614701565b604051600090339047908381818185875af1925050503d80600081146126a4576040519150601f19603f3d011682016040523d82523d6000602084013e6126a9565b606091505b50505050565b6000546001600160a01b031633146126d95760405162461bcd60e51b8152600401610d8190614701565b602a54600160b01b900460ff16156127465760405162461bcd60e51b815260206004820152602a60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f6044820152693a10393296b6b2b7bb9760b11b6064820152608401610d81565b600a81106127a65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610d81565b6127ae6139bd565b81518351146127ff5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d81565b606483511061286f5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d81565b60005b83518110156128ff57600084828151811061288f5761288f6147a5565b6020908102919091018101516001600160a01b0381166000908152601a90925260408220805460ff1916600117905585519092508590849081106128d5576128d56147a5565b602002602001015190506128ea338383612dfd565b505080806128f7906147e8565b915050612872565b5061271061291a68327cb2734119d3b7a9601e1b601e61474c565b612924919061476b565b60235561271061294168327cb2734119d3b7a9601e1b607861474c565b61294b919061476b565b602455602a805461ffff60a81b191661010160a81b17905543601d55601e8190556040517fb6b86a349e22595b44335d0fc1c65db0f519c9cb569a47137a882ffdc863ec6490600090a1602980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa1580156129fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1e9190614803565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8f9190614803565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b009190614803565b602a80546001600160a01b0319166001600160a01b03929092169182179055612b2a906001611f50565b602a54612b41906001600160a01b03166001612382565b602a54612b58906001600160a01b03166001613953565b60004711612bb95760405162461bcd60e51b815260206004820152602860248201527f4d7573742068617665206d656f7720455448206f6e20636f6e747261637420746044820152670de40d8c2eadcc6d60c31b6064820152608401610d81565b6000612bc430611c13565b11612c255760405162461bcd60e51b815260206004820152602b60248201527f4d7573742068617665206d656f7720546f6b656e73206f6e20636f6e7472616360448201526a0e840e8de40d8c2eadcc6d60ab1b6064820152608401610d81565b602954612c409030906001600160a01b031661163382611c13565b6029546001600160a01b031663f305d7194730612c5c81611c13565b60008033426040518863ffffffff1660e01b8152600401612c829695949392919061494c565b60606040518083038185885af1158015612ca0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612cc59190614987565b5050506126a9600f54600e55601254601155565b6001600160a01b038316612d3b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d81565b6001600160a01b038216612d9c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d81565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612e615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d81565b6001600160a01b038216612ec35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d81565b60008111612f255760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d81565b602a54600160b01b900460ff16612fc1576001600160a01b03831660009081526009602052604090205460ff1680612f7557506001600160a01b03821660009081526009602052604090205460ff165b612fc15760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d81565b6001600160a01b0383166000908152601a602052604090205460ff1615613128576001600160a01b03821660009081526027602052604090205460ff161561307c5761300b611c72565b8111156130775760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610d81565b613128565b6001600160a01b03821660009081526009602052604090205460ff166131285760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610d81565b600854610100900460ff161561331c576000546001600160a01b0384811691161480159061316457506000546001600160a01b03838116911614155b801561317857506001600160a01b03821615155b801561318f57506001600160a01b03821661dead14155b80156131a55750602a54600160a01b900460ff16155b1561331c576001600160a01b03831660009081526027602052604090205460ff1680156131eb57506001600160a01b03821660009081526025602052604090205460ff16155b15613265576023548111156132605760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610d81565b61331c565b6001600160a01b03821660009081526027602052604090205460ff1680156132a657506001600160a01b03831660009081526025602052604090205460ff16155b1561331c5760235481111561331c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610d81565b600061332730611c13565b602854602a5491925082101590600160a01b900460ff161580156133545750602a54600160a81b900460ff165b80156133755750602a54600090613373906001600160a01b0316611c13565b115b801561339a57506001600160a01b03841660009081526009602052604090205460ff16155b80156133bf57506001600160a01b03851660009081526009602052604090205460ff16155b80156133e357506001600160a01b03841660009081526027602052604090205460ff165b80156133ec5750805b156133f9576133f9613783565b6134016139bd565b60036013556001600160a01b03851660009081526009602052604090205460ff1615801561344857506001600160a01b03841660009081526009602052604090205460ff16155b156136ca576001600160a01b0385166000908152601f602052604090205460ff16158061348257506000546001600160a01b038581169116145b8061349757506001600160a01b03841661dead145b6135195760405162461bcd60e51b815260206004820152604760248201527f42697264732063616e6e6f74207472616e7366657220746f6b656e7320696e2060448201527f6f72206f75742065786365707420746f206f776e6572206f722064656164206160648201526632323932b9b99760c91b608482015260a401610d81565b6024548361352686611c13565b613530919061478d565b11158061355557506001600160a01b03841660009081526026602052604090205460ff165b6135ab5760405162461bcd60e51b815260206004820152602160248201527f5472616e736665722077696c6c206578636565642077616c6c6574206c696d696044820152601d60fa1b6064820152608401610d81565b6001600160a01b03851660009081526027602052604090205460ff161561368357601e54601d546135dc919061478d565b43101561366d576135ee846001613709565b600160206000828254613601919061478d565b90915550506040516001600160a01b03851681527fd5ae31334b29400e95a2fdf23ded3e729c545561b2882f142d9250fae48eda049060200160405180910390a1601454600e55601654601554613658919061478d565b6011819055156136685760016013555b6136ca565b601454600e55601654601554613658919061478d565b6001600160a01b03841660009081526027602052604090205460ff16156136ca57601754600e556019546018546136ba919061478d565b6011819055156136ca5760026013555b6136d58585856139eb565b6136e6600f54600e55601254601155565b5050505050565b60008060006136fa613aed565b9092509050611e75818361476b565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b600080600080600080600080600061374b8a613c96565b92509250925060008060006137698d86866137646136ed565b613cd9565b919f909e50909c50959a5093985091965092945050505050565b602a805460ff60a01b1916600160a01b17905560006137a130611c13565b905060006022546021546137b5919061478d565b9050600060285460146137c8919061474c565b83106137df576028546137dc90601461474c565b92505b8215806137ea575081155b156137f757505050613944565b60006002836021548661380a919061474c565b613814919061476b565b61381e919061476b565b9050600061382c82866147bb565b905061383781613d30565b602154479060009061384b9060029061476b565b61385590876147bb565b602254613862908461474c565b61386c919061476b565b9050600061387a82846147bb565b60006021819055602255905084158015906138955750600081115b156138e6576138a48582613e8a565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613933576040519150601f19603f3d011682016040523d82523d6000602084013e613938565b606091505b50505050505050505050505b602a805460ff60a01b19169055565b6001600160a01b038216600090815260276020908152604080832080548515801560ff19928316811790935560258552838620805483168417905560269094529190932080549091169092179091556139af576139af82611a25565b806115f8576115f882611445565b600e541580156139cd5750601154155b156139d457565b600e8054600f556011805460125560009182905555565b6001600160a01b0383166000908152600a602052604090205460ff168015613a2c57506001600160a01b0382166000908152600a602052604090205460ff16155b15613a4157613a3c838383613f24565b505050565b6001600160a01b0383166000908152600a602052604090205460ff16158015613a8257506001600160a01b0382166000908152600a602052604090205460ff165b15613a9257613a3c83838361404d565b6001600160a01b0383166000908152600a602052604090205460ff168015613ad257506001600160a01b0382166000908152600a602052604090205460ff165b15613ae257613a3c8383836140f9565b613a3c83838361416e565b600c54600090819068327cb2734119d3b7a9601e1b825b600b54811015613c52578260046000600b8481548110613b2657613b266147a5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613b9157508160056000600b8481548110613b6a57613b6a6147a5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613bb0575050600c549368327cb2734119d3b7a9601e1b9350915050565b60046000600b8381548110613bc757613bc76147a5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613bf690846147bb565b925060056000600b8381548110613c0f57613c0f6147a5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c3e90836147bb565b915080613c4a816147e8565b915050613b04565b5068327cb2734119d3b7a9601e1b600c54613c6d919061476b565b821015613c8d575050600c549268327cb2734119d3b7a9601e1b92509050565b90939092509050565b600080600080613ca5856141b3565b90506000613cb2866141d0565b9050600081613cc184896147bb565b613ccb91906147bb565b979296509094509092505050565b6000808080613ce8858961474c565b90506000613cf6868961474c565b90506000613d04878961474c565b9050600081613d1384866147bb565b613d1d91906147bb565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d6557613d656147a5565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de29190614803565b81600181518110613df557613df56147a5565b6001600160a01b039283166020918202929092010152602954613e1b9130911684612cd9565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e549085906000908690309042906004016149b5565b600060405180830381600087803b158015613e6e57600080fd5b505af1158015613e82573d6000803e3d6000fd5b505050505050565b602954613ea29030906001600160a01b031684612cd9565b60295460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613ee19030908790600090819061dead90429060040161494c565b60606040518083038185885af1158015613eff573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136e69190614987565b600080600080600080613f3687613734565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613f699088906147bb565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613f999087906147bb565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613fc990869061478d565b6001600160a01b038916600090815260046020526040902055613feb816141e3565b613ff5848361434a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161403a91815260200190565b60405180910390a3505050505050505050565b60008060008060008061405f87613734565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506140929087906147bb565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546140c990849061478d565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613fc990869061478d565b60008060008060008061410b87613734565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061413e9088906147bb565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546140929087906147bb565b60008060008060008061418087613734565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613f999087906147bb565b6000612710600e54836141c6919061474c565b610fa2919061476b565b6000612710601154836141c6919061474c565b60016013541415614254576011546015546141fe908361474c565b614208919061476b565b60216000828254614219919061478d565b909155505060115460165461422e908361474c565b614238919061476b565b60226000828254614249919061478d565b909155506142c09050565b600260135414156142c05760115460185461426f908361474c565b614279919061476b565b6021600082825461428a919061478d565b909155505060115460195461429f908361474c565b6142a9919061476b565b602260008282546142ba919061478d565b90915550505b60006142ca6136ed565b905060006142d8828461474c565b306000908152600460205260409020549091506142f690829061478d565b30600090815260046020908152604080832093909355600a9052205460ff1615613a3c573060009081526005602052604090205461433590849061478d565b30600090815260056020526040902055505050565b81600c5461435891906147bb565b600c55600d5461436990829061478d565b600d555050565b60006020828403121561438257600080fd5b5035919050565b600060208083528351808285015260005b818110156143b65785810183015185820160400152820161439a565b818111156143c8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461172c57600080fd5b6000806040838503121561440657600080fd5b8235614411816143de565b946020939093013593505050565b60006020828403121561443157600080fd5b813561143e816143de565b60008060006060848603121561445157600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561447d57600080fd5b8335614488816143de565b92506020840135614498816143de565b929592945050506040919091013590565b801515811461172c57600080fd5b600080604083850312156144ca57600080fd5b8235915060208301356144dc816144a9565b809150509250929050565b600080604083850312156144fa57600080fd5b8235614505816143de565b915060208301356144dc816144a9565b6000806040838503121561452857600080fd5b8235614533816143de565b915060208301356144dc816143de565b60006020828403121561455557600080fd5b813561143e816144a9565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561459f5761459f614560565b604052919050565b600067ffffffffffffffff8211156145c1576145c1614560565b5060051b60200190565b600082601f8301126145dc57600080fd5b813560206145f16145ec836145a7565b614576565b82815260059290921b8401810191818101908684111561461057600080fd5b8286015b8481101561462b5780358352918301918301614614565b509695505050505050565b60008060006060848603121561464b57600080fd5b833567ffffffffffffffff8082111561466357600080fd5b818601915086601f83011261467757600080fd5b813560206146876145ec836145a7565b82815260059290921b8401810191818101908a8411156146a657600080fd5b948201945b838610156146cd5785356146be816143de565b825294820194908201906146ab565b975050870135925050808211156146e357600080fd5b506146f0868287016145cb565b925050604084013590509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561476657614766614736565b500290565b60008261478857634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156147a0576147a0614736565b500190565b634e487b7160e01b600052603260045260246000fd5b6000828210156147cd576147cd614736565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156147fc576147fc614736565b5060010190565b60006020828403121561481557600080fd5b815161143e816143de565b600081518084526020808501945080840160005b838110156148595781516001600160a01b031687529582019590820190600101614834565b509495945050505050565b82815260406020820152600061487d6040830184614820565b949350505050565b6000602080838503121561489857600080fd5b825167ffffffffffffffff8111156148af57600080fd5b8301601f810185136148c057600080fd5b80516148ce6145ec826145a7565b81815260059190911b820183019083810190878311156148ed57600080fd5b928401925b8284101561490b578351825292840192908401906148f2565b979650505050505050565b60006020828403121561492857600080fd5b5051919050565b60006020828403121561494157600080fd5b815161143e816144a9565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561499c57600080fd5b8351925060208401519150604084015190509250925092565b85815284602082015260a0604082015260006149d460a0830186614820565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212206be033ff102847510f342f97a35ff75951087f84b86a52819baea72339c17c3564736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x60806040526004361061041f5760003560e01c806370a082311161021e578063bbc0c74211610123578063e82a416d116100ab578063ea4cfe121161007a578063ea4cfe1214610ccc578063efcc52de14610cec578063f2fde38b14610d02578063f5648a4f14610d22578063f58810a814610d3757600080fd5b8063e82a416d14610c61578063e884f26014610c77578063ea20df0d14610c8c578063ea2f0b3714610cac57600080fd5b8063c8c8ebe4116100f2578063c8c8ebe414610bb9578063d00efb2f14610bcf578063d2fcc00114610be5578063dc44b6a014610c05578063dd62ed3e14610c1b57600080fd5b8063bbc0c74214610b2e578063bea8525214610b4f578063c49b9a8014610b7f578063c876d0b914610b9f57600080fd5b80638da5cb5b116101a6578063a457c2d711610175578063a457c2d714610a78578063a9059cbb14610a98578063acee28d114610ab8578063afd6ce6114610ace578063b62496f514610afe57600080fd5b80638da5cb5b146109f357806395d89b4114610a115780639a7a23d614610a43578063a073d37f14610a6357600080fd5b80637571336a116101ed5780637571336a1461094e5780638366e79a1461096e57806388790a681461098e57806388f82020146109a45780638a761b9e146109dd57600080fd5b806370a08231146108ef578063713d09741461090f578063715018a614610924578063751039fc1461093957600080fd5b806339509351116103245780634a62bb65116102ac57806352390c021161027b57806352390c02146108405780635342acb414610860578063557ed1ba146108995780635c3352d3146108ac57806366a88d96146108d957600080fd5b80634a62bb65146107bb5780634a74bb02146107da5780634d335508146107fb57806351f205e41461082b57600080fd5b8063416381ea116102f3578063416381ea14610725578063437823ec1461073b578063452ed4f11461075b5780634549b0391461077b578063499b83941461079b57600080fd5b806339509351146106af5780633a594bd6146106cf5780633ad10ef6146106ef5780634047ea3e1461070f57600080fd5b80631c499ab0116103a757806323b872dd1161037657806323b872dd1461061357806325519cf2146106335780632d83811914610653578063313ce567146106735780633685d4191461068f57600080fd5b80631c499ab0146105a75780631c68372d146105c75780631d865c30146105dd578063200a692d146105fd57600080fd5b8063095ea7b3116103ee578063095ea7b3146104e957806310d5de531461051957806313114a9d1461054957806318160ddd1461056857806318e1c1231461058757600080fd5b80630517d13d1461042b57806306fdde031461044d5780630758d9241461049157806308043751146104c957600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044b610446366004614370565b610d57565b005b34801561045957600080fd5b5060408051808201909152600981526853616974616d656f7760b81b60208201525b6040516104889190614389565b60405180910390f35b34801561049d57600080fd5b506029546104b1906001600160a01b031681565b6040516001600160a01b039091168152602001610488565b3480156104d557600080fd5b5061044b6104e4366004614370565b610e40565b3480156104f557600080fd5b506105096105043660046143f3565b610f91565b6040519015158152602001610488565b34801561052557600080fd5b5061050961053436600461441f565b60256020526000908152604090205460ff1681565b34801561055557600080fd5b50600d545b604051908152602001610488565b34801561057457600080fd5b5068327cb2734119d3b7a9601e1b61055a565b34801561059357600080fd5b5061044b6105a2366004614370565b610fa8565b3480156105b357600080fd5b5061044b6105c2366004614370565b61107c565b3480156105d357600080fd5b5061055a60195481565b3480156105e957600080fd5b5061044b6105f836600461443c565b611154565b34801561060957600080fd5b5061055a60175481565b34801561061f57600080fd5b5061050961062e366004614468565b61123a565b34801561063f57600080fd5b5061044b61064e36600461443c565b6112e4565b34801561065f57600080fd5b5061055a61066e366004614370565b6113c1565b34801561067f57600080fd5b5060405160128152602001610488565b34801561069b57600080fd5b5061044b6106aa36600461441f565b611445565b3480156106bb57600080fd5b506105096106ca3660046143f3565b6115fc565b3480156106db57600080fd5b5061044b6106ea36600461441f565b611638565b3480156106fb57600080fd5b506003546104b1906001600160a01b031681565b34801561071b57600080fd5b5061055a60215481565b34801561073157600080fd5b5061055a60225481565b34801561074757600080fd5b5061044b61075636600461441f565b61172f565b34801561076757600080fd5b50602a546104b1906001600160a01b031681565b34801561078757600080fd5b5061055a6107963660046144b7565b6117ad565b3480156107a757600080fd5b5061044b6107b636600461441f565b611844565b3480156107c757600080fd5b5060085461050990610100900460ff1681565b3480156107e657600080fd5b50602a5461050990600160a81b900460ff1681565b34801561080757600080fd5b5061050961081636600461441f565b601f6020526000908152604090205460ff1681565b34801561083757600080fd5b5061044b611951565b34801561084c57600080fd5b5061044b61085b36600461441f565b611a25565b34801561086c57600080fd5b5061050961087b36600461441f565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156108a557600080fd5b504261055a565b3480156108b857600080fd5b5061055a6108c736600461441f565b601b6020526000908152604090205481565b3480156108e557600080fd5b5061055a60245481565b3480156108fb57600080fd5b5061055a61090a36600461441f565b611c13565b34801561091b57600080fd5b5061055a611c72565b34801561093057600080fd5b5061044b611e7c565b34801561094557600080fd5b5061044b611ef0565b34801561095a57600080fd5b5061044b6109693660046144e7565b611f50565b34801561097a57600080fd5b50610509610989366004614515565b611fa5565b34801561099a57600080fd5b5061055a60185481565b3480156109b057600080fd5b506105096109bf36600461441f565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156109e957600080fd5b5061055a60205481565b3480156109ff57600080fd5b506000546001600160a01b03166104b1565b348015610a1d57600080fd5b5060408051808201909152600981526853414954414d454f5760b81b602082015261047b565b348015610a4f57600080fd5b5061044b610a5e3660046144e7565b6121ad565b348015610a6f57600080fd5b5060285461055a565b348015610a8457600080fd5b50610509610a933660046143f3565b612265565b348015610aa457600080fd5b50610509610ab33660046143f3565b6122fe565b348015610ac457600080fd5b5061055a601c5481565b348015610ada57600080fd5b50610509610ae936600461441f565b601a6020526000908152604090205460ff1681565b348015610b0a57600080fd5b50610509610b1936600461441f565b60276020526000908152604090205460ff1681565b348015610b3a57600080fd5b50602a5461050990600160b01b900460ff1681565b348015610b5b57600080fd5b50610509610b6a36600461441f565b60266020526000908152604090205460ff1681565b348015610b8b57600080fd5b5061044b610b9a366004614543565b61230b565b348015610bab57600080fd5b506008546105099060ff1681565b348015610bc557600080fd5b5061055a60235481565b348015610bdb57600080fd5b5061055a601d5481565b348015610bf157600080fd5b5061044b610c003660046144e7565b612382565b348015610c1157600080fd5b5061055a60155481565b348015610c2757600080fd5b5061055a610c36366004614515565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c6d57600080fd5b5061055a60165481565b348015610c8357600080fd5b5061044b6123d7565b348015610c9857600080fd5b5061044b610ca736600461441f565b612436565b348015610cb857600080fd5b5061044b610cc736600461441f565b6124d3565b348015610cd857600080fd5b506002546104b1906001600160a01b031681565b348015610cf857600080fd5b5061055a60145481565b348015610d0e57600080fd5b5061044b610d1d36600461441f565b61254e565b348015610d2e57600080fd5b5061044b612638565b348015610d4357600080fd5b5061044b610d52366004614636565b6126af565b6000546001600160a01b03163314610d8a5760405162461bcd60e51b8152600401610d8190614701565b60405180910390fd5b670de0b6b3a76400006103e8610dad68327cb2734119d3b7a9601e1b600261474c565b610db7919061476b565b610dc1919061476b565b811015610e285760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e322560881b6064820152608401610d81565b610e3a81670de0b6b3a764000061474c565b60235550565b6000546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610d8190614701565b620186a0610e8568327cb2734119d3b7a9601e1b600161474c565b610e8f919061476b565b811015610efc5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d81565b6103e8610f1668327cb2734119d3b7a9601e1b600561474c565b610f20919061476b565b811115610f8c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d81565b602855565b6000610f9e338484612cd9565b5060015b92915050565b6000546001600160a01b03163314610fd25760405162461bcd60e51b8152600401610d8190614701565b60198110158015610fe557506101f48111155b6110315760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e323520616e64203530204554486044820152606401610d81565b61104281662386f26fc1000061474c565b601c556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6000546001600160a01b031633146110a65760405162461bcd60e51b8152600401610d8190614701565b670de0b6b3a76400006103e86110c968327cb2734119d3b7a9601e1b600161474c565b6110d3919061476b565b6110dd919061476b565b81101561113c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617857616c6c65744c696d6974206c6f776572206044820152667468616e20312560c81b6064820152608401610d81565b61114e81670de0b6b3a764000061474c565b60245550565b6000546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610d8190614701565b6017839055601882905560198190556107d08161119b848661478d565b6111a5919061478d565b11156111f35760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610d81565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000611247848484612dfd565b6001600160a01b0384166000908152600660209081526040808320338452909152902054828110156112cc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d81565b6112d98533858403612cd9565b506001949350505050565b6000546001600160a01b0316331461130e5760405162461bcd60e51b8152600401610d8190614701565b6014839055601582905560168190556105dc8161132b848661478d565b611335919061478d565b11156113835760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610d81565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a7736209060600161122d565b6000600c548211156114285760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d81565b60006114326136ed565b905061143e818461476b565b9392505050565b6000546001600160a01b0316331461146f5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166000908152600a602052604090205460ff166114d75760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d81565b60005b600b548110156115f857816001600160a01b0316600b8281548110611501576115016147a5565b6000918252602090912001546001600160a01b031614156115e657600b805461152c906001906147bb565b8154811061153c5761153c6147a5565b600091825260209091200154600b80546001600160a01b039092169183908110611568576115686147a5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b8054806115c0576115c06147d2565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806115f0816147e8565b9150506114da565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610f9e91859061163390869061478d565b612cd9565b6000546001600160a01b031633146116625760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166000908152601f602052604090205460ff16156116c35760405162461bcd60e51b81526020600482015260156024820152742a3432903134b9321034b9903a3432903bb7b9321760591b6044820152606401610d81565b602a546001600160a01b03828116911614156117215760405162461bcd60e51b815260206004820152601e60248201527f546869732069732074686520556e697377617020706169722073696c6c7900006044820152606401610d81565b61172c816001613709565b50565b6000546001600160a01b031633146117595760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b629101611071565b600068327cb2734119d3b7a9601e1b83111561180b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d81565b8161182a57600061181b84613734565b50939550610fa2945050505050565b600061183584613734565b50929550610fa2945050505050565b6000546001600160a01b0316331461186e5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166118d35760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d81565b600280546001600160a01b039081166000908152600960209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d29829101611071565b6000546001600160a01b0316331461197b5760405162461bcd60e51b8152600401610d8190614701565b600061198630611c13565b90506028548110156119ed5760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610d81565b6119f5613783565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611071565b6000546001600160a01b03163314611a4f5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166000908152600a602052604090205460ff1615611ab85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d81565b600b54603290611ac990600161478d565b1115611b535760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d81565b6001600160a01b03811660009081526004602052604090205415611bad576001600160a01b038116600090815260046020526040902054611b93906113c1565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6001600160a01b0381166000908152600a602052604081205460ff1615611c5057506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610fa2906113c1565b604080516002808252606082018352600092839291906020830190803683375050602954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d049190614803565b81600081518110611d1757611d176147a5565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611d4b57611d4b6147a5565b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050602954601c5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611dba918690600401614864565b600060405180830381865afa158015611dd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dff9190810190614885565b9050612710601954601854601754611e17919061478d565b611e21919061478d565b82600181518110611e3457611e346147a5565b6020026020010151611e46919061474c565b611e50919061476b565b81600181518110611e6357611e636147a5565b6020026020010151611e75919061478d565b9250505090565b6000546001600160a01b03163314611ea65760405162461bcd60e51b8152600401610d8190614701565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611f1a5760405162461bcd60e51b8152600401610d8190614701565b6008805461ffff191690556040517f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef90600090a1565b6000546001600160a01b03163314611f7a5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611fd05760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0383166120265760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d81565b6001600160a01b03831630141561207f5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d81565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190614916565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561213d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612161919061492f565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b031633146121d75760405162461bcd60e51b8152600401610d8190614701565b602a546001600160a01b038381169116141561225b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d81565b6115f88282613953565b3360009081526006602090815260408083206001600160a01b0386168452909152812054828110156122e75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d81565b6122f43385858403612cd9565b5060019392505050565b6000610f9e338484612dfd565b6000546001600160a01b031633146123355760405162461bcd60e51b8152600401610d8190614701565b602a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061107190831515815260200190565b6000546001600160a01b031633146123ac5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146124015760405162461bcd60e51b8152600401610d8190614701565b6008805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b031633146124605760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166000908152601f602052604090205460ff166124c85760405162461bcd60e51b815260206004820152601b60248201527f4561726c792062697264206361756768742074686520776f726d2100000000006044820152606401610d81565b61172c816000613709565b6000546001600160a01b031633146124fd5760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611071565b6000546001600160a01b031633146125785760405162461bcd60e51b8152600401610d8190614701565b6001600160a01b0381166125dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d81565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146126625760405162461bcd60e51b8152600401610d8190614701565b604051600090339047908381818185875af1925050503d80600081146126a4576040519150601f19603f3d011682016040523d82523d6000602084013e6126a9565b606091505b50505050565b6000546001600160a01b031633146126d95760405162461bcd60e51b8152600401610d8190614701565b602a54600160b01b900460ff16156127465760405162461bcd60e51b815260206004820152602a60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f6044820152693a10393296b6b2b7bb9760b11b6064820152608401610d81565b600a81106127a65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610d81565b6127ae6139bd565b81518351146127ff5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d81565b606483511061286f5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d81565b60005b83518110156128ff57600084828151811061288f5761288f6147a5565b6020908102919091018101516001600160a01b0381166000908152601a90925260408220805460ff1916600117905585519092508590849081106128d5576128d56147a5565b602002602001015190506128ea338383612dfd565b505080806128f7906147e8565b915050612872565b5061271061291a68327cb2734119d3b7a9601e1b601e61474c565b612924919061476b565b60235561271061294168327cb2734119d3b7a9601e1b607861474c565b61294b919061476b565b602455602a805461ffff60a81b191661010160a81b17905543601d55601e8190556040517fb6b86a349e22595b44335d0fc1c65db0f519c9cb569a47137a882ffdc863ec6490600090a1602980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa1580156129fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1e9190614803565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8f9190614803565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b009190614803565b602a80546001600160a01b0319166001600160a01b03929092169182179055612b2a906001611f50565b602a54612b41906001600160a01b03166001612382565b602a54612b58906001600160a01b03166001613953565b60004711612bb95760405162461bcd60e51b815260206004820152602860248201527f4d7573742068617665206d656f7720455448206f6e20636f6e747261637420746044820152670de40d8c2eadcc6d60c31b6064820152608401610d81565b6000612bc430611c13565b11612c255760405162461bcd60e51b815260206004820152602b60248201527f4d7573742068617665206d656f7720546f6b656e73206f6e20636f6e7472616360448201526a0e840e8de40d8c2eadcc6d60ab1b6064820152608401610d81565b602954612c409030906001600160a01b031661163382611c13565b6029546001600160a01b031663f305d7194730612c5c81611c13565b60008033426040518863ffffffff1660e01b8152600401612c829695949392919061494c565b60606040518083038185885af1158015612ca0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612cc59190614987565b5050506126a9600f54600e55601254601155565b6001600160a01b038316612d3b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d81565b6001600160a01b038216612d9c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d81565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612e615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d81565b6001600160a01b038216612ec35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d81565b60008111612f255760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d81565b602a54600160b01b900460ff16612fc1576001600160a01b03831660009081526009602052604090205460ff1680612f7557506001600160a01b03821660009081526009602052604090205460ff165b612fc15760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d81565b6001600160a01b0383166000908152601a602052604090205460ff1615613128576001600160a01b03821660009081526027602052604090205460ff161561307c5761300b611c72565b8111156130775760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610d81565b613128565b6001600160a01b03821660009081526009602052604090205460ff166131285760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610d81565b600854610100900460ff161561331c576000546001600160a01b0384811691161480159061316457506000546001600160a01b03838116911614155b801561317857506001600160a01b03821615155b801561318f57506001600160a01b03821661dead14155b80156131a55750602a54600160a01b900460ff16155b1561331c576001600160a01b03831660009081526027602052604090205460ff1680156131eb57506001600160a01b03821660009081526025602052604090205460ff16155b15613265576023548111156132605760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610d81565b61331c565b6001600160a01b03821660009081526027602052604090205460ff1680156132a657506001600160a01b03831660009081526025602052604090205460ff16155b1561331c5760235481111561331c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610d81565b600061332730611c13565b602854602a5491925082101590600160a01b900460ff161580156133545750602a54600160a81b900460ff165b80156133755750602a54600090613373906001600160a01b0316611c13565b115b801561339a57506001600160a01b03841660009081526009602052604090205460ff16155b80156133bf57506001600160a01b03851660009081526009602052604090205460ff16155b80156133e357506001600160a01b03841660009081526027602052604090205460ff165b80156133ec5750805b156133f9576133f9613783565b6134016139bd565b60036013556001600160a01b03851660009081526009602052604090205460ff1615801561344857506001600160a01b03841660009081526009602052604090205460ff16155b156136ca576001600160a01b0385166000908152601f602052604090205460ff16158061348257506000546001600160a01b038581169116145b8061349757506001600160a01b03841661dead145b6135195760405162461bcd60e51b815260206004820152604760248201527f42697264732063616e6e6f74207472616e7366657220746f6b656e7320696e2060448201527f6f72206f75742065786365707420746f206f776e6572206f722064656164206160648201526632323932b9b99760c91b608482015260a401610d81565b6024548361352686611c13565b613530919061478d565b11158061355557506001600160a01b03841660009081526026602052604090205460ff165b6135ab5760405162461bcd60e51b815260206004820152602160248201527f5472616e736665722077696c6c206578636565642077616c6c6574206c696d696044820152601d60fa1b6064820152608401610d81565b6001600160a01b03851660009081526027602052604090205460ff161561368357601e54601d546135dc919061478d565b43101561366d576135ee846001613709565b600160206000828254613601919061478d565b90915550506040516001600160a01b03851681527fd5ae31334b29400e95a2fdf23ded3e729c545561b2882f142d9250fae48eda049060200160405180910390a1601454600e55601654601554613658919061478d565b6011819055156136685760016013555b6136ca565b601454600e55601654601554613658919061478d565b6001600160a01b03841660009081526027602052604090205460ff16156136ca57601754600e556019546018546136ba919061478d565b6011819055156136ca5760026013555b6136d58585856139eb565b6136e6600f54600e55601254601155565b5050505050565b60008060006136fa613aed565b9092509050611e75818361476b565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b600080600080600080600080600061374b8a613c96565b92509250925060008060006137698d86866137646136ed565b613cd9565b919f909e50909c50959a5093985091965092945050505050565b602a805460ff60a01b1916600160a01b17905560006137a130611c13565b905060006022546021546137b5919061478d565b9050600060285460146137c8919061474c565b83106137df576028546137dc90601461474c565b92505b8215806137ea575081155b156137f757505050613944565b60006002836021548661380a919061474c565b613814919061476b565b61381e919061476b565b9050600061382c82866147bb565b905061383781613d30565b602154479060009061384b9060029061476b565b61385590876147bb565b602254613862908461474c565b61386c919061476b565b9050600061387a82846147bb565b60006021819055602255905084158015906138955750600081115b156138e6576138a48582613e8a565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613933576040519150601f19603f3d011682016040523d82523d6000602084013e613938565b606091505b50505050505050505050505b602a805460ff60a01b19169055565b6001600160a01b038216600090815260276020908152604080832080548515801560ff19928316811790935560258552838620805483168417905560269094529190932080549091169092179091556139af576139af82611a25565b806115f8576115f882611445565b600e541580156139cd5750601154155b156139d457565b600e8054600f556011805460125560009182905555565b6001600160a01b0383166000908152600a602052604090205460ff168015613a2c57506001600160a01b0382166000908152600a602052604090205460ff16155b15613a4157613a3c838383613f24565b505050565b6001600160a01b0383166000908152600a602052604090205460ff16158015613a8257506001600160a01b0382166000908152600a602052604090205460ff165b15613a9257613a3c83838361404d565b6001600160a01b0383166000908152600a602052604090205460ff168015613ad257506001600160a01b0382166000908152600a602052604090205460ff165b15613ae257613a3c8383836140f9565b613a3c83838361416e565b600c54600090819068327cb2734119d3b7a9601e1b825b600b54811015613c52578260046000600b8481548110613b2657613b266147a5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613b9157508160056000600b8481548110613b6a57613b6a6147a5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613bb0575050600c549368327cb2734119d3b7a9601e1b9350915050565b60046000600b8381548110613bc757613bc76147a5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613bf690846147bb565b925060056000600b8381548110613c0f57613c0f6147a5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c3e90836147bb565b915080613c4a816147e8565b915050613b04565b5068327cb2734119d3b7a9601e1b600c54613c6d919061476b565b821015613c8d575050600c549268327cb2734119d3b7a9601e1b92509050565b90939092509050565b600080600080613ca5856141b3565b90506000613cb2866141d0565b9050600081613cc184896147bb565b613ccb91906147bb565b979296509094509092505050565b6000808080613ce8858961474c565b90506000613cf6868961474c565b90506000613d04878961474c565b9050600081613d1384866147bb565b613d1d91906147bb565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d6557613d656147a5565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de29190614803565b81600181518110613df557613df56147a5565b6001600160a01b039283166020918202929092010152602954613e1b9130911684612cd9565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e549085906000908690309042906004016149b5565b600060405180830381600087803b158015613e6e57600080fd5b505af1158015613e82573d6000803e3d6000fd5b505050505050565b602954613ea29030906001600160a01b031684612cd9565b60295460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613ee19030908790600090819061dead90429060040161494c565b60606040518083038185885af1158015613eff573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136e69190614987565b600080600080600080613f3687613734565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613f699088906147bb565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613f999087906147bb565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613fc990869061478d565b6001600160a01b038916600090815260046020526040902055613feb816141e3565b613ff5848361434a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161403a91815260200190565b60405180910390a3505050505050505050565b60008060008060008061405f87613734565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506140929087906147bb565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546140c990849061478d565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613fc990869061478d565b60008060008060008061410b87613734565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061413e9088906147bb565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546140929087906147bb565b60008060008060008061418087613734565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613f999087906147bb565b6000612710600e54836141c6919061474c565b610fa2919061476b565b6000612710601154836141c6919061474c565b60016013541415614254576011546015546141fe908361474c565b614208919061476b565b60216000828254614219919061478d565b909155505060115460165461422e908361474c565b614238919061476b565b60226000828254614249919061478d565b909155506142c09050565b600260135414156142c05760115460185461426f908361474c565b614279919061476b565b6021600082825461428a919061478d565b909155505060115460195461429f908361474c565b6142a9919061476b565b602260008282546142ba919061478d565b90915550505b60006142ca6136ed565b905060006142d8828461474c565b306000908152600460205260409020549091506142f690829061478d565b30600090815260046020908152604080832093909355600a9052205460ff1615613a3c573060009081526005602052604090205461433590849061478d565b30600090815260056020526040902055505050565b81600c5461435891906147bb565b600c55600d5461436990829061478d565b600d555050565b60006020828403121561438257600080fd5b5035919050565b600060208083528351808285015260005b818110156143b65785810183015185820160400152820161439a565b818111156143c8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461172c57600080fd5b6000806040838503121561440657600080fd5b8235614411816143de565b946020939093013593505050565b60006020828403121561443157600080fd5b813561143e816143de565b60008060006060848603121561445157600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561447d57600080fd5b8335614488816143de565b92506020840135614498816143de565b929592945050506040919091013590565b801515811461172c57600080fd5b600080604083850312156144ca57600080fd5b8235915060208301356144dc816144a9565b809150509250929050565b600080604083850312156144fa57600080fd5b8235614505816143de565b915060208301356144dc816144a9565b6000806040838503121561452857600080fd5b8235614533816143de565b915060208301356144dc816143de565b60006020828403121561455557600080fd5b813561143e816144a9565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561459f5761459f614560565b604052919050565b600067ffffffffffffffff8211156145c1576145c1614560565b5060051b60200190565b600082601f8301126145dc57600080fd5b813560206145f16145ec836145a7565b614576565b82815260059290921b8401810191818101908684111561461057600080fd5b8286015b8481101561462b5780358352918301918301614614565b509695505050505050565b60008060006060848603121561464b57600080fd5b833567ffffffffffffffff8082111561466357600080fd5b818601915086601f83011261467757600080fd5b813560206146876145ec836145a7565b82815260059290921b8401810191818101908a8411156146a657600080fd5b948201945b838610156146cd5785356146be816143de565b825294820194908201906146ab565b975050870135925050808211156146e357600080fd5b506146f0868287016145cb565b925050604084013590509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561476657614766614736565b500290565b60008261478857634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156147a0576147a0614736565b500190565b634e487b7160e01b600052603260045260246000fd5b6000828210156147cd576147cd614736565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156147fc576147fc614736565b5060010190565b60006020828403121561481557600080fd5b815161143e816143de565b600081518084526020808501945080840160005b838110156148595781516001600160a01b031687529582019590820190600101614834565b509495945050505050565b82815260406020820152600061487d6040830184614820565b949350505050565b6000602080838503121561489857600080fd5b825167ffffffffffffffff8111156148af57600080fd5b8301601f810185136148c057600080fd5b80516148ce6145ec826145a7565b81815260059190911b820183019083810190878311156148ed57600080fd5b928401925b8284101561490b578351825292840192908401906148f2565b979650505050505050565b60006020828403121561492857600080fd5b5051919050565b60006020828403121561494157600080fd5b815161143e816144a9565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561499c57600080fd5b8351925060208401519150604084015190509250925092565b85815284602082015260a0604082015260006149d460a0830186614820565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212206be033ff102847510f342f97a35ff75951087f84b86a52819baea72339c17c3564736f6c634300080b0033

Deployed Bytecode Sourcemap

11774:33137:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22512:228;;;;;;;;;;-1:-1:-1;22512:228:0;;;;;:::i;:::-;;:::i;:::-;;17889:85;;;;;;;;;;-1:-1:-1;17961:5:0;;;;;;;;;;;;-1:-1:-1;;;17961:5:0;;;;17889:85;;;;;;;:::i;:::-;;;;;;;;14657:27;;;;;;;;;;-1:-1:-1;14657:27:0;;;;-1:-1:-1;;;;;14657:27:0;;;;;;-1:-1:-1;;;;;983:32:1;;;965:51;;953:2;938:18;14657:27:0;801:221:1;22161:343:0;;;;;;;;;;-1:-1:-1;22161:343:0;;;;;:::i;:::-;;:::i;18886:193::-;;;;;;;;;;-1:-1:-1;18886:193:0;;;;;:::i;:::-;;:::i;:::-;;;1648:14:1;;1641:22;1623:41;;1611:2;1596:18;18886:193:0;1483:187:1;14254:64:0;;;;;;;;;;-1:-1:-1;14254:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20376:89;;;;;;;;;;-1:-1:-1;20447:10:0;;20376:89;;;2073:25:1;;;2061:2;2046:18;20376:89:0;1927:177:1;18172:97:0;;;;;;;;;;-1:-1:-1;;;;18172:97:0;;21845:245;;;;;;;;;;-1:-1:-1;21845:245:0;;;;;:::i;:::-;;:::i;22748:209::-;;;;;;;;;;-1:-1:-1;22748:209:0;;;;;:::i;:::-;;:::i;13671:40::-;;;;;;;;;;;;;;;;41037:463;;;;;;;;;;-1:-1:-1;41037:463:0;;;;;:::i;:::-;;:::i;13587:32::-;;;;;;;;;;;;;;;;19087:475;;;;;;;;;;-1:-1:-1;19087:475:0;;;;;:::i;:::-;;:::i;40584:445::-;;;;;;;;;;-1:-1:-1;40584:445:0;;;;;:::i;:::-;;:::i;24031:321::-;;;;;;;;;;-1:-1:-1;24031:321:0;;;;;:::i;:::-;;:::i;18079:85::-;;;;;;;;;;-1:-1:-1;18079:85:0;;12911:2;3033:36:1;;3021:2;3006:18;18079:85:0;2891:184:1;24827:471:0;;;;;;;;;;-1:-1:-1;24827:471:0;;;;;:::i;:::-;;:::i;19570:215::-;;;;;;;;;;-1:-1:-1;19570:215:0;;;;;:::i;:::-;;:::i;20986:241::-;;;;;;;;;;-1:-1:-1;20986:241:0;;;;;:::i;:::-;;:::i;11947:33::-;;;;;;;;;;-1:-1:-1;11947:33:0;;;;-1:-1:-1;;;;;11947:33:0;;;14085:37;;;;;;;;;;;;;;;;14129:38;;;;;;;;;;;;;;;;40267:152;;;;;;;;;;-1:-1:-1;40267:152:0;;;;;:::i;:::-;;:::i;14691:21::-;;;;;;;;;;-1:-1:-1;14691:21:0;;;;-1:-1:-1;;;;;14691:21:0;;;23542:481;;;;;;;;;;-1:-1:-1;23542:481:0;;;;;:::i;:::-;;:::i;41508:408::-;;;;;;;;;;-1:-1:-1;41508:408:0;;;;;:::i;:::-;;:::i;12390:33::-;;;;;;;;;;-1:-1:-1;12390:33:0;;;;;;;;;;;14749:41;;;;;;;;;;-1:-1:-1;14749:41:0;;;;-1:-1:-1;;;14749:41:0;;;;;;14001:42;;;;;;;;;;-1:-1:-1;14001:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30995:294;;;;;;;;;;;;;:::i;24360:459::-;;;;;;;;;;-1:-1:-1;24360:459:0;;;;;:::i;:::-;;:::i;40133:126::-;;;;;;;;;;-1:-1:-1;40133:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;40224:27:0;40200:4;40224:27;;;:18;:27;;;;;;;;;40133:126;10489:90;;;;;;;;;;-1:-1:-1;10556:15:0;10489:90;;13778:61;;;;;;;;;;-1:-1:-1;13778:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;14218:29;;;;;;;;;;;;;;;;18277:198;;;;;;;;;;-1:-1:-1;18277:198:0;;;;;:::i;:::-;;:::i;31786:421::-;;;;;;;;;;;;;:::i;10040:150::-;;;;;;;;;;;;;:::i;20533:154::-;;;;;;;;;;;;;:::i;21421:144::-;;;;;;;;;;-1:-1:-1;21421:144:0;;;;;:::i;:::-;;:::i;42142:488::-;;;;;;;;;;-1:-1:-1;42142:488:0;;;;;:::i;:::-;;:::i;13626:38::-;;;;;;;;;;;;;;;;20214:154;;;;;;;;;;-1:-1:-1;20214:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;20340:20:0;20311:4;20340:20;;;:11;:20;;;;;;;;;20214:154;14050:26;;;;;;;;;;;;;;;;9826:79;;;;;;;;;;-1:-1:-1;9864:7:0;9891:6;-1:-1:-1;;;;;9891:6:0;9826:79;;17982:89;;;;;;;;;;-1:-1:-1;18056:7:0;;;;;;;;;;;;-1:-1:-1;;;18056:7:0;;;;17982:89;;22965:235;;;;;;;;;;-1:-1:-1;22965:235:0;;;;;:::i;:::-;;:::i;21715:122::-;;;;;;;;;;-1:-1:-1;21806:23:0;;21715:122;;19793:413;;;;;;;;;;-1:-1:-1;19793:413:0;;;;;:::i;:::-;;:::i;18483:201::-;;;;;;;;;;-1:-1:-1;18483:201:0;;;;;:::i;:::-;;:::i;13846:42::-;;;;;;;;;;;;;;;;13720:51;;;;;;;;;;-1:-1:-1;13720:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14542:58;;;;;;;;;;-1:-1:-1;14542:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14797:33;;;;;;;;;;-1:-1:-1;14797:33:0;;;;-1:-1:-1;;;14797:33:0;;;;;;14325:59;;;;;;;;;;-1:-1:-1;14325:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;41924:171;;;;;;;;;;-1:-1:-1;41924:171:0;;;;;:::i;:::-;;:::i;12343:40::-;;;;;;;;;;-1:-1:-1;12343:40:0;;;;;;;;14176:35;;;;;;;;;;;;;;;;13897:30;;;;;;;;;;;;;;;;21573:134;;;;;;;;;;-1:-1:-1;21573:134:0;;;;;:::i;:::-;;:::i;13496:37::-;;;;;;;;;;;;;;;;18692:186;;;;;;;;;;-1:-1:-1;18692:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;18843:18:0;;;18811:7;18843:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18692:186;13540:38;;;;;;;;;;;;;;;;20726:137;;;;;;;;;;;;;:::i;21235:178::-;;;;;;;;;;-1:-1:-1;21235:178:0;;;;;:::i;:::-;;:::i;40427:149::-;;;;;;;;;;-1:-1:-1;40427:149:0;;;;;:::i;:::-;;:::i;11900:40::-;;;;;;;;;;-1:-1:-1;11900:40:0;;;;-1:-1:-1;;;;;11900:40:0;;;13458:31;;;;;;;;;;;;;;;;10198:283;;;;;;;;;;-1:-1:-1;10198:283:0;;;;;:::i;:::-;;:::i;42638:160::-;;;;;;;;;;;;;:::i;42806:2102::-;;;;;;;;;;-1:-1:-1;42806:2102:0;;;;;:::i;:::-;;:::i;22512:228::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;;;;;;;;;22627:4:::1;22621;22607:11;-1:-1:-1::0;;;22617:1:0::1;22607:11;:::i;:::-;:18;;;;:::i;:::-;22606:25;;;;:::i;:::-;22596:6;:35;;22588:95;;;::::0;-1:-1:-1;;;22588:95:0;;8620:2:1;22588:95:0::1;::::0;::::1;8602:21:1::0;8659:2;8639:18;;;8632:30;8698:34;8678:18;;;8671:62;-1:-1:-1;;;8749:18:1;;;8742:45;8804:19;;22588:95:0::1;8418:411:1::0;22588:95:0::1;22717:15;:6:::0;22727:4:::1;22717:15;:::i;:::-;22694:20;:38:::0;-1:-1:-1;22512:228:0:o;22161:343::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;22282:6:::1;22268:11;-1:-1:-1::0;;;22278:1:0::1;22268:11;:::i;:::-;:20;;;;:::i;:::-;22255:9;:33;;22247:99;;;::::0;-1:-1:-1;;;22247:99:0;;9036:2:1;22247:99:0::1;::::0;::::1;9018:21:1::0;9075:2;9055:18;;;9048:30;9114:34;9094:18;;;9087:62;-1:-1:-1;;;9165:18:1;;;9158:51;9226:19;;22247:99:0::1;8834:417:1::0;22247:99:0::1;22391:4;22377:11;-1:-1:-1::0;;;22387:1:0::1;22377:11;:::i;:::-;:18;;;;:::i;:::-;22364:9;:31;;22356:96;;;::::0;-1:-1:-1;;;22356:96:0;;9458:2:1;22356:96:0::1;::::0;::::1;9440:21:1::0;9497:2;9477:18;;;9470:30;9536:34;9516:18;;;9509:62;-1:-1:-1;;;9587:18:1;;;9580:50;9647:19;;22356:96:0::1;9256:416:1::0;22356:96:0::1;22462:23;:35:::0;22161:343::o;18886:193::-;18988:4;19010:39;3597:10;19033:7;19042:6;19010:8;:39::i;:::-;-1:-1:-1;19067:4:0;18886:193;;;;;:::o;21845:245::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;21939:2:::1;21929:6;:12;;:29;;;;;21955:3;21945:6;:13;;21929:29;21921:74;;;::::0;-1:-1:-1;;;21921:74:0;;9879:2:1;21921:74:0::1;::::0;::::1;9861:21:1::0;;;9898:18;;;9891:30;9957:34;9937:18;;;9930:62;10009:18;;21921:74:0::1;9677:356:1::0;21921:74:0::1;22024:13;:6:::0;22033:4:::1;22024:13;:::i;:::-;22006:15;:31:::0;22053:29:::1;::::0;2073:25:1;;;22053:29:0::1;::::0;2061:2:1;2046:18;22053:29:0::1;;;;;;;;21845:245:::0;:::o;22748:209::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;22858:4:::1;22852;22838:11;-1:-1:-1::0;;;22848:1:0::1;22838:11;:::i;:::-;:18;;;;:::i;:::-;22837:25;;;;:::i;:::-;22827:6;:35;;22819:87;;;::::0;-1:-1:-1;;;22819:87:0;;10240:2:1;22819:87:0::1;::::0;::::1;10222:21:1::0;10279:2;10259:18;;;10252:30;10318:34;10298:18;;;10291:62;-1:-1:-1;;;10369:18:1;;;10362:37;10416:19;;22819:87:0::1;10038:403:1::0;22819:87:0::1;22934:15;:6:::0;22944:4:::1;22934:15;:::i;:::-;22917:14;:32:::0;-1:-1:-1;22748:209:0:o;41037:463::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;41183:11:::1;:24:::0;;;41218:17:::1;:36:::0;;;41265:18:::1;:38:::0;;;41378:4:::1;41286:17:::0;41322:31:::1;41238:16:::0;41197:10;41322:31:::1;:::i;:::-;:52;;;;:::i;:::-;:60;;41314:103;;;::::0;-1:-1:-1;;;41314:103:0;;10781:2:1;41314:103:0::1;::::0;::::1;10763:21:1::0;10820:2;10800:18;;;10793:30;10859:32;10839:18;;;10832:60;10909:18;;41314:103:0::1;10579:354:1::0;41314:103:0::1;41433:59;::::0;;11140:25:1;;;11196:2;11181:18;;11174:34;;;11224:18;;;11217:34;;;41433:59:0::1;::::0;11128:2:1;11113:18;41433:59:0::1;;;;;;;;41037:463:::0;;;:::o;19087:475::-;19210:4;19227:36;19237:6;19245:9;19256:6;19227:9;:36::i;:::-;-1:-1:-1;;;;;19303:19:0;;19276:24;19303:19;;;:11;:19;;;;;;;;3597:10;19303:33;;;;;;;;19355:26;;;;19347:79;;;;-1:-1:-1;;;19347:79:0;;11464:2:1;19347:79:0;;;11446:21:1;11503:2;11483:18;;;11476:30;11542:34;11522:18;;;11515:62;-1:-1:-1;;;11593:18:1;;;11586:38;11641:19;;19347:79:0;11262:404:1;19347:79:0;19462:57;19471:6;3597:10;19512:6;19493:16;:25;19462:8;:57::i;:::-;-1:-1:-1;19550:4:0;;19087:475;-1:-1:-1;;;;19087:475:0:o;40584:445::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;40726:10:::1;:22:::0;;;40759:16:::1;:34:::0;;;40804:17:::1;:36:::0;;;40912:4:::1;40824:16:::0;40859:29:::1;40778:15:::0;40739:9;40859:29:::1;:::i;:::-;:49;;;;:::i;:::-;:57;;40851:99;;;::::0;-1:-1:-1;;;40851:99:0;;11873:2:1;40851:99:0::1;::::0;::::1;11855:21:1::0;11912:2;11892:18;;;11885:30;11951:31;11931:18;;;11924:59;12000:18;;40851:99:0::1;11671:353:1::0;40851:99:0::1;40966:55;::::0;;11140:25:1;;;11196:2;11181:18;;11174:34;;;11224:18;;;11217:34;;;40966:55:0::1;::::0;11128:2:1;11113:18;40966:55:0::1;10938:319:1::0;24031:321:0;24125:7;24183;;24172;:18;;24150:110;;;;-1:-1:-1;;;24150:110:0;;12231:2:1;24150:110:0;;;12213:21:1;12270:2;12250:18;;;12243:30;12309:34;12289:18;;;12282:62;-1:-1:-1;;;12360:18:1;;;12353:40;12410:19;;24150:110:0;12029:406:1;24150:110:0;24271:19;24293:10;:8;:10::i;:::-;24271:32;-1:-1:-1;24321:23:0;24271:32;24321:7;:23;:::i;:::-;24314:30;24031:321;-1:-1:-1;;;24031:321:0:o;24827:471::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24905:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24897:56;;;::::0;-1:-1:-1;;;24897:56:0;;12642:2:1;24897:56:0::1;::::0;::::1;12624:21:1::0;12681:2;12661:18;;;12654:30;12720:25;12700:18;;;12693:53;12763:18;;24897:56:0::1;12440:347:1::0;24897:56:0::1;24969:9;24964:327;24988:9;:16:::0;24984:20;::::1;24964:327;;;25046:7;-1:-1:-1::0;;;;;25030:23:0::1;:9;25040:1;25030:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25030:12:0::1;:23;25026:254;;;25089:9;25099:16:::0;;:20:::1;::::0;25118:1:::1;::::0;25099:20:::1;:::i;:::-;25089:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25074:9:::1;:12:::0;;-1:-1:-1;;;;;25089:31:0;;::::1;::::0;25084:1;;25074:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25074:46:0::1;-1:-1:-1::0;;;;;25074:46:0;;::::1;;::::0;;25139:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25178:11:::1;:20:::0;;;;:28;;-1:-1:-1;;25178:28:0::1;::::0;;25225:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25225:15:0;;;;;-1:-1:-1;;;;;;25225:15:0::1;::::0;;;;;24964:327:::1;24827:471:::0;:::o;25026:254::-:1;25006:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24964:327;;;;24827:471:::0;:::o;19570:215::-;3597:10;19658:4;19707:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19707:34:0;;;;;;;;;;19658:4;;19675:80;;19698:7;;19707:47;;19744:10;;19707:47;:::i;:::-;19675:8;:80::i;20986:241::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21065:17:0;::::1;;::::0;;;:9:::1;:17;::::0;;;;;::::1;;21064:18;21056:52;;;::::0;-1:-1:-1;;;21056:52:0;;13528:2:1;21056:52:0::1;::::0;::::1;13510:21:1::0;13567:2;13547:18;;;13540:30;-1:-1:-1;;;13586:18:1;;;13579:51;13647:18;;21056:52:0::1;13326:345:1::0;21056:52:0::1;21137:6;::::0;-1:-1:-1;;;;;21127:16:0;;::::1;21137:6:::0;::::1;21127:16;;21119:59;;;::::0;-1:-1:-1;;;21119:59:0;;13878:2:1;21119:59:0::1;::::0;::::1;13860:21:1::0;13917:2;13897:18;;;13890:30;13956:32;13936:18;;;13929:60;14006:18;;21119:59:0::1;13676:354:1::0;21119:59:0::1;21189:30;21206:6;21214:4;21189:16;:30::i;:::-;20986:241:::0;:::o;40267:152::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40338:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;40338:34:0::1;40368:4;40338:34;::::0;;40388:23;;965:51:1;;;40388:23:0::1;::::0;938:18:1;40388:23:0::1;801:221:1::0;23542:481:0;23662:7;-1:-1:-1;;;23695:7:0;:18;;23687:62;;;;-1:-1:-1;;;23687:62:0;;14237:2:1;23687:62:0;;;14219:21:1;14276:2;14256:18;;;14249:30;14315:33;14295:18;;;14288:61;14366:18;;23687:62:0;14035:355:1;23687:62:0;23765:17;23760:256;;23800:15;23829:19;23840:7;23829:10;:19::i;:::-;-1:-1:-1;23799:49:0;;-1:-1:-1;23863:14:0;;-1:-1:-1;;;;;23863:14:0;23760:256;23913:23;23948:19;23959:7;23948:10;:19::i;:::-;-1:-1:-1;23910:57:0;;-1:-1:-1;23982:22:0;;-1:-1:-1;;;;;23982:22:0;41508:408;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41604:32:0;::::1;41596:83;;;::::0;-1:-1:-1;;;41596:83:0;;14597:2:1;41596:83:0::1;::::0;::::1;14579:21:1::0;14636:2;14616:18;;;14609:30;14675:34;14655:18;;;14648:62;-1:-1:-1;;;14726:18:1;;;14719:36;14772:19;;41596:83:0::1;14395:402:1::0;41596:83:0::1;41709:17;::::0;;-1:-1:-1;;;;;41709:17:0;;::::1;41730:5;41690:37:::0;;;:18:::1;:37;::::0;;;;;;;:45;;-1:-1:-1;;41690:45:0;;::::1;::::0;;;41746:47;;-1:-1:-1;;;;;;41746:47:0::1;::::0;;::::1;::::0;;::::1;::::0;;;41804:37;;;;;;;:44;;;;::::1;-1:-1:-1::0;41804:44:0::1;::::0;;;41864;965:51:1;;;41864:44:0::1;::::0;938:18:1;41864:44:0::1;801:221:1::0;30995:294:0;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;31050:23:::1;31076:24;31094:4;31076:9;:24::i;:::-;31050:50;;31138:23;;31119:15;:42;;31111:97;;;::::0;-1:-1:-1;;;31111:97:0;;15004:2:1;31111:97:0::1;::::0;::::1;14986:21:1::0;15043:2;15023:18;;;15016:30;15082:34;15062:18;;;15055:62;-1:-1:-1;;;15133:18:1;;;15126:40;15183:19;;31111:97:0::1;14802:406:1::0;31111:97:0::1;31219:10;:8;:10::i;:::-;31245:36;::::0;31265:15:::1;2073:25:1::0;;31245:36:0::1;::::0;2061:2:1;2046:18;31245:36:0::1;1927:177:1::0;24360:459:0;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24441:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24440:21;24432:61;;;::::0;-1:-1:-1;;;24432:61:0;;15415:2:1;24432:61:0::1;::::0;::::1;15397:21:1::0;15454:2;15434:18;;;15427:30;15493:29;15473:18;;;15466:57;15540:18;;24432:61:0::1;15213:351:1::0;24432:61:0::1;24512:9;:16:::0;24536:2:::1;::::0;24512:20:::1;::::0;24531:1:::1;24512:20;:::i;:::-;:26;;24504:116;;;::::0;-1:-1:-1;;;24504:116:0;;15771:2:1;24504:116:0::1;::::0;::::1;15753:21:1::0;15810:2;15790:18;;;15783:30;15849:34;15829:18;;;15822:62;15920:34;15900:18;;;15893:62;-1:-1:-1;;;15971:19:1;;;15964:44;16025:19;;24504:116:0::1;15569:481:1::0;24504:116:0::1;-1:-1:-1::0;;;;;24635:16:0;::::1;24654:1;24635:16:::0;;;:7:::1;:16;::::0;;;;;:20;24631:109:::1;;-1:-1:-1::0;;;;;24711:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24691:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24672:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24631:109:::1;-1:-1:-1::0;;;;;24750:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24750:27:0::1;24773:4;24750:27:::0;;::::1;::::0;;;24788:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24788:23:0::1;::::0;;::::1;::::0;;24360:459::o;18277:198::-;-1:-1:-1;;;;;18367:20:0;;18343:7;18367:20;;;:11;:20;;;;;;;;18363:49;;;-1:-1:-1;;;;;;18396:16:0;;;;;:7;:16;;;;;;;18277:198::o;18363:49::-;-1:-1:-1;;;;;18450:16:0;;;;;;:7;:16;;;;;;18430:37;;:19;:37::i;31786:421::-;31883:16;;;31897:1;31883:16;;;;;;;;31840:7;;;;31883:16;31897:1;31883:16;;;;;;;;-1:-1:-1;;31920:9:0;;:16;;;-1:-1:-1;;;31920:16:0;;;;31859:40;;-1:-1:-1;;;;;;31920:9:0;;;;:14;;-1:-1:-1;31920:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31910:4;31915:1;31910:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;31910:26:0;;;-1:-1:-1;;;;;31910:26:0;;;;;31965:4;31947;31952:1;31947:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31947:23:0;;;;:7;;;;;;;;;;:23;32010:16;;;32024:1;32010:16;;;;;;;;31983:24;;32010:16;;32024:1;;32010:16;;;;;;;;;-1:-1:-1;;32047:9:0;;32071:15;;32047:46;;-1:-1:-1;;;32047:46:0;;31983:43;;-1:-1:-1;;;;;;32047:9:0;;;;:23;;:46;;32088:4;;32047:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32047:46:0;;;;;;;;;;;;:::i;:::-;32037:56;;32194:5;32173:18;;32153:17;;32139:11;;:31;;;;:::i;:::-;:52;;;;:::i;:::-;32125:7;32133:1;32125:10;;;;;;;;:::i;:::-;;;;;;;:67;;;;:::i;:::-;32124:75;;;;:::i;:::-;32111:7;32119:1;32111:10;;;;;;;;:::i;:::-;;;;;;;:88;;;;:::i;:::-;32104:95;;;;31786:421;:::o;10040:150::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;10149:1:::1;10133:6:::0;;10112:40:::1;::::0;-1:-1:-1;;;;;10133:6:0;;::::1;::::0;10112:40:::1;::::0;10149:1;;10112:40:::1;10180:1;10163:19:::0;;-1:-1:-1;;;;;;10163:19:0::1;::::0;;10040:150::o;20533:154::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;20587:14:::1;:22:::0;;-1:-1:-1;;20620:28:0;;;20664:15:::1;::::0;::::1;::::0;20604:5:::1;::::0;20664:15:::1;20533:154::o:0;21421:144::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21511:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21511:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21421:144::o;42142:488::-;42256:10;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42292:20:0;::::1;42284:59;;;::::0;-1:-1:-1;;;42284:59:0;;18202:2:1;42284:59:0::1;::::0;::::1;18184:21:1::0;18241:2;18221:18;;;18214:30;18280:28;18260:18;;;18253:56;18326:18;;42284:59:0::1;18000:350:1::0;42284:59:0::1;-1:-1:-1::0;;;;;42362:23:0;::::1;42380:4;42362:23;;42354:64;;;::::0;-1:-1:-1;;;42354:64:0;;18557:2:1;42354:64:0::1;::::0;::::1;18539:21:1::0;18596:2;18576:18;;;18569:30;18635;18615:18;;;18608:58;18683:18;;42354:64:0::1;18355:352:1::0;42354:64:0::1;42456:39;::::0;-1:-1:-1;;;42456:39:0;;42489:4:::1;42456:39;::::0;::::1;965:51:1::0;42429:24:0::1;::::0;-1:-1:-1;;;;;42456:24:0;::::1;::::0;::::1;::::0;938:18:1;;42456:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42514:46;::::0;-1:-1:-1;;;42514:46:0;;-1:-1:-1;;;;;19093:32:1;;;42514:46:0::1;::::0;::::1;19075:51:1::0;19142:18;;;19135:34;;;42429:66:0;;-1:-1:-1;42514:23:0;;::::1;::::0;::::1;::::0;19048:18:1;;42514:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42576;::::0;;-1:-1:-1;;;;;19093:32:1;;19075:51;;19157:2;19142:18;;19135:34;;;42506:54:0;;-1:-1:-1;42576:46:0::1;::::0;19048:18:1;42576:46:0::1;;;;;;;42273:357;42142:488:::0;;;;:::o;22965:235::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;23072:6:::1;::::0;-1:-1:-1;;;;;23064:14:0;;::::1;23072:6:::0;::::1;23064:14;;23056:84;;;::::0;-1:-1:-1;;;23056:84:0;;19632:2:1;23056:84:0::1;::::0;::::1;19614:21:1::0;19671:2;19651:18;;;19644:30;19710:34;19690:18;;;19683:62;19781:27;19761:18;;;19754:55;19826:19;;23056:84:0::1;19430:421:1::0;23056:84:0::1;23151:41;23180:4;23186:5;23151:28;:41::i;19793:413::-:0;3597:10;19886:4;19930:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19930:34:0;;;;;;;;;;19983:35;;;;19975:85;;;;-1:-1:-1;;;19975:85:0;;20058:2:1;19975:85:0;;;20040:21:1;20097:2;20077:18;;;20070:30;20136:34;20116:18;;;20109:62;-1:-1:-1;;;20187:18:1;;;20180:35;20232:19;;19975:85:0;19856:401:1;19975:85:0;20096:67;3597:10;20119:7;20147:15;20128:16;:34;20096:8;:67::i;:::-;-1:-1:-1;20194:4:0;;19793:413;-1:-1:-1;;;19793:413:0:o;18483:201::-;18590:4;18612:42;3597:10;18636:9;18647:6;18612:9;:42::i;41924:171::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;42001:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;42001:32:0::1;-1:-1:-1::0;;;;42001:32:0;;::::1;;::::0;;42049:38:::1;::::0;::::1;::::0;::::1;::::0;42025:8;1648:14:1;1641:22;1623:41;;1611:2;1596:18;;1483:187;21573:134:0;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21658:34:0;;;::::1;;::::0;;;:26:::1;:34;::::0;;;;:41;;-1:-1:-1;;21658:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21573:134::o;20726:137::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;20788:20:::1;:28:::0;;-1:-1:-1;;20788:28:0::1;::::0;;20832:23:::1;::::0;::::1;::::0;20811:5:::1;::::0;20832:23:::1;20726:137::o:0;21235:178::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21314:17:0;::::1;;::::0;;;:9:::1;:17;::::0;;;;;::::1;;21306:57;;;::::0;-1:-1:-1;;;21306:57:0;;20464:2:1;21306:57:0::1;::::0;::::1;20446:21:1::0;20503:2;20483:18;;;20476:30;20542:29;20522:18;;;20515:57;20589:18;;21306:57:0::1;20262:351:1::0;21306:57:0::1;21374:31;21391:6;21399:5;21374:16;:31::i;40427:149::-:0;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40496:27:0;::::1;40526:5;40496:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;40496:35:0::1;::::0;;40547:21;;965:51:1;;;40547:21:0::1;::::0;938:18:1;40547:21:0::1;801:221:1::0;10198:283:0;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10303:22:0;::::1;10281:110;;;::::0;-1:-1:-1;;;10281:110:0;;20820:2:1;10281:110:0::1;::::0;::::1;20802:21:1::0;20859:2;20839:18;;;20832:30;20898:34;20878:18;;;20871:62;-1:-1:-1;;;20949:18:1;;;20942:36;20995:19;;10281:110:0::1;20618:402:1::0;10281:110:0::1;10428:6;::::0;;10407:38:::1;::::0;-1:-1:-1;;;;;10407:38:0;;::::1;::::0;10428:6;::::1;::::0;10407:38:::1;::::0;::::1;10456:6;:17:::0;;-1:-1:-1;;;;;;10456:17:0::1;-1:-1:-1::0;;;;;10456:17:0;;;::::1;::::0;;;::::1;::::0;;10198:283::o;42638:160::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;42732:58:::1;::::0;42696:12:::1;::::0;42740:10:::1;::::0;42764:21:::1;::::0;42696:12;42732:58;42696:12;42732:58;42764:21;42740:10;42732:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;42638:160:0:o;42806:2102::-;9953:6;;-1:-1:-1;;;;;9953:6:0;3597:10;9953:22;9945:67;;;;-1:-1:-1;;;9945:67:0;;;;;;;:::i;:::-;42942:13:::1;::::0;-1:-1:-1;;;42942:13:0;::::1;;;42941:14;42933:69;;;::::0;-1:-1:-1;;;42933:69:0;;21437:2:1;42933:69:0::1;::::0;::::1;21419:21:1::0;21476:2;21456:18;;;21449:30;21515:34;21495:18;;;21488:62;-1:-1:-1;;;21566:18:1;;;21559:40;21616:19;;42933:69:0::1;21235:406:1::0;42933:69:0::1;43037:2;43021:13;:18;43013:70;;;::::0;-1:-1:-1;;;43013:70:0;;21848:2:1;43013:70:0::1;::::0;::::1;21830:21:1::0;21887:2;21867:18;;;21860:30;21926:34;21906:18;;;21899:62;-1:-1:-1;;;21977:18:1;;;21970:37;22024:19;;43013:70:0::1;21646:403:1::0;43013:70:0::1;43096:14;:12;:14::i;:::-;43147:15;:22;43129:7;:14;:40;43121:83;;;::::0;-1:-1:-1;;;43121:83:0;;22256:2:1;43121:83:0::1;::::0;::::1;22238:21:1::0;22295:2;22275:18;;;22268:30;22334:32;22314:18;;;22307:60;22384:18;;43121:83:0::1;22054:354:1::0;43121:83:0::1;43240:3;43223:7;:14;:20;43215:87;;;::::0;-1:-1:-1;;;43215:87:0;;22615:2:1;43215:87:0::1;::::0;::::1;22597:21:1::0;22654:2;22634:18;;;22627:30;22693:34;22673:18;;;22666:62;-1:-1:-1;;;22744:18:1;;;22737:52;22806:19;;43215:87:0::1;22413:418:1::0;43215:87:0::1;43317:9;43313:247;43336:7;:14;43332:1;:18;43313:247;;;43371:14;43388:7;43396:1;43388:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43413:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;:33;;-1:-1:-1;;43413:33:0::1;43442:4;43413:33;::::0;;43478:18;;43388:10;;-1:-1:-1;43478:15:0;;43494:1;;43478:18;::::1;;;;;:::i;:::-;;;;;;;43461:35;;43511:37;43521:10;43533:6;43541;43511:9;:37::i;:::-;43356:204;;43352:3;;;;;:::i;:::-;;;;43313:247;;;-1:-1:-1::0;43610:5:0::1;43595:12;-1:-1:-1::0;;;43605:2:0::1;43595:12;:::i;:::-;:20;;;;:::i;:::-;43572;:43:::0;43660:5:::1;43644:13;-1:-1:-1::0;;;43654:3:0::1;43644:13;:::i;:::-;:21;;;;:::i;:::-;43626:14;:39:::0;43678:13:::1;:20:::0;;-1:-1:-1;;;;43709:28:0;-1:-1:-1;;;43709:28:0;;;43762:12:::1;43748:11;:26:::0;43785:11:::1;:27:::0;;;43828:6:::1;::::0;::::1;::::0;-1:-1:-1;;43828:6:0::1;43966:9;:22:::0;;-1:-1:-1;;;;;;43966:22:0::1;43912:42;43966:22:::0;;::::1;::::0;;;44046:20:::1;::::0;;-1:-1:-1;;;44046:20:0;;;;43912:42;;44046:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;43912:42;44046:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44034:44:0::1;;44087:4;44094:10;-1:-1:-1::0;;;;;44094:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44034:78;::::0;-1:-1:-1;;;;;;44034:78:0::1;::::0;;;;;;-1:-1:-1;;;;;23066:15:1;;;44034:78:0::1;::::0;::::1;23048:34:1::0;23118:15;;23098:18;;;23091:43;22983:18;;44034:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44025:6;:87:::0;;-1:-1:-1;;;;;;44025:87:0::1;-1:-1:-1::0;;;;;44025:87:0;;;::::1;::::0;;::::1;::::0;;44123:48:::1;::::0;-1:-1:-1;44123:25:0::1;:48::i;:::-;44211:6;::::0;44182:43:::1;::::0;-1:-1:-1;;;;;44211:6:0::1;::::0;44182:20:::1;:43::i;:::-;44273:6;::::0;44236:51:::1;::::0;-1:-1:-1;;;;;44273:6:0::1;::::0;44236:28:::1;:51::i;:::-;44364:1;44340:21;:25;44332:78;;;::::0;-1:-1:-1;;;44332:78:0;;23347:2:1;44332:78:0::1;::::0;::::1;23329:21:1::0;23386:2;23366:18;;;23359:30;23425:34;23405:18;;;23398:62;-1:-1:-1;;;23476:18:1;;;23469:38;23524:19;;44332:78:0::1;23145:404:1::0;44332:78:0::1;44458:1;44431:24;44449:4;44431:9;:24::i;:::-;:28;44423:84;;;::::0;-1:-1:-1;;;44423:84:0;;23756:2:1;44423:84:0::1;::::0;::::1;23738:21:1::0;23795:2;23775:18;;;23768:30;23834:34;23814:18;;;23807:62;-1:-1:-1;;;23885:18:1;;;23878:41;23936:19;;44423:84:0::1;23554:407:1::0;44423:84:0::1;44552:9;::::0;44520:69:::1;::::0;44537:4:::1;::::0;-1:-1:-1;;;;;44552:9:0::1;44564:24;44537:4:::0;44564:9:::1;:24::i;44520:69::-;44600:9;::::0;-1:-1:-1;;;;;44600:9:0::1;:25;44633:21;44678:4;44698:24;44678:4:::0;44698:9:::1;:24::i;:::-;44737:1;44780::::0;44823:10:::1;44848:15;44600:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44885:15;40054::::0;;40044:7;:25;40096:21;;40080:13;:37;40000:125;25306:371;-1:-1:-1;;;;;25433:19:0;;25425:68;;;;-1:-1:-1;;;25425:68:0;;25091:2:1;25425:68:0;;;25073:21:1;25130:2;25110:18;;;25103:30;25169:34;25149:18;;;25142:62;-1:-1:-1;;;25220:18:1;;;25213:34;25264:19;;25425:68:0;24889:400:1;25425:68:0;-1:-1:-1;;;;;25512:21:0;;25504:68;;;;-1:-1:-1;;;25504:68:0;;25496:2:1;25504:68:0;;;25478:21:1;25535:2;25515:18;;;25508:30;25574:34;25554:18;;;25547:62;-1:-1:-1;;;25625:18:1;;;25618:32;25667:19;;25504:68:0;25294:398:1;25504:68:0;-1:-1:-1;;;;;25585:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25637:32;;2073:25:1;;;25637:32:0;;2046:18:1;25637:32:0;;;;;;;25306:371;;;:::o;25685:3850::-;-1:-1:-1;;;;;25807:18:0;;25799:68;;;;-1:-1:-1;;;25799:68:0;;25899:2:1;25799:68:0;;;25881:21:1;25938:2;25918:18;;;25911:30;25977:34;25957:18;;;25950:62;-1:-1:-1;;;26028:18:1;;;26021:35;26073:19;;25799:68:0;25697:401:1;25799:68:0;-1:-1:-1;;;;;25886:16:0;;25878:64;;;;-1:-1:-1;;;25878:64:0;;26305:2:1;25878:64:0;;;26287:21:1;26344:2;26324:18;;;26317:30;26383:34;26363:18;;;26356:62;-1:-1:-1;;;26434:18:1;;;26427:33;26477:19;;25878:64:0;26103:399:1;25878:64:0;25970:1;25961:6;:10;25953:64;;;;-1:-1:-1;;;25953:64:0;;26709:2:1;25953:64:0;;;26691:21:1;26748:2;26728:18;;;26721:30;26787:34;26767:18;;;26760:62;-1:-1:-1;;;26838:18:1;;;26831:39;26887:19;;25953:64:0;26507:405:1;25953:64:0;26036:13;;-1:-1:-1;;;26036:13:0;;;;26032:134;;-1:-1:-1;;;;;26073:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;26101:22:0;;;;;;:18;:22;;;;;;;;26073:50;26065:89;;;;-1:-1:-1;;;26065:89:0;;27119:2:1;26065:89:0;;;27101:21:1;27158:2;27138:18;;;27131:30;27197:28;27177:18;;;27170:56;27243:18;;26065:89:0;26917:350:1;26065:89:0;-1:-1:-1;;;;;26181:24:0;;;;;;:18;:24;;;;;;;;26178:383;;;-1:-1:-1;;;;;26224:29:0;;;;;;:25;:29;;;;;;;;26221:329;;;26291:23;:21;:23::i;:::-;26281:6;:33;;26273:98;;;;-1:-1:-1;;;26273:98:0;;27474:2:1;26273:98:0;;;27456:21:1;27513:2;27493:18;;;27486:30;27552:34;27532:18;;;27525:62;-1:-1:-1;;;27603:18:1;;;27596:50;27663:19;;26273:98:0;27272:416:1;26273:98:0;26221:329;;;-1:-1:-1;;;;;26397:22:0;;;;;;:18;:22;;;;;;;;26393:157;;26439:95;;-1:-1:-1;;;26439:95:0;;27895:2:1;26439:95:0;;;27877:21:1;27934:2;27914:18;;;27907:30;27973:34;27953:18;;;27946:62;28044:34;28024:18;;;28017:62;-1:-1:-1;;;28095:19:1;;;28088:52;28157:19;;26439:95:0;27693:489:1;26393:157:0;26578:14;;;;;;;26575:788;;;9864:7;9891:6;-1:-1:-1;;;;;26630:15:0;;;9891:6;;26630:15;;;;:49;;-1:-1:-1;9864:7:0;9891:6;-1:-1:-1;;;;;26666:13:0;;;9891:6;;26666:13;;26630:49;:86;;;;-1:-1:-1;;;;;;26700:16:0;;;;26630:86;:128;;;;-1:-1:-1;;;;;;26737:21:0;;26751:6;26737:21;;26630:128;:166;;;;-1:-1:-1;26780:16:0;;-1:-1:-1;;;26780:16:0;;;;26779:17;26630:166;26608:744;;;-1:-1:-1;;;;;26860:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;26896:35:0;;;;;;:31;:35;;;;;;;;26895:36;26860:71;26856:481;;;26974:20;;26964:6;:30;;26956:96;;;;-1:-1:-1;;;26956:96:0;;28389:2:1;26956:96:0;;;28371:21:1;28428:2;28408:18;;;28401:30;28467:34;28447:18;;;28440:62;-1:-1:-1;;;28518:18:1;;;28511:51;28579:19;;26956:96:0;28187:417:1;26956:96:0;26856:481;;;-1:-1:-1;;;;;27124:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;27158:37:0;;;;;;:31;:37;;;;;;;;27157:38;27124:71;27120:217;;;27238:20;;27228:6;:30;;27220:97;;;;-1:-1:-1;;;27220:97:0;;28811:2:1;27220:97:0;;;28793:21:1;28850:2;28830:18;;;28823:30;28889:34;28869:18;;;28862:62;-1:-1:-1;;;28940:18:1;;;28933:52;29002:19;;27220:97:0;28609:418:1;27220:97:0;27375:28;27406:24;27424:4;27406:9;:24::i;:::-;27496:23;;27580:16;;27375:55;;-1:-1:-1;27472:47:0;;;;-1:-1:-1;;;27580:16:0;;;;27579:17;:55;;;;-1:-1:-1;27613:21:0;;-1:-1:-1;;;27613:21:0;;;;27579:55;:93;;;;-1:-1:-1;27661:6:0;;27671:1;;27651:17;;-1:-1:-1;;;;;27661:6:0;27651:9;:17::i;:::-;:21;27579:93;:133;;;;-1:-1:-1;;;;;;27690:22:0;;;;;;:18;:22;;;;;;;;27689:23;27579:133;:175;;;;-1:-1:-1;;;;;;27730:24:0;;;;;;:18;:24;;;;;;;;27729:25;27579:175;:221;;;;-1:-1:-1;;;;;;27771:29:0;;;;;;:25;:29;;;;;;;;27579:221;:261;;;;;27817:23;27579:261;27561:328;;;27867:10;:8;:10::i;:::-;27901:14;:12;:14::i;:::-;13410:1;27926:15;:26;-1:-1:-1;;;;;27970:24:0;;;;;;:18;:24;;;;;;;;27969:25;:52;;;;-1:-1:-1;;;;;;27999:22:0;;;;;;:18;:22;;;;;;;;27998:23;27969:52;27965:1490;;;-1:-1:-1;;;;;28047:15:0;;;;;;:9;:15;;;;;;;;28046:16;;:33;;-1:-1:-1;9864:7:0;9891:6;-1:-1:-1;;;;;28066:13:0;;;9891:6;;28066:13;28046:33;:58;;;-1:-1:-1;;;;;;28083:21:0;;28097:6;28083:21;28046:58;28038:142;;;;-1:-1:-1;;;28038:142:0;;29234:2:1;28038:142:0;;;29216:21:1;29273:2;29253:18;;;29246:30;29312:34;29292:18;;;29285:62;29383:34;29363:18;;;29356:62;-1:-1:-1;;;29434:19:1;;;29427:38;29482:19;;28038:142:0;29032:475:1;28038:142:0;28227:14;;28217:6;28201:13;28211:2;28201:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;:74;;;-1:-1:-1;;;;;;28245:30:0;;;;;;:26;:30;;;;;;;;28201:74;28193:120;;;;-1:-1:-1;;;28193:120:0;;29714:2:1;28193:120:0;;;29696:21:1;29753:2;29733:18;;;29726:30;29792:34;29772:18;;;29765:62;-1:-1:-1;;;29843:18:1;;;29836:31;29884:19;;28193:120:0;29512:397:1;28193:120:0;-1:-1:-1;;;;;28354:31:0;;;;;;:25;:31;;;;;;;;28350:1094;;;28485:11;;28471;;:25;;;;:::i;:::-;28456:12;:40;28452:669;;;28519:26;28536:2;28540:4;28519:16;:26::i;:::-;28581:1;28566:11;;:16;;;;;;;:::i;:::-;;;;-1:-1:-1;;28608:19:0;;-1:-1:-1;;;;;983:32:1;;965:51;;28608:19:0;;953:2:1;938:18;28608:19:0;;;;;;;28660:10;;28650:7;:20;28726:17;;28707:16;;:36;;28726:17;28707:36;:::i;:::-;28691:13;:52;;;28769:17;28766:91;;13326:1;28812:15;:21;28766:91;28350:1094;;28452:669;28913:10;;28903:7;:20;28979:17;;28960:16;;:36;;28979:17;28960:36;:::i;28350:1094::-;-1:-1:-1;;;;;29180:29:0;;;;;;:25;:29;;;;;;;;29176:268;;;29240:11;;29230:7;:21;29306:18;;29286:17;;:38;;29306:18;29286:38;:::i;:::-;29270:13;:54;;;29346:17;29343:86;;13366:1;29387:15;:22;29343:86;29467:32;29482:4;29488:2;29492:6;29467:14;:32::i;:::-;29510:15;40054;;40044:7;:25;40096:21;;40080:13;:37;40000:125;29510:15;25788:3747;;25685:3850;;;:::o;37873:163::-;37915:7;37936:15;37953;37972:19;:17;:19::i;:::-;37935:56;;-1:-1:-1;37935:56:0;-1:-1:-1;38009:19:0;37935:56;;38009:19;:::i;20871:107::-;-1:-1:-1;;;;;20945:17:0;;;;;;;;:9;:17;;;;;:25;;-1:-1:-1;;20945:25:0;;;;;;;;;;20871:107::o;36162:742::-;36262:7;36284;36306;36328;36350;36372;36422:23;36460:12;36487:18;36519:20;36531:7;36519:11;:20::i;:::-;36407:132;;;;;;36551:15;36568:23;36593:12;36609:113;36635:7;36657:4;36676:10;36701;:8;:10::i;:::-;36609:11;:113::i;:::-;36550:172;;;;-1:-1:-1;36550:172:0;;-1:-1:-1;36826:15:0;;-1:-1:-1;36856:4:0;;-1:-1:-1;36875:10:0;;-1:-1:-1;36162:742:0;;-1:-1:-1;;;;;36162:742:0:o;29543:1444::-;16024:16;:23;;-1:-1:-1;;;;16024:23:0;-1:-1:-1;;;16024:23:0;;;;29620:24:::1;29638:4;29620:9;:24::i;:::-;29594:50;;29655:25;29708:23;;29683:22;;:48;;;;:::i;:::-;29655:76;;29742:12;29838:23;;29864:2;29838:28;;;;:::i;:::-;29819:15;:47;29816:124;;29900:23;::::0;:28:::1;::::0;29926:2:::1;29900:28;:::i;:::-;29882:46;;29816:124;29955:20:::0;;;:46:::1;;-1:-1:-1::0;29979:22:0;;29955:46:::1;29952:60;;;30004:7;;;;;29952:60;30073:26;30165:1;30145:17;30120:22;;30102:15;:40;;;;:::i;:::-;:60;;;;:::i;:::-;:64;;;;:::i;:::-;30073:93:::0;-1:-1:-1;30177:26:0::1;30206:36;30073:93:::0;30206:15;:36:::1;:::i;:::-;30177:65;;30255:36;30272:18;30255:16;:36::i;:::-;30448:22;::::0;30325:21:::1;::::0;30304:18:::1;::::0;30448:24:::1;::::0;30471:1:::1;::::0;30448:24:::1;:::i;:::-;30427:46;::::0;:17;:46:::1;:::i;:::-;30399:23;::::0;30386:37:::1;::::0;:10;:37:::1;:::i;:::-;:88;;;;:::i;:::-;30359:115:::0;-1:-1:-1;30487:23:0::1;30513:29;30359:115:::0;30513:10;:29:::1;:::i;:::-;30580:1;30555:22;:26:::0;;;30592:23:::1;:27:::0;30487:55;-1:-1:-1;30635:22:0;;;;;:45:::1;;;30679:1;30661:15;:19;30635:45;30632:216;;;30696:49;30709:18;30729:15;30696:12;:49::i;:::-;30765:71;::::0;;11140:25:1;;;11196:2;11181:18;;11174:34;;;11224:18;;;11217:34;;;30765:71:0::1;::::0;11128:2:1;11113:18;30765:71:0::1;;;;;;;30632:216;30922:17;::::0;30914:65:::1;::::0;-1:-1:-1;;;;;30922:17:0;;::::1;::::0;30953:21:::1;::::0;30914:65:::1;::::0;;;30953:21;30922:17;30914:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;16058:1:0::1;16070:16:::0;:24;;-1:-1:-1;;;;16070:24:0;;;29543:1444::o;23208:326::-;-1:-1:-1;;;;;23291:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;23291:39:0;;;;;;;;23341:31;:37;;;;;:45;;;;;;;;23397:26;:32;;;;;;;:40;;;;;;;;;;;23448:35;;23458:23;23476:4;23458:17;:23::i;:::-;23497:5;23493:34;;23504:21;23520:4;23504:15;:21::i;39757:235::-;39804:7;;:12;:34;;;;-1:-1:-1;39820:13:0;;:18;39804:34;39800:47;;;39757:235::o;39800:47::-;39877:7;;;39859:15;:25;39919:13;;;39895:21;:37;-1:-1:-1;39945:11:0;;;;39967:17;39757:235::o;32633:604::-;-1:-1:-1;;;;;32767:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;32791:22:0;;;;;;:11;:22;;;;;;;;32790:23;32767:46;32763:467;;;32830:48;32852:6;32860:9;32871:6;32830:21;:48::i;:::-;32633:604;;;:::o;32763:467::-;-1:-1:-1;;;;;32901:19:0;;;;;;:11;:19;;;;;;;;32900:20;:46;;;;-1:-1:-1;;;;;;32924:22:0;;;;;;:11;:22;;;;;;;;32900:46;32896:334;;;32963:46;32983:6;32991:9;33002:6;32963:19;:46::i;32896:334::-;-1:-1:-1;;;;;33031:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33054:22:0;;;;;;:11;:22;;;;;;;;33031:45;33027:203;;;33093:48;33115:6;33123:9;33134:6;33093:21;:48::i;33027:203::-;33174:44;33192:6;33200:9;33211:6;33174:17;:44::i;38044:598::-;38142:7;;38095;;;;-1:-1:-1;;;38095:7:0;38196:332;38220:9;:16;38216:20;;38196:332;;;38304:7;38280;:21;38288:9;38298:1;38288:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38288:12:0;38280:21;;;;;;;;;;;;;:31;;:83;;;38356:7;38332;:21;38340:9;38350:1;38340:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38340:12:0;38332:21;;;;;;;;;;;;;:31;38280:83;38258:146;;;-1:-1:-1;;38387:7:0;;;-1:-1:-1;;;12661:15:0;-1:-1:-1;38044:598:0;-1:-1:-1;;38044:598:0:o;38258:146::-;38438:7;:21;38446:9;38456:1;38446:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38446:12:0;38438:21;;;;;;;;;;;;;38429:31;;:7;:31;:::i;:::-;38419:41;;38494:7;:21;38502:9;38512:1;38502:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38502:12:0;38494:21;;;;;;;;;;;;;38485:31;;:7;:31;:::i;:::-;38475:41;-1:-1:-1;38238:3:0;;;;:::i;:::-;;;;38196:332;;;;-1:-1:-1;;;38552:7:0;;:19;;;;:::i;:::-;38542:7;:29;38538:60;;;-1:-1:-1;;38581:7:0;;;-1:-1:-1;;;12661:15:0;-1:-1:-1;38044:598:0;-1:-1:-1;38044:598:0:o;38538:60::-;38617:7;;38626;;-1:-1:-1;38044:598:0;-1:-1:-1;38044:598:0:o;36912:406::-;37013:7;37035;37057;37092:12;37107:24;37123:7;37107:15;:24::i;:::-;37092:39;;37142:18;37163:30;37185:7;37163:21;:30::i;:::-;37142:51;-1:-1:-1;37204:23:0;37142:51;37230:14;37239:4;37230:7;:14;:::i;:::-;:27;;;;:::i;:::-;37204:53;37293:4;;-1:-1:-1;37299:10:0;;-1:-1:-1;36912:406:0;;-1:-1:-1;;;36912:406:0:o;37326:539::-;37525:7;;;;37622:21;37631:11;37622:7;:21;:::i;:::-;37604:39;-1:-1:-1;37654:12:0;37669:18;37675:11;37669:4;:18;:::i;:::-;37654:33;-1:-1:-1;37698:18:0;37719:24;37731:11;37719:10;:24;:::i;:::-;37698:45;-1:-1:-1;37754:23:0;37698:45;37780:14;37789:4;37780:7;:14;:::i;:::-;:27;;;;:::i;:::-;37826:7;;;;-1:-1:-1;37852:4:0;;-1:-1:-1;37326:539:0;;-1:-1:-1;;;;;;;37326:539:0:o;31297:481::-;31387:16;;;31401:1;31387:16;;;;;;;;31363:21;;31387:16;;;;;;;;;;-1:-1:-1;31387:16:0;31363:40;;31432:4;31414;31419:1;31414:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31414:23:0;;;:7;;;;;;;;;;:23;;;;31458:9;;:16;;;-1:-1:-1;;;31458:16:0;;;;:9;;;;;:14;;:16;;;;;31414:7;;31458:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31448:4;31453:1;31448:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31448:26:0;;;:7;;;;;;;;;:26;31517:9;;31485:56;;31502:4;;31517:9;31529:11;31485:8;:56::i;:::-;31552:9;;:218;;-1:-1:-1;;;31552:218:0;;-1:-1:-1;;;;;31552:9:0;;;;:60;;:218;;31627:11;;31552:9;;31697:4;;31724;;31744:15;;31552:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31352:426;31297:481;:::o;32215:410::-;32328:9;;32296:56;;32313:4;;-1:-1:-1;;;;;32328:9:0;32340:11;32296:8;:56::i;:::-;32363:9;;:254;;-1:-1:-1;;;32363:254:0;;-1:-1:-1;;;;;32363:9:0;;;;:25;;32396:9;;32363:254;;32429:4;;32449:11;;32363:9;;;;32569:6;;32591:15;;32363:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34575:677::-;34726:15;34756:23;34794:12;34821:23;34859:12;34886:18;34918:19;34929:7;34918:10;:19::i;:::-;-1:-1:-1;;;;;34966:15:0;;;;;;:7;:15;;;;;;34711:226;;-1:-1:-1;34711:226:0;;-1:-1:-1;34711:226:0;;-1:-1:-1;34711:226:0;-1:-1:-1;34711:226:0;-1:-1:-1;34711:226:0;-1:-1:-1;34966:25:0;;34983:7;;34966:25;:::i;:::-;-1:-1:-1;;;;;34948:15:0;;;;;;:7;:15;;;;;;;;:43;;;;35020:7;:15;;;;:25;;35037:7;;35020:25;:::i;:::-;-1:-1:-1;;;;;35002:15:0;;;;;;;:7;:15;;;;;;:43;;;;35077:18;;;;;;;:36;;35097:15;;35077:36;:::i;:::-;-1:-1:-1;;;;;35056:18:0;;;;;;:7;:18;;;;;:57;35124:26;35139:10;35124:14;:26::i;:::-;35161:23;35173:4;35179;35161:11;:23::i;:::-;35217:9;-1:-1:-1;;;;;35200:44:0;35209:6;-1:-1:-1;;;;;35200:44:0;;35228:15;35200:44;;;;2073:25:1;;2061:2;2046:18;;1927:177;35200:44:0;;;;;;;;34700:552;;;;;;34575:677;;;:::o;33872:695::-;34021:15;34051:23;34089:12;34116:23;34154:12;34181:18;34213:19;34224:7;34213:10;:19::i;:::-;-1:-1:-1;;;;;34261:15:0;;;;;;:7;:15;;;;;;34006:226;;-1:-1:-1;34006:226:0;;-1:-1:-1;34006:226:0;;-1:-1:-1;34006:226:0;-1:-1:-1;34006:226:0;-1:-1:-1;34006:226:0;-1:-1:-1;34261:27:0;;34006:226;;34261:27;:::i;:::-;-1:-1:-1;;;;;34243:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;34320:18;;;;;:7;:18;;;;;:38;;34342:15;;34320:38;:::i;:::-;-1:-1:-1;;;;;34299:18:0;;;;;;:7;:18;;;;;;;;:59;;;;34390:7;:18;;;;:38;;34412:15;;34390:38;:::i;35260:745::-;35411:15;35441:23;35479:12;35506:23;35544:12;35571:18;35603:19;35614:7;35603:10;:19::i;:::-;-1:-1:-1;;;;;35651:15:0;;;;;;:7;:15;;;;;;35396:226;;-1:-1:-1;35396:226:0;;-1:-1:-1;35396:226:0;;-1:-1:-1;35396:226:0;-1:-1:-1;35396:226:0;-1:-1:-1;35396:226:0;-1:-1:-1;35651:25:0;;35668:7;;35651:25;:::i;:::-;-1:-1:-1;;;;;35633:15:0;;;;;;:7;:15;;;;;;;;:43;;;;35705:7;:15;;;;:25;;35722:7;;35705:25;:::i;33245:619::-;33392:15;33422:23;33460:12;33487:23;33525:12;33552:18;33584:19;33595:7;33584:10;:19::i;:::-;-1:-1:-1;;;;;33632:15:0;;;;;;:7;:15;;;;;;33377:226;;-1:-1:-1;33377:226:0;;-1:-1:-1;33377:226:0;;-1:-1:-1;33377:226:0;-1:-1:-1;33377:226:0;-1:-1:-1;33377:226:0;-1:-1:-1;33632:25:0;;33377:226;;33632:25;:::i;39449:124::-;39513:7;39560:5;39550:7;;39540;:17;;;;:::i;:::-;:25;;;;:::i;39581:168::-;39678:7;39736:5;39720:13;;39710:7;:23;;;;:::i;38650:791::-;13326:1;38716:15;;:22;38713:433;;;38812:13;;38793:16;;38780:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;38754:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;38900:13:0;;38880:17;;38867:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;38840:23;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;38713:433:0;;-1:-1:-1;38713:433:0;;13366:1;38934:15;;:23;38931:215;;;39032:13;;39012:17;;38999:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;38973:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;39121:13:0;;39100:18;;39087:31;;:10;:31;:::i;:::-;:47;;;;:::i;:::-;39060:23;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;;38931:215:0;39156:19;39178:10;:8;:10::i;:::-;39156:32;-1:-1:-1;39199:18:0;39220:26;39156:32;39220:10;:26;:::i;:::-;39298:4;39282:22;;;;:7;:22;;;;;;39199:47;;-1:-1:-1;39282:35:0;;39199:47;;39282:35;:::i;:::-;39273:4;39257:22;;;;:7;:22;;;;;;;;:60;;;;39332:11;:26;;;;;;39328:105;;;39414:4;39398:22;;;;:7;:22;;;;;;:35;;39423:10;;39398:35;:::i;:::-;39389:4;39373:22;;;;:7;:22;;;;;:60;38702:739;;38650:791;:::o;36013:141::-;36100:4;36091:7;;:14;;;;:::i;:::-;36081:7;:24;36129:10;;:17;;36141:4;;36129:17;:::i;:::-;36116:10;:30;-1:-1:-1;;36013:141:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:597::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;637:6;634:1;631:13;628:91;;;707:1;702:2;693:6;682:9;678:22;674:31;667:42;628:91;-1:-1:-1;780:2:1;759:15;-1:-1:-1;;755:29:1;740:45;;;;787:2;736:54;;199:597;-1:-1:-1;;;199:597:1:o;1027:131::-;-1:-1:-1;;;;;1102:31:1;;1092:42;;1082:70;;1148:1;1145;1138:12;1163:315;1231:6;1239;1292:2;1280:9;1271:7;1267:23;1263:32;1260:52;;;1308:1;1305;1298:12;1260:52;1347:9;1334:23;1366:31;1391:5;1366:31;:::i;:::-;1416:5;1468:2;1453:18;;;;1440:32;;-1:-1:-1;;;1163:315:1:o;1675:247::-;1734:6;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;1842:9;1829:23;1861:31;1886:5;1861:31;:::i;2109:316::-;2186:6;2194;2202;2255:2;2243:9;2234:7;2230:23;2226:32;2223:52;;;2271:1;2268;2261:12;2223:52;-1:-1:-1;;2294:23:1;;;2364:2;2349:18;;2336:32;;-1:-1:-1;2415:2:1;2400:18;;;2387:32;;2109:316;-1:-1:-1;2109:316:1:o;2430:456::-;2507:6;2515;2523;2576:2;2564:9;2555:7;2551:23;2547:32;2544:52;;;2592:1;2589;2582:12;2544:52;2631:9;2618:23;2650:31;2675:5;2650:31;:::i;:::-;2700:5;-1:-1:-1;2757:2:1;2742:18;;2729:32;2770:33;2729:32;2770:33;:::i;:::-;2430:456;;2822:7;;-1:-1:-1;;;2876:2:1;2861:18;;;;2848:32;;2430:456::o;3512:118::-;3598:5;3591:13;3584:21;3577:5;3574:32;3564:60;;3620:1;3617;3610:12;3635:309;3700:6;3708;3761:2;3749:9;3740:7;3736:23;3732:32;3729:52;;;3777:1;3774;3767:12;3729:52;3813:9;3800:23;3790:33;;3873:2;3862:9;3858:18;3845:32;3886:28;3908:5;3886:28;:::i;:::-;3933:5;3923:15;;;3635:309;;;;;:::o;3949:382::-;4014:6;4022;4075:2;4063:9;4054:7;4050:23;4046:32;4043:52;;;4091:1;4088;4081:12;4043:52;4130:9;4117:23;4149:31;4174:5;4149:31;:::i;:::-;4199:5;-1:-1:-1;4256:2:1;4241:18;;4228:32;4269:30;4228:32;4269:30;:::i;4336:388::-;4404:6;4412;4465:2;4453:9;4444:7;4440:23;4436:32;4433:52;;;4481:1;4478;4471:12;4433:52;4520:9;4507:23;4539:31;4564:5;4539:31;:::i;:::-;4589:5;-1:-1:-1;4646:2:1;4631:18;;4618:32;4659:33;4618:32;4659:33;:::i;4729:241::-;4785:6;4838:2;4826:9;4817:7;4813:23;4809:32;4806:52;;;4854:1;4851;4844:12;4806:52;4893:9;4880:23;4912:28;4934:5;4912:28;:::i;4975:127::-;5036:10;5031:3;5027:20;5024:1;5017:31;5067:4;5064:1;5057:15;5091:4;5088:1;5081:15;5107:275;5178:2;5172:9;5243:2;5224:13;;-1:-1:-1;;5220:27:1;5208:40;;5278:18;5263:34;;5299:22;;;5260:62;5257:88;;;5325:18;;:::i;:::-;5361:2;5354:22;5107:275;;-1:-1:-1;5107:275:1:o;5387:183::-;5447:4;5480:18;5472:6;5469:30;5466:56;;;5502:18;;:::i;:::-;-1:-1:-1;5547:1:1;5543:14;5559:4;5539:25;;5387:183::o;5575:662::-;5629:5;5682:3;5675:4;5667:6;5663:17;5659:27;5649:55;;5700:1;5697;5690:12;5649:55;5736:6;5723:20;5762:4;5786:60;5802:43;5842:2;5802:43;:::i;:::-;5786:60;:::i;:::-;5880:15;;;5966:1;5962:10;;;;5950:23;;5946:32;;;5911:12;;;;5990:15;;;5987:35;;;6018:1;6015;6008:12;5987:35;6054:2;6046:6;6042:15;6066:142;6082:6;6077:3;6074:15;6066:142;;;6148:17;;6136:30;;6186:12;;;;6099;;6066:142;;;-1:-1:-1;6226:5:1;5575:662;-1:-1:-1;;;;;;5575:662:1:o;6242:1283::-;6369:6;6377;6385;6438:2;6426:9;6417:7;6413:23;6409:32;6406:52;;;6454:1;6451;6444:12;6406:52;6494:9;6481:23;6523:18;6564:2;6556:6;6553:14;6550:34;;;6580:1;6577;6570:12;6550:34;6618:6;6607:9;6603:22;6593:32;;6663:7;6656:4;6652:2;6648:13;6644:27;6634:55;;6685:1;6682;6675:12;6634:55;6721:2;6708:16;6743:4;6767:60;6783:43;6823:2;6783:43;:::i;6767:60::-;6861:15;;;6943:1;6939:10;;;;6931:19;;6927:28;;;6892:12;;;;6967:19;;;6964:39;;;6999:1;6996;6989:12;6964:39;7023:11;;;;7043:217;7059:6;7054:3;7051:15;7043:217;;;7139:3;7126:17;7156:31;7181:5;7156:31;:::i;:::-;7200:18;;7076:12;;;;7238;;;;7043:217;;;7279:5;-1:-1:-1;;7322:18:1;;7309:32;;-1:-1:-1;;7353:16:1;;;7350:36;;;7382:1;7379;7372:12;7350:36;;7405:63;7460:7;7449:8;7438:9;7434:24;7405:63;:::i;:::-;7395:73;;;7515:2;7504:9;7500:18;7487:32;7477:42;;6242:1283;;;;;:::o;7530:356::-;7732:2;7714:21;;;7751:18;;;7744:30;7810:34;7805:2;7790:18;;7783:62;7877:2;7862:18;;7530:356::o;7891:127::-;7952:10;7947:3;7943:20;7940:1;7933:31;7983:4;7980:1;7973:15;8007:4;8004:1;7997:15;8023:168;8063:7;8129:1;8125;8121:6;8117:14;8114:1;8111:21;8106:1;8099:9;8092:17;8088:45;8085:71;;;8136:18;;:::i;:::-;-1:-1:-1;8176:9:1;;8023:168::o;8196:217::-;8236:1;8262;8252:132;;8306:10;8301:3;8297:20;8294:1;8287:31;8341:4;8338:1;8331:15;8369:4;8366:1;8359:15;8252:132;-1:-1:-1;8398:9:1;;8196:217::o;10446:128::-;10486:3;10517:1;10513:6;10510:1;10507:13;10504:39;;;10523:18;;:::i;:::-;-1:-1:-1;10559:9:1;;10446:128::o;12792:127::-;12853:10;12848:3;12844:20;12841:1;12834:31;12884:4;12881:1;12874:15;12908:4;12905:1;12898:15;12924:125;12964:4;12992:1;12989;12986:8;12983:34;;;12997:18;;:::i;:::-;-1:-1:-1;13034:9:1;;12924:125::o;13054:127::-;13115:10;13110:3;13106:20;13103:1;13096:31;13146:4;13143:1;13136:15;13170:4;13167:1;13160:15;13186:135;13225:3;-1:-1:-1;;13246:17:1;;13243:43;;;13266:18;;:::i;:::-;-1:-1:-1;13313:1:1;13302:13;;13186:135::o;16055:251::-;16125:6;16178:2;16166:9;16157:7;16153:23;16149:32;16146:52;;;16194:1;16191;16184:12;16146:52;16226:9;16220:16;16245:31;16270:5;16245:31;:::i;16311:461::-;16364:3;16402:5;16396:12;16429:6;16424:3;16417:19;16455:4;16484:2;16479:3;16475:12;16468:19;;16521:2;16514:5;16510:14;16542:1;16552:195;16566:6;16563:1;16560:13;16552:195;;;16631:13;;-1:-1:-1;;;;;16627:39:1;16615:52;;16687:12;;;;16722:15;;;;16663:1;16581:9;16552:195;;;-1:-1:-1;16763:3:1;;16311:461;-1:-1:-1;;;;;16311:461:1:o;16777:332::-;16984:6;16973:9;16966:25;17027:2;17022;17011:9;17007:18;17000:30;16947:4;17047:56;17099:2;17088:9;17084:18;17076:6;17047:56;:::i;:::-;17039:64;16777:332;-1:-1:-1;;;;16777:332:1:o;17114:881::-;17209:6;17240:2;17283;17271:9;17262:7;17258:23;17254:32;17251:52;;;17299:1;17296;17289:12;17251:52;17332:9;17326:16;17365:18;17357:6;17354:30;17351:50;;;17397:1;17394;17387:12;17351:50;17420:22;;17473:4;17465:13;;17461:27;-1:-1:-1;17451:55:1;;17502:1;17499;17492:12;17451:55;17531:2;17525:9;17554:60;17570:43;17610:2;17570:43;:::i;17554:60::-;17648:15;;;17730:1;17726:10;;;;17718:19;;17714:28;;;17679:12;;;;17754:19;;;17751:39;;;17786:1;17783;17776:12;17751:39;17810:11;;;;17830:135;17846:6;17841:3;17838:15;17830:135;;;17912:10;;17900:23;;17863:12;;;;17943;;;;17830:135;;;17984:5;17114:881;-1:-1:-1;;;;;;;17114:881:1:o;18712:184::-;18782:6;18835:2;18823:9;18814:7;18810:23;18806:32;18803:52;;;18851:1;18848;18841:12;18803:52;-1:-1:-1;18874:16:1;;18712:184;-1:-1:-1;18712:184:1:o;19180:245::-;19247:6;19300:2;19288:9;19279:7;19275:23;19271:32;19268:52;;;19316:1;19313;19306:12;19268:52;19348:9;19342:16;19367:28;19389:5;19367:28;:::i;23966:607::-;-1:-1:-1;;;;;24325:15:1;;;24307:34;;24372:2;24357:18;;24350:34;;;;24415:2;24400:18;;24393:34;;;;24458:2;24443:18;;24436:34;;;;24507:15;;;24501:3;24486:19;;24479:44;24287:3;24539:19;;24532:35;;;;24256:3;24241:19;;23966:607::o;24578:306::-;24666:6;24674;24682;24735:2;24723:9;24714:7;24710:23;24706:32;24703:52;;;24751:1;24748;24741:12;24703:52;24780:9;24774:16;24764:26;;24830:2;24819:9;24815:18;24809:25;24799:35;;24874:2;24863:9;24859:18;24853:25;24843:35;;24578:306;;;;;:::o;29914:582::-;30213:6;30202:9;30195:25;30256:6;30251:2;30240:9;30236:18;30229:34;30299:3;30294:2;30283:9;30279:18;30272:31;30176:4;30320:57;30372:3;30361:9;30357:19;30349:6;30320:57;:::i;:::-;-1:-1:-1;;;;;30413:32:1;;;;30408:2;30393:18;;30386:60;-1:-1:-1;30477:3:1;30462:19;30455:35;30312:65;29914:582;-1:-1:-1;;;29914:582:1:o

Swarm Source

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