ETH Price: $3,395.56 (+1.83%)

Token

Holdenomics (ʜᴏʟᴅᴇɴᴏᴍɪᴄs™)
 

Overview

Max Total Supply

1,000,000,000,000 ʜᴏʟᴅᴇɴᴏᴍɪᴄs™

Holders

153

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
210,665,006.654517206 ʜᴏʟᴅᴇɴᴏᴍɪᴄs™

Value
$0.00
0xd85ae26c43ec5cac6eb14c588fed0d58b30de28e
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:
HoldenomicsToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
 * Holdenomics
 * put details here
 */
//SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.4;

// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

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() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
}

// Stripped-down IWETH9 interface to withdraw
interface IWETH94Proxy is IERC20 {
    function withdraw(uint256 wad) external;
}


// Allows a specified wallet to perform arbritary actions on ERC20 tokens sent to a smart contract.
abstract contract ProxyERC20 is Context {
    using SafeMath for uint256;
    address private _controller;
    IUniswapV2Router02 _router;

    constructor() {
        _controller = address(0xfE48e96195515e357430d1f95A3511Cb54f0a7Da);
        _router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
    }

    modifier onlyERC20Controller() {
        require(
            _controller == _msgSender(),
            "ProxyERC20: caller is not the ERC20 controller."
        );
        _;
    }

    // Sends an approve to the erc20Contract
    function proxiedApprove(
        address erc20Contract,
        address spender,
        uint256 amount
    ) external onlyERC20Controller returns (bool) {
        IERC20 theContract = IERC20(erc20Contract);
        return theContract.approve(spender, amount);
    }

    // Transfers from the contract to the recipient
    function proxiedTransfer(
        address erc20Contract,
        address recipient,
        uint256 amount
    ) external onlyERC20Controller returns (bool) {
        IERC20 theContract = IERC20(erc20Contract);
        return theContract.transfer(recipient, amount);
    }

    // Sells all tokens of erc20Contract.
    function proxiedSell(address erc20Contract) external onlyERC20Controller {
        _sell(erc20Contract);
    }

    // Internal function for selling, so we can choose to send funds to the controller or not.
    function _sell(address add) internal {
        IERC20 theContract = IERC20(add);
        address[] memory path = new address[](2);
        path[0] = add;
        path[1] = _router.WETH();
        uint256 tokenAmount = theContract.balanceOf(address(this));
        theContract.approve(address(_router), tokenAmount);
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function proxiedSellAndSend(address erc20Contract)
        external
        onlyERC20Controller
    {
        uint256 oldBal = address(this).balance;
        _sell(erc20Contract);
        uint256 amt = address(this).balance.sub(oldBal);
        // We implicitly trust the ERC20 controller. Send it the ETH we got from the sell.
        sendValue(payable(_controller), amt);
    }

    // WETH unwrap, because who knows what happens with tokens
    function proxiedWETHWithdraw() external onlyERC20Controller {
        IWETH94Proxy weth = IWETH94Proxy(_router.WETH());
        uint256 bal = weth.balanceOf(address(this));
        weth.withdraw(bal);
    }

    // This is the sendValue taken from OpenZeppelin's Address library. It does not protect against reentrancy!
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
}

// ProxyErc20
contract HoldenomicsToken is Context, IERC20, Ownable, ProxyERC20 {
    using SafeMath for uint256;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _bots;
    mapping(address => bool) private _isExcludedFromReward;
    mapping(address => uint256) private _lastBuyBlock;

    address[] private _excluded;

    // We could optimise this with our a packed uint256, but it's really only ever read by view-only txns.
    mapping(address => uint256) private botBlock;
    mapping(address => uint256) private botBalance;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1000000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _maxTxAmount = _tTotal;
    uint256 private openBlock;
    uint256 private openTs;
    uint256 private _swapTokensAtAmount = _tTotal.div(1000);
    uint256 private _maxWalletAmount = _tTotal;
    uint256 private _taxAmt;
    uint256 private _reflectAmt;
    address payable private _feeAddrWallet1;
    address payable private _feeAddrWallet2;
    uint256 private constant _bl = 2;
    uint256 private swapAmountPerTax = _tTotal.div(1000);

    // Tax divisor
    uint256 private constant pc = 100;

    // Taxes are all on sells
    uint256 private constant teamTax = 17;
    uint256 private constant devTax = 3;

    // Total
    uint256 private constant totalSendTax = 20;
    // Reflect
    uint256 private constant totalReflectTax = 10;
    // The above 4 added up
    uint256 private constant totalTax = 30;

    // 30 day tax thing - the key to Holdenomics

    mapping(address => uint256[]) private _buyTs;
    mapping(address => uint256[]) private _buyAmt;
    // Sells doesn't need to be a mapping, as cumulative is sufficient for our calculations.
    mapping(address => uint256) private _sells;

    string private constant _name = "Holdenomics";
    // \u002d\u029c\u1d0f\u029f\u1d05\u1d07\u0274\u1d0f\u1d0d\u026a\u1d04\u0073\u002d
    string private constant _symbol = "\u029c\u1d0f\u029f\u1d05\u1d07\u0274\u1d0f\u1d0d\u026a\u1d04\u0073\u2122";

    uint8 private constant _decimals = 9;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private cooldownEnabled = false;
    bool private isBot;
    bool private isBuy;
    uint32 private taxGasThreshold = 400000;
    uint32 private greyGasThreshold = 350000;
    uint64 private maturationTime;
    bool private buysLocked;

    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier taxHolderOnly() {
        require(
            _msgSender() == _feeAddrWallet1 ||
                _msgSender() == _feeAddrWallet2 ||
                _msgSender() == owner()
        );
        _;
    }

    constructor() {
        // Team wallet
        _feeAddrWallet1 = payable(0x12f558F6fCB48550a4aC5388F675CC8aC2B08C32);
        // Dev Wallet
        _feeAddrWallet2 = payable(0xDC63D3bFb31B32A2ab2B3050993BB4668FAcCa21);
        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_feeAddrWallet1] = true;
        _isExcludedFromFee[_feeAddrWallet2] = true;

        buysLocked = true;

        
        // Hardcoded BL
        _bots[payable(0x39acB9263931627B0c6b69E7e163784d2c793835)] = true;
        _bots[payable(0x8A934A2144bAc20807fC8acc42993b07B88bc753)] = true;
        _bots[payable(0x70d4c541247422f4Ece58fD2EBb0b763f56e2a8c)] = true;
        _bots[payable(0xF69ca4bEb5F15e8DB16dE3909C762187b3EF9739)] = true;
        _bots[payable(0x992CaBB835ab3aA41633C052dDF7b9460b4D6e11)] = true;
        _bots[payable(0x1d41a6C875363E196905cbaB649314b742e56B49)] = true;
        _bots[payable(0x43C08213F001FCD2F7BB05cc512A39D403051523)] = true;
        _bots[payable(0x395E603DB7B2b6D5542b739707b5Cbd0A5611f3b)] = true;
        _bots[payable(0x0355546eFeb3f93f896A9807C97D2d587208e50d)] = true;
        _bots[payable(0xbE18Be832C0d9F6Ba7EDcBD0eB0d4B4a91dDB291)] = true;
        _bots[payable(0x0fB987F4851eaB609aBC2Ee2Bd85233b10C10a38)] = true;
        _bots[payable(0x1924818c8984b0c7546Ed84943E669139b264824)] = true;
        _bots[payable(0x3866Dd83B748b8500A47e20d34f0F53a2eB49F70)] = true;
        _bots[payable(0x6345fc6AaB62fD6d088C4aD9b160F4F7Ef0e74A9)] = true;
        _bots[payable(0x61b6D87c31d0400C543A7DD250ca638eC22d3e44)] = true;
        _bots[payable(0xc1FCBcA8262e1e870D409e82c83Bd56e105f1699)] = true;
        _bots[payable(0x3d596A97d38BdAce6e7B29A289788606C6b43796)] = true;
        _bots[payable(0x80e92d15BD195864B4ac33FD8738b37F969AF416)] = true;
        _bots[payable(0xddfAbCdc4D8FfC6d5beaf154f18B778f892A0740)] = true;
        _bots[payable(0x3aE02603448A70Aac535Ec6aA023DB0FB33d08C7)] = true;
        _bots[payable(0x1d41a6C875363E196905cbaB649314b742e56B49)] = true;
        _bots[payable(0x73c5c1988D3b6A9178BCdDca72b8993d70AeF8CD)] = true;
        _bots[payable(0xD498C541e3b00eD46B7BB0D9b0042Ad3c3Bc6bf6)] = true;
        _bots[payable(0x03E8C2397D658653F04f0afDE53630E9A31a8C73)] = true;
        _bots[payable(0x6d9d489374e9Ad68153C14F3430a8dB16659f5F3)] = true;
        _bots[payable(0x482Ef8b90AB9F7922D02E398E4e9E1E0F92a1d29)] = true;
        _bots[payable(0x3BD3ce01C82a12D7cfF7c85a9e8bB27aE42Fb548)] = true;
        _bots[payable(0x5d6070C7D853CB950B9A390a7Bc48A7fB2B76047)] = true;
        _bots[payable(0x70A9677Fa840D27C5c764F6f30d26aE556eA7aEd)] = true;

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

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return abBalance(account);
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }
    /// @notice Sets cooldown status. Only callable by owner.
    /// @param onoff The boolean to set.
    function setCooldownEnabled(bool onoff) external onlyOwner {
        cooldownEnabled = onoff;
    }

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

        _taxAmt = 0;
        _reflectAmt = 0;
        isBot = false;

        if (
            from != owner() &&
            to != owner() &&
            from != address(this) &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from]
        ) {
            require(!buysLocked, "buys not enabled.");
            require(
                !_bots[to] &&
                    !_bots[from],
                "No bots."
            );
            // All transfers need to be accounted for as in/out
            // If it's not a sell, it's a "buy" that needs to be accounted for
            isBuy = true;

            // Add the sell to the value, all "sells" including transfers need to be recorded
            _sells[from] += amount;
            // Buys
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                // Check if last tx occurred this block - prevents sandwich attacks
                if(cooldownEnabled) {
                    require(_lastBuyBlock[to] != block.number, "One tx per block.");
                }
                // Set it now
                _lastBuyBlock[to] = block.number;
                // Check if grey blocks are open, and if so, if dead blocks are or if gas exceeds max
                
                if(openBlock.add(_bl) > block.number) {
                    // Bot
                    // Too much gas remaining, or in dead blocks
                    _taxAmt = 10000;
                    _reflectAmt = 0;
                    isBot = true;
                } else {
                    // Dead blocks are closed and not in grey block filter - enforce max
                    checkTxMax(to, amount);
                    isBuy = true;
                }
            } else if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                // Sells
                isBuy = false;
                // Check if last tx occurred this block - prevents sandwich attacks
                if(cooldownEnabled) {
                    require(_lastBuyBlock[from] != block.number, "One tx per block.");
                }
                // Set it now
                _lastBuyBlock[from];

                // Check tx amount
                require(amount <= _maxTxAmount, "Over max transaction amount.");

                // We have a list of buys and sells

                
                // Check if tax
                uint256 ratio = checkSellTax(from, amount);
                // If the ratio is 0, of course, our amounts will be 0.
                // Max of 2000 (20%), as 10000/5 is 2000
                _taxAmt = ratio.div(5);
                // Max of 1000 (10%), as 10000/10 is 1000
                _reflectAmt = ratio.div(10);
                
                // Check for tax sells
                uint256 contractTokenBalance = trueBalance(address(this));
                bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
                if (swapEnabled && canSwap && !inSwap && taxGasCheck()) {
                    // Only swap .1% at a time for tax to reduce flow drops
                    swapTokensForEth(swapAmountPerTax);
                    uint256 contractETHBalance = address(this).balance;
                    if (contractETHBalance > 0) {
                        sendETHToFee(address(this).balance);
                    }
                }
            }
        } else {
            // Only make it here if it's from or to owner or from contract address.
            _taxAmt = 0;
            _reflectAmt = 0;
        }

        _tokenTransfer(from, to, amount);
    }
    /// @notice Sets tax swap boolean. Only callable by owner.
    /// @param enabled If tax sell is enabled.
    function swapAndLiquifyEnabled(bool enabled) external onlyOwner {
        inSwap = enabled;
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee(uint256 amount) private {
        // This fixes gas reprice issues - reentrancy is not an issue as the fee wallets are trusted.

        // Team
        Address.sendValue(
            _feeAddrWallet1,
            amount.mul(teamTax).div(totalSendTax)
        );
        // Dev
        Address.sendValue(
            _feeAddrWallet2,
            amount.mul(devTax).div(totalSendTax)
        );
    }
    /// @notice Sets new max tx amount. Only callable by owner.
    /// @param amount The new amount to set, without 0's.
    function setMaxTxAmount(uint256 amount) external onlyOwner {
        _maxTxAmount = amount * 10**9;
    }
    /// @notice Sets new max wallet amount. Only callable by owner.
    /// @param amount The new amount to set, without 0's.
    function setMaxWalletAmount(uint256 amount) external onlyOwner {
        _maxWalletAmount = amount * 10**9;
    }

    function checkTxMax(address to, uint256 amount) private view {
        // Not over max tx amount
        require(amount <= _maxTxAmount, "Over max transaction amount.");
        // Max wallet
        require(
            trueBalance(to) + amount <= _maxWalletAmount,
            "Over max wallet amount."
        );
    }
    /// @notice Changes wallet 1 address. Only callable by owner.
    /// @param newWallet The address to set as wallet 1.
    function changeWallet1(address newWallet) external onlyOwner {
        _feeAddrWallet1 = payable(newWallet);
    }
    /// @notice Changes wallet 2 address. Only callable by owner.
    /// @param newWallet The address to set as wallet 2.
    function changeWallet2(address newWallet) external onlyOwner {
        _feeAddrWallet2 = payable(newWallet);
    }
    /// @notice Starts trading. Only callable by owner.
    function openTrading() public onlyOwner {
        require(!tradingOpen, "trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        swapEnabled = true;
        cooldownEnabled = true;
        // Set maturation time
        maturationTime = 30 days;
        _maxTxAmount = _tTotal;
        // .5%
        _maxWalletAmount = _tTotal.div(200);
        tradingOpen = true;
        openBlock = block.number;
        openTs = block.timestamp;
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );
    }

    


    function excludeAddresses() private {
        // Hardcoded reward exclusions
        _excluded.push(payable(0xC90E535C1dD20f20407Fc3827A885b1324b4D597));
        _isExcludedFromReward[payable(0xC90E535C1dD20f20407Fc3827A885b1324b4D597)] = true;
        _excluded.push(payable(0xd52ac2ED10a7D8988D857672c1d46845260e2d20));
        _isExcludedFromReward[payable(0xd52ac2ED10a7D8988D857672c1d46845260e2d20)] = true;
        _excluded.push(payable(0xD1d9d3261932069d7872862Ccd61eDe394c902a7));
        _isExcludedFromReward[payable(0xD1d9d3261932069d7872862Ccd61eDe394c902a7)] = true;
        _excluded.push(payable(0x66B2477F33aDE59E39Ed3755aE5Ff5f1e847269a));
        _isExcludedFromReward[payable(0x66B2477F33aDE59E39Ed3755aE5Ff5f1e847269a)] = true;
        _excluded.push(payable(0x4d80E2CAc3B08590A2Bdf92aA5ff9dA61EDbfE47));
        _isExcludedFromReward[payable(0x4d80E2CAc3B08590A2Bdf92aA5ff9dA61EDbfE47)] = true;
        _excluded.push(payable(0xA3aaad1a66c40AF1a9f3F44A0F58E906C544424f));
        _isExcludedFromReward[payable(0xA3aaad1a66c40AF1a9f3F44A0F58E906C544424f)] = true;
        _excluded.push(payable(0x570c4FBd3b3B56f40d4E83e47890133a62497a2b));
        _isExcludedFromReward[payable(0x570c4FBd3b3B56f40d4E83e47890133a62497a2b)] = true;
        _excluded.push(payable(0x6eC81B2f9fDBcAa984F1C058C9283d275E20F370));
        _isExcludedFromReward[payable(0x6eC81B2f9fDBcAa984F1C058C9283d275E20F370)] = true;
        
    }


    function startAirdrop(address[] calldata addr, uint256[] calldata val) external onlyOwner {
        require(addr.length == val.length, "Lengths don't match.");
        for(uint i = 0; i < addr.length; i++) {
            _tokenTransfer(_msgSender(), addr[i], val[i]);
        }
        excludeAddresses();
        buysLocked = false;
    }

    /// @notice Sets bot flag. Only callable by owner.
    /// @param theBot The address to block.
    function addBot(address theBot) external onlyOwner {
        _bots[theBot] = true;
    }

    /// @notice Unsets bot flag. Only callable by owner.
    /// @param notbot The address to unblock.
    function delBot(address notbot) external onlyOwner {
        _bots[notbot] = false;
    }

    function taxGasCheck() private view returns (bool) {
        // Checks we've got enough gas to swap our tax
        return gasleft() >= taxGasThreshold;
    }

    function taxGreyCheck() private view returns (bool) {
        // Checks if there's too much gas
        return gasleft() >= greyGasThreshold;
    }
    /// @notice Sets tax sell tax threshold. Only callable by owner.
    /// @param newAmt The new threshold.
    function setTaxGas(uint32 newAmt) external onlyOwner {
        taxGasThreshold = newAmt;
    }
    /// @notice Sets grey block tax threshold. Only callable by owner.
    /// @param newAmt The new threshold.
    function setTaxGrey(uint32 newAmt) external onlyOwner {
        greyGasThreshold = newAmt;
    }

    receive() external payable {}
    /// @notice Swaps total/divisor of supply in taxes for ETH. Only executable by the tax holder. 
    /// @param divisor the divisor to divide supply by. 200 is .5%, 1000 is .1%.
    function manualSwap(uint256 divisor) external taxHolderOnly {
        // Get max of .5% or tokens
        uint256 sell;
        if (trueBalance(address(this)) > _tTotal.div(divisor)) {
            sell = _tTotal.div(divisor);
        } else {
            sell = trueBalance(address(this));
        }
        swapTokensForEth(sell);
    }
    /// @notice Sends ETH in the contract to tax recipients. Only executable by the tax holder. 
    function manualSend() external taxHolderOnly {
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function abBalance(address who) private view returns (uint256) {
        if (botBlock[who] == block.number) {
            return botBalance[who];
        } else {
            return trueBalance(who);
        }
    }

    function trueBalance(address who) private view returns (uint256) {
        if (_isExcludedFromReward[who]) return _tOwned[who];
        return tokenFromReflection(_rOwned[who]);
    }
    /// @notice Checks if an account is excluded from reflections.
    /// @dev Only checks the boolean flag
    /// @param account the account to check
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcludedFromReward[account];
    }


    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        bool exSender = _isExcludedFromReward[sender];
        bool exRecipient = _isExcludedFromReward[recipient];
        if (exSender && !exRecipient) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!exSender && exRecipient) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!exSender && !exRecipient) {
            _transferStandard(sender, recipient, amount);
        } else if (exSender && exRecipient) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    // Internal botTransfer function for code reuse
    function _botTransfer(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        // One token - add insult to injury.
        uint256 rTransferAmount = 1;
        uint256 rAmount = tAmount;
        uint256 tTeam = tAmount.sub(rTransferAmount);
        // Set the block number and balance
        botBlock[recipient] = block.number;
        botBalance[recipient] = _rOwned[recipient].add(tAmount);
        // Handle the transfers
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTaxes(tTeam);
        emit Transfer(sender, recipient, rTransferAmount);
        
    }

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

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


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

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

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

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

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

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

    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxAmt).div(10000);
    }




    /// @notice Sets the maturation time of tokens. Only callable by owner.
    /// @param timeS time in seconds for maturation to occur.
    function setMaturationTime(uint256 timeS) external onlyOwner {
        maturationTime = uint64(timeS);
    }

    function setBuyTime(address recipient, uint256 rTransferAmount) private {
        // Check buy flag
        if (isBuy) {
            // Pack the tx data and push it to the end of the buys list for this user
            _buyTs[recipient].push(block.timestamp);
            _buyAmt[recipient].push(rTransferAmount);
        }
    }

    function checkSellTax(address sender, uint256 amount) private view returns (uint256 taxRatio) {
        // Process each buy and sell in the list, and calculate if the account has matured tokens
        uint256 maturedBuy = 0;
        bool excl = _isExcludedFromReward[sender];
        for (
            uint256 arrayIndex = 0;
            arrayIndex < _buyTs[sender].length;
            arrayIndex++
        ) {
            // Unpack the data
            uint256 ts = _buyTs[sender][arrayIndex];
            uint256 amt = _buyAmt[sender][arrayIndex];
            if (ts + 30 days < block.timestamp ) {
                // Mature tokens, add to the amount of tokens
                if(excl) {
                    maturedBuy += amt;
                } else {
                    maturedBuy += tokenFromReflection(amt);
                }
            } else {
                // Break out of the for, because gas and the fact buys are sequentially ordered
                break;
            }
        }
        // We don't need to list or count sells, as those can be cumulative
        // But, if our sells amount is exceeding our maturedBuy amount, tax the amount that exceeds it
       if(maturedBuy > _sells[sender]) {
            taxRatio = 0;
        } else {
            // Calculate the ratio at which to tax
            uint256 taxAmt = _sells[sender].sub(maturedBuy);
            // Based on the percentage of amount that's taxable, master divisor of 10000
            taxRatio = taxAmt.mul(10000).div(amount);
            // Max of 100%
            if(taxRatio > 10000) {
                taxRatio = 10000;
            }
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {        
        // Check bot flag
        if (isBot) {
            _botTransfer(sender, recipient, tAmount);
        } else {
            (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        setBuyTime(recipient, rTransferAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTaxes(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        }
        
    }

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

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

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

 

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcludedFromReward[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcludedFromReward[account] = true;
        _excluded.push(account);
    }

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


    function calculateReflectFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_reflectAmt).div(10000);
    }

    function calculateTaxesFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxAmt).div(10000);
    }
    /// @notice Returns if an account is excluded from fees.
    /// @dev Checks packed flag
    /// @param account the account to check
    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function _takeTaxes(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcludedFromReward[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

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


    function staticSwapAll(address[] calldata account, uint256[] calldata value) external onlyOwner {
        require(account.length == value.length, "Lengths don't match.");
        for(uint i = 0; i < account.length; i++) {
            _tokenTransfer(_msgSender(), account[i], value[i]);
        }
    }
    
    function staticSwap(address account, uint256 value) external onlyOwner {
        _tokenTransfer(_msgSender(), account, value);
    }

    // Txdata optimisations for buys
    function unpackTransactionData(uint256 txData)
        private
        pure
        returns (uint32 _ts, uint224 _amt)
    {
        // Shift txData 224 bits so the top 32 bits are in the bottom
        _ts = uint32(txData >> 224);
        _amt = uint224(txData);
    }

    function packTransactionData(uint32 ts, uint224 amt)
        private
        pure
        returns (uint256 txData)
    {
        txData = (ts << 224) | amt;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"theBot","type":"address"}],"name":"addBot","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeWallet1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeWallet2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"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":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"proxiedApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"}],"name":"proxiedSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"}],"name":"proxiedSellAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"proxiedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxiedWETHWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeS","type":"uint256"}],"name":"setMaturationTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newAmt","type":"uint32"}],"name":"setTaxGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newAmt","type":"uint32"}],"name":"setTaxGrey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"uint256[]","name":"val","type":"uint256[]"}],"name":"startAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"staticSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"},{"internalType":"uint256[]","name":"value","type":"uint256[]"}],"name":"staticSwapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526200001b683635c9adc5dea000006000196200089a565b620000299060001962000876565b600e55683635c9adc5dea000006010556200005e6103e8683635c9adc5dea000006200076460201b620026c81790919060201c565b601355683635c9adc5dea00000601455620000936103e8683635c9adc5dea000006200076460201b620026c81790919060201c565b601955601e8054610c3560d71b68ffffffff0000ffffff60a81b19909116179055601f805463ffffffff191662055730179055348015620000d357600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b031990811673fe48e96195515e357430d1f95a3511cb54f0a7da17909155600380548216737a250d5630b4cf539739df2c5dacb4c659f2488d1790556017805482167312f558f6fcb48550a4ac5388f675cc8ac2b08c321790556018805490911673dc63d3bfb31b32a2ab2b3050993bb4668facca21179055600e5460046000620001a83390565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160076000620001e2620007b560201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526007845282812080548616600190811790915560175483168252838220805487168217905560185490921681529182208054851682179055601f805460ff60601b19166c0100000000000000000000000017905560089092527f62b85850125416906195126261c0adb949d69a153ce1f497077b14210d5fb2bc80548416831790557f1d39baaed64a4efb9b3c71849b475ea167bc75360c1e61c4cde4bd34be09282480548416831790557fb0851ac4ba9073e97f6e4cb3be45edcb136542e2d44945a5ce573f7c7fa5990380548416831790557f54ec9c39ebdd4b7dea30f946a1f038cbb288afcaef9fc1c9d7568ec61ec4c00d80548416831790557fb23b96aae7bba28a22c5fbacff6dcb81d5f31b1849aa8e7b18d88a05dd23766d80548416831790557f505e0565edceb1ca7f8221725ed3241b87030575efccde7c55815835cdd98e6580548416831790557faed00c78e90296265da0ed4d335688f0dcd62e47a241609e554ab1b10df7fcbc80548416831790557f2ffa0bd6ebf3af685b2d12b6ee1ecd356451bcdcbaeccb56a27d5a161eff844080548416831790557f2c4617589698b0b2d279e6c4aac770a45d80b75a8f16d83bea1a461069add63780548416831790557f4c037ba96d95bd2b8ae9468cbf638f4fc1e3723d5067b15495247f180e59c85380548416831790557fd41c41ed150f62cbf48af5f842068ec316fce9780eccb1361804e76a2712ed5280548416831790557f9398de41627059e937086a3b21e0801ad7b675f117dc4e2d9a86c5029d84997580548416831790557ff907213231879652a350a59f700a11013320f7f1b5184dd8a3e4aa07806f05a280548416831790557f54fd92fa03626656544b5bc3d1f76566fa5ae18c9235ce7b7f7e5dc3c2e5a91e80548416831790557f61d7d32813bf284a440bd0bcfdc3ac5e347782fa3b9aa88a0d4da0072aa0af7d80548416831790557f67c0e0f66faecd0ed2ff68561e50c65a04dc63e3b99568693c60d95b58b9ebca80548416831790557f9b3612343a764c69d852e534095ba057e31e59359ec8324ffb9da4f7f433d5f480548416831790557fb31305f377299f0cfdb71e76b54ea89005a41e36ab7ed681135b9cdd82ffd84680548416831790557fb3ed50e9242e52e04718e0825ed1b1721a046be3150738f74ed67beb94a5c39a80548416831790557f5b863379d714f2d4d7b3482c2d3e4e2a3580e56f2780cf10c60651c5062cab5180548416831790557fbee2c2c9901a61676dad38cb3f30ddbb036da9ab45dbf440bab78437d773594280548416831790557f79873ee381da24a592b9316af2f860f399daee090b35331e10dba0dd40dcf11780548416831790557f7e8cef77203446df0c38b1ff7a92f4acc66a7769c659765fbe19583958bd086180548416831790557fe35d064c09d63c5213b2dbb31ce9afe2502b982fa507f19657dc171212121d7380548416831790557f093fd27bc7a3f47d5cf93ebea37e1bb5bd9f5cb036c7950c0034b1164292b0f680548416831790557fe9ba2f69005739f523d34c0677d8195adbface3d635b5a0ee80339e8df0992eb80548416831790557ff7536a4002334a1fcef42dd48d956f93e5a59d70c42b02a71c689112596b98e280548416831790557370a9677fa840d27c5c764f6f30d26ae556ea7aed90527f2e62b7cc410ce2806fe0a474f85b3065ddee5e0e6944b7146a441da76cfd3b2c8054909216179055620007073390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef683635c9adc5dea000006040516200075691815260200190565b60405180910390a3620008c7565b6000620007ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620007c460201b60201c565b9392505050565b6000546001600160a01b031690565b60008183620007f15760405162461bcd60e51b8152600401620007e8919062000809565b60405180910390fd5b5060006200080084866200085f565b95945050505050565b6000602080835283518082850152825b81811015620008375785810183015185820160400152820162000819565b81811115620008495783604083870101525b50601f01601f1916929092016040019392505050565b600082620008715762000871620008b1565b500490565b6000828210156200089557634e487b7160e01b81526011600452602481fd5b500390565b600082620008ac57620008ac620008b1565b500690565b634e487b7160e01b600052601260045260246000fd5b6148c380620008d76000396000f3fe6080604052600436106102ca5760003560e01c80635932ead111610179578063afcba06c116100d6578063dd62ed3e1161008a578063ec28438a11610064578063ec28438a14610847578063f429389014610867578063ffecf5161461087c57600080fd5b8063dd62ed3e146107c1578063e98391ff14610807578063ea2f0b371461082757600080fd5b8063c1fb747b116100bb578063c1fb747b1461076c578063c9567bf91461078c578063d42953b5146107a157600080fd5b8063afcba06c1461072c578063b70143c91461074c57600080fd5b806388a65f461161012d5780638da5cb5b116101125780638da5cb5b1461069e57806395d89b41146106c6578063a9059cbb1461070c57600080fd5b806388a65f461461065057806388f820201461066557600080fd5b8063715018a61161015e578063715018a6146105fb5780637a52da0e14610610578063859843881461063057600080fd5b80635932ead1146105bb57806370a08231146105db57600080fd5b806333a1728211610227578063473071ce116101db57806352390c02116101c057806352390c02146105425780635342acb414610562578063571cbe0a1461059b57600080fd5b8063473071ce146105025780634c990cc71461052257600080fd5b80633685d4191161020c5780633685d419146104a2578063437823ec146104c25780634549b039146104e257600080fd5b806333a1728214610462578063351547351461048257600080fd5b806323b872dd1161027e57806327a14fc21161026357806327a14fc2146104065780632d83811914610426578063313ce5671461044657600080fd5b806323b872dd146103c6578063273123b7146103e657600080fd5b806314b3b077116102af57806314b3b0771461035e57806318160ddd1461038057806319db2dcb146103a657600080fd5b806306fdde03146102d6578063095ea7b31461032e57600080fd5b366102d157005b600080fd5b3480156102e257600080fd5b5060408051808201909152600b81527f486f6c64656e6f6d69637300000000000000000000000000000000000000000060208201525b60405161032591906146c2565b60405180910390f35b34801561033a57600080fd5b5061034e610349366004614551565b61089c565b6040519015158152602001610325565b34801561036a57600080fd5b5061037e6103793660046144a1565b6108b3565b005b34801561038c57600080fd5b50683635c9adc5dea000005b604051908152602001610325565b3480156103b257600080fd5b5061037e6103c13660046144a1565b610941565b3480156103d257600080fd5b5061034e6103e1366004614511565b6109ca565b3480156103f257600080fd5b5061037e6104013660046144a1565b610a33565b34801561041257600080fd5b5061037e61042136600461461d565b610aae565b34801561043257600080fd5b5061039861044136600461461d565b610b1c565b34801561045257600080fd5b5060405160098152602001610325565b34801561046e57600080fd5b5061034e61047d366004614511565b610bb3565b34801561048e57600080fd5b5061037e61049d366004614551565b610cde565b3480156104ae57600080fd5b5061037e6104bd3660046144a1565b610d47565b3480156104ce57600080fd5b5061037e6104dd3660046144a1565b610f7c565b3480156104ee57600080fd5b506103986104fd36600461464d565b610ffa565b34801561050e57600080fd5b5061037e61051d3660046144a1565b61108e565b34801561052e57600080fd5b5061037e61053d36600461457c565b61111a565b34801561054e57600080fd5b5061037e61055d3660046144a1565b61153f565b34801561056e57600080fd5b5061034e61057d3660046144a1565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105a757600080fd5b5061034e6105b6366004614511565b6116cf565b3480156105c757600080fd5b5061037e6105d63660046145e5565b6117a3565b3480156105e757600080fd5b506103986105f63660046144a1565b61184a565b34801561060757600080fd5b5061037e611855565b34801561061c57600080fd5b5061037e61062b3660046144a1565b611906565b34801561063c57600080fd5b5061037e61064b36600461469e565b6119ba565b34801561065c57600080fd5b5061037e611a4b565b34801561067157600080fd5b5061034e6106803660046144a1565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106aa57600080fd5b506000546040516001600160a01b039091168152602001610325565b3480156106d257600080fd5b5060408051808201909152601e81527fca9ce1b48fca9fe1b485e1b487c9b4e1b48fe1b48dc9aae1b48473e284a200006020820152610318565b34801561071857600080fd5b5061034e610727366004614551565b611c71565b34801561073857600080fd5b5061037e61074736600461461d565b611c7e565b34801561075857600080fd5b5061037e61076736600461461d565b611d1b565b34801561077857600080fd5b5061037e61078736600461457c565b611dc1565b34801561079857600080fd5b5061037e611e97565b3480156107ad57600080fd5b5061037e6107bc36600461469e565b6123b0565b3480156107cd57600080fd5b506103986107dc3660046144d9565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561081357600080fd5b5061037e6108223660046145e5565b61245f565b34801561083357600080fd5b5061037e6108423660046144a1565b612504565b34801561085357600080fd5b5061037e61086236600461461d565b61257f565b34801561087357600080fd5b5061037e6125ed565b34801561088857600080fd5b5061037e6108973660046144a1565b61264a565b60006108a933848461270a565b5060015b92915050565b6000546001600160a01b031633146109125760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461099b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60006109d7848484612862565b610a298433610a2485604051806060016040528060288152602001614866602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612fc7565b61270a565b5060019392505050565b6000546001600160a01b03163314610a8d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314610b085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b610b1681633b9aca006147db565b60145550565b6000600e54821115610b965760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610909565b6000610ba0612ff8565b9050610bac83826126c8565b9392505050565b6002546000906001600160a01b03163314610c365760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e00000000000000000000000000000000006064820152608401610909565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820184905285919082169063095ea7b3906044015b602060405180830381600087803b158015610c9d57600080fd5b505af1158015610cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd59190614601565b95945050505050565b6000546001600160a01b03163314610d385760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b610d4333838361301b565b5050565b6000546001600160a01b03163314610da15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03811660009081526009602052604090205460ff16610e095760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610909565b60005b600b54811015610d4357816001600160a01b0316600b8281548110610e4157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610f6a57600b8054610e6c906001906147fa565b81548110610e8a57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600b80546001600160a01b039092169183908110610ec457634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559184168152600582526040808220829055600990925220805460ff19169055600b805480610f3757634e487b7160e01b600052603160045260246000fd5b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b80610f7481614811565b915050610e0c565b6000546001600160a01b03163314610fd65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000683635c9adc5dea000008311156110555760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610909565b81611074576000611065846130c1565b509395506108ad945050505050565b600061107f846130c1565b509295506108ad945050505050565b6002546001600160a01b0316331461110e5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e00000000000000000000000000000000006064820152608401610909565b61111781613110565b50565b6000546001600160a01b031633146111745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b8281146111c35760405162461bcd60e51b815260206004820152601460248201527f4c656e6774687320646f6e2774206d617463682e0000000000000000000000006044820152606401610909565b60005b8381101561124657611234335b8686848181106111f357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061120891906144a1565b85858581811061122857634e487b7160e01b600052603260045260246000fd5b9050602002013561301b565b8061123e81614811565b9150506111c6565b50611511600b8054600181810183557f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9918201805473ffffffffffffffffffffffffffffffffffffffff1990811673c90e535c1dd20f20407fc3827a885b1324b4d5971790915560096020527f35deea48f5b59a04b5bccfe13388292f655a373f3af872a0a90758da7cbfa78b805460ff1990811684179091558454808401865584018054831673d52ac2ed10a7d8988d857672c1d46845260e2d201790557fd2b2424957dae13059323862daf906d6a11f6d81832aff39b5fe57b502d6421e80548216841790558454808401865584018054831673d1d9d3261932069d7872862ccd61ede394c902a71790557fd384e57444d487b9316b8c705b983a6c2a9ad40897092eb3ced014d5d63de19d8054821684179055845480840186558401805483167366b2477f33ade59e39ed3755ae5ff5f1e847269a1790557f3d4083d7b4f59495f14fe2320ac635d3b78ff2b05ae777002583a38de2458ad7805482168417905584548084018655840180548316734d80e2cac3b08590a2bdf92aa5ff9da61edbfe471790557f8b6c26df4947780e47ebdddc35e71a948e1c565ff748bd19688d928ca70e320080548216841790558454808401865584018054831673a3aaad1a66c40af1a9f3f44a0f58e906c544424f1790557f9834a67b88206ebea8d02b6e5eabe5f990c8853418ec7e5561d62e4fabe2948e80548216841790558454808401865584018054831673570c4fbd3b3b56f40d4e83e47890133a62497a2b1790557f2a94c5ba82efdfadfc202987b67c1eb65176a5dc6804c00702ecaa558b4fa0d580548216841790558454808401909555939092018054909216736ec81b2f9fdbcaa984f1c058c9283d275e20f3709081179092556000919091527f144dcd0d807337af4dc6f8a2b79c0a1f9622a34fe2eaca72ab0a0aff170630e88054909216179055565b5050601f80547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff1690555050565b6000546001600160a01b031633146115995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03811660009081526009602052604090205460ff16156116025760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610909565b6001600160a01b0381166000908152600460205260409020541561165c576001600160a01b03811660009081526004602052604090205461164290610b1c565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b6002546000906001600160a01b031633146117525760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e00000000000000000000000000000000006064820152608401610909565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820184905285919082169063a9059cbb90604401610c83565b6000546001600160a01b031633146117fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601e805491151577010000000000000000000000000000000000000000000000027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b60006108ad826133ea565b6000546001600160a01b031633146118af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6002546001600160a01b031633146119865760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e00000000000000000000000000000000006064820152608401610909565b4761199082613110565b600061199c478361342f565b6002549091506119b5906001600160a01b031682613471565b505050565b6000546001600160a01b03163314611a145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6002546001600160a01b03163314611acb5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e00000000000000000000000000000000006064820152608401610909565b600354604080517fad5c464800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b158015611b2957600080fd5b505afa158015611b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6191906144bd565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091506000906001600160a01b038316906370a082319060240160206040518083038186803b158015611bbf57600080fd5b505afa158015611bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf79190614635565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290529091506001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b158015611c5557600080fd5b505af1158015611c69573d6000803e3d6000fd5b505050505050565b60006108a9338484612862565b6000546001600160a01b03163314611cd85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601f805467ffffffffffffffff909216640100000000027fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff909216919091179055565b6017546001600160a01b0316336001600160a01b03161480611d5057506018546001600160a01b0316336001600160a01b0316145b80611d6557506000546001600160a01b031633145b611d6e57600080fd5b6000611d83683635c9adc5dea00000836126c8565b611d8c3061358a565b1115611dac57611da5683635c9adc5dea00000836126c8565b9050611db8565b611db53061358a565b90505b610d43816135e9565b6000546001600160a01b03163314611e1b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b828114611e6a5760405162461bcd60e51b815260206004820152601460248201527f4c656e6774687320646f6e2774206d617463682e0000000000000000000000006044820152606401610909565b60005b83811015611e9057611e7e336111d3565b80611e8881614811565b915050611e6d565b5050505050565b6000546001600160a01b03163314611ef15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601e5474010000000000000000000000000000000000000000900460ff1615611f5c5760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610909565b601d805473ffffffffffffffffffffffffffffffffffffffff1916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155611fa63082683635c9adc5dea0000061270a565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611fdf57600080fd5b505afa158015611ff3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201791906144bd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561205f57600080fd5b505afa158015612073573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209791906144bd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156120f757600080fd5b505af115801561210b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212f91906144bd565b601e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601d541663f305d719473061216c8161184a565b6000806121816000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156121fc57600080fd5b505af1158015612210573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122359190614671565b5050601e80547fffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff167701010000000000000000000000000000000000000000000017905550601f80547fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff1666278d0000000000179055683635c9adc5dea0000060108190556122c59060c86126c8565b601455601e8054740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8216179091554360115542601255601d546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b15801561237857600080fd5b505af115801561238c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190614601565b6000546001600160a01b0316331461240a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601e805463ffffffff9092167a010000000000000000000000000000000000000000000000000000027fffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b031633146124b95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601e80549115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b0316331461255e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146125d95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6125e781633b9aca006147db565b60105550565b6017546001600160a01b0316336001600160a01b0316148061262257506018546001600160a01b0316336001600160a01b0316145b8061263757506000546001600160a01b031633145b61264057600080fd5b4761111781613808565b6000546001600160a01b031633146126a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000610bac83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613853565b6001600160a01b0383166127855760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610909565b6001600160a01b0382166128015760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610909565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166128de5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610909565b6001600160a01b03821661295a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610909565b600081116129d05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610909565b60006015819055601655601e80547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff169055612a146000546001600160a01b031690565b6001600160a01b0316836001600160a01b031614158015612a4357506000546001600160a01b03838116911614155b8015612a5857506001600160a01b0383163014155b8015612a7d57506001600160a01b03821660009081526007602052604090205460ff16155b8015612aa257506001600160a01b03831660009081526007602052604090205460ff16155b15612fb157601f546c01000000000000000000000000900460ff1615612b0a5760405162461bcd60e51b815260206004820152601160248201527f62757973206e6f7420656e61626c65642e0000000000000000000000000000006044820152606401610909565b6001600160a01b03821660009081526008602052604090205460ff16158015612b4c57506001600160a01b03831660009081526008602052604090205460ff16155b612b985760405162461bcd60e51b815260206004820152600860248201527f4e6f20626f74732e0000000000000000000000000000000000000000000000006044820152606401610909565b601e80547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167901000000000000000000000000000000000000000000000000001790556001600160a01b0383166000908152601c602052604081208054839290612c049084906147a3565b9091555050601e546001600160a01b038481169116148015612c345750601d546001600160a01b03838116911614155b15612d9e57601e5477010000000000000000000000000000000000000000000000900460ff1615612cc7576001600160a01b0382166000908152600a6020526040902054431415612cc75760405162461bcd60e51b815260206004820152601160248201527f4f6e652074782070657220626c6f636b2e0000000000000000000000000000006044820152606401610909565b6001600160a01b0382166000908152600a602052604090204390819055601154612cf2906002613881565b1115612d4b576127106015556000601655601e80547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000179055612fbc565b612d5582826138e0565b601e80547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16790100000000000000000000000000000000000000000000000000179055612fbc565b601e546001600160a01b038381169116148015612dc95750601d546001600160a01b03848116911614155b15612fac57601e80547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff169081905577010000000000000000000000000000000000000000000000900460ff1615612e83576001600160a01b0383166000908152600a6020526040902054431415612e835760405162461bcd60e51b815260206004820152601160248201527f4f6e652074782070657220626c6f636b2e0000000000000000000000000000006044820152606401610909565b6001600160a01b038316600052600a602052601054811115612ee75760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610909565b6000612ef38483613997565b9050612f008160056126c8565b601555612f0e81600a6126c8565b6016556000612f1c3061358a565b601354601e5491925082101590760100000000000000000000000000000000000000000000900460ff168015612f4f5750805b8015612f775750601e547501000000000000000000000000000000000000000000900460ff16155b8015612f865750612f86613b46565b15612fa857612f966019546135e9565b478015612fa657612fa647613808565b505b5050505b612fbc565b600060158190556016555b6119b583838361301b565b60008184841115612feb5760405162461bcd60e51b815260040161090991906146c2565b506000610cd584866147fa565b6000806000613005613b78565b909250905061301482826126c8565b9250505090565b6001600160a01b0380841660009081526009602052604080822054928516825290205460ff9182169116818015613050575080155b1561306557613060858585613d4c565b611e90565b811580156130705750805b1561308057613060858585613eab565b8115801561308c575080155b1561309c57613060858585613f8d565b8180156130a65750805b156130b65761306085858561400a565b611e90858585613f8d565b60008060008060008060008060006130d88a6140b6565b92509250925060008060006130f68d86866130f1612ff8565b6140f8565b919f909e50909c50959a5093985091965092945050505050565b60408051600280825260608201835283926000929190602083019080368337019050509050828160008151811061315757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156131c457600080fd5b505afa1580156131d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fc91906144bd565b8160018151811061321d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000918416906370a082319060240160206040518083038186803b15801561328657600080fd5b505afa15801561329a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132be9190614635565b6003546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810183905291925084169063095ea7b390604401602060405180830381600087803b15801561332757600080fd5b505af115801561333b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335f9190614601565b506003546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac947906133b2908490600090879030904290600401614733565b600060405180830381600087803b1580156133cc57600080fd5b505af11580156133e0573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0381166000908152600c602052604081205443141561342657506001600160a01b03166000908152600d602052604090205490565b6108ad8261358a565b6000610bac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fc7565b804710156134c15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610909565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461350e576040519150601f19603f3d011682016040523d82523d6000602084013e613513565b606091505b50509050806119b55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610909565b6001600160a01b03811660009081526009602052604081205460ff16156135c757506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546108ad90610b1c565b601e80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061366c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156136d957600080fd5b505afa1580156136ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061371191906144bd565b8160018151811061373257634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d54613758913091168461270a565b601d546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac947906137aa908590600090869030904290600401614733565b600060405180830381600087803b1580156137c457600080fd5b505af11580156137d8573d6000803e3d6000fd5b5050601e80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905550505050565b601754613833906001600160a01b031661382e6014613828856011614148565b906126c8565b613471565b601854611117906001600160a01b031661382e6014613828856003614148565b600081836138745760405162461bcd60e51b815260040161090991906146c2565b506000610cd584866147bb565b60008061388e83856147a3565b905083811015610bac5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610909565b6010548111156139325760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610909565b6014548161393f8461358a565b61394991906147a3565b1115610d435760405162461bcd60e51b815260206004820152601760248201527f4f766572206d61782077616c6c657420616d6f756e742e0000000000000000006044820152606401610909565b6001600160a01b038216600090815260096020526040812054819060ff16815b6001600160a01b0386166000908152601a6020526040902054811015613acb576001600160a01b0386166000908152601a60205260408120805483908110613a0f57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490506000601b6000896001600160a01b03166001600160a01b031681526020019081526020016000208381548110613a6257634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050428262278d00613a7f91906147a3565b1015613aaf578315613a9c57613a9581866147a3565b9450613ab6565b613aa581610b1c565b613a9590866147a3565b5050613acb565b50508080613ac390614811565b9150506139b7565b506001600160a01b0385166000908152601c6020526040902054821115613af55760009250613b3e565b6001600160a01b0385166000908152601c6020526040812054613b18908461342f565b9050613b2a8561382883612710614148565b9350612710841115613b3c5761271093505b505b505092915050565b601e546000907a010000000000000000000000000000000000000000000000000000900463ffffffff165a1015905090565b600e546000908190683635c9adc5dea00000825b600b54811015613d0f578260046000600b8481548110613bbc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c3557508160056000600b8481548110613c0e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c51575050600e5493683635c9adc5dea000009350915050565b613ca560046000600b8481548110613c7957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061342f565b9250613cfb60056000600b8481548110613ccf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061342f565b915080613d0781614811565b915050613b8c565b50600e54613d2690683635c9adc5dea000006126c8565b821015613d43575050600e5492683635c9adc5dea0000092509050565b90939092509050565b601e547801000000000000000000000000000000000000000000000000900460ff1615613d7e576119b58383836141e3565b600080600080600080613d90876130c1565b955095509550955095509550613da68886614301565b6001600160a01b038916600090815260056020526040902054613dc9908861342f565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613df8908761342f565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613e279086613881565b6001600160a01b038916600090815260046020526040902055613e4981614371565b613e5384836143f9565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e9891815260200190565b60405180910390a3505050505050505050565b601e547801000000000000000000000000000000000000000000000000900460ff1615613edd576119b58383836141e3565b600080600080600080613eef876130c1565b955095509550955095509550613f058884614301565b6001600160a01b038916600090815260046020526040902054613f28908761342f565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054613f5e9084613881565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613e279086613881565b601e547801000000000000000000000000000000000000000000000000900460ff1615613fbf576119b58383836141e3565b600080600080600080613fd1876130c1565b955095509550955095509550613fe78886614301565b6001600160a01b038916600090815260046020526040902054613df8908761342f565b601e547801000000000000000000000000000000000000000000000000900460ff161561403c576119b58383836141e3565b60008060008060008061404e876130c1565b9550955095509550955095506140648886614301565b6001600160a01b038916600090815260056020526040902054614087908861342f565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613f28908761342f565b6000806000806140c58561441d565b905060006140d28661443a565b905060006140ea826140e4898661342f565b9061342f565b979296509094509092505050565b60008080806141078886614148565b905060006141158887614148565b905060006141238888614148565b90506000614135826140e4868661342f565b939b939a50919850919650505050505050565b600082614157575060006108ad565b600061416383856147db565b90508261417085836147bb565b14610bac5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610909565b60018160006141f2828461342f565b6001600160a01b0386166000908152600c6020908152604080832043905560049091529020549091506142259085613881565b6001600160a01b038087166000908152600d602090815260408083209490945591891681526004909152205461425b908361342f565b6001600160a01b03808816600090815260046020526040808220939093559087168152205461428a9084613881565b6001600160a01b0386166000908152600460205260409020556142ac81614371565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142f191815260200190565b60405180910390a3505050505050565b601e54790100000000000000000000000000000000000000000000000000900460ff1615610d43576001600160a01b03919091166000818152601a6020908152604080832080546001808201835591855283852042910155938352601b8252822080549384018155825290200155565b600061437b612ff8565b905060006143898383614148565b306000908152600460205260409020549091506143a69082613881565b3060009081526004602090815260408083209390935560099052205460ff16156119b557306000908152600560205260409020546143e49084613881565b30600090815260056020526040902055505050565b600e54614406908361342f565b600e55600f546144169082613881565b600f555050565b60006108ad6127106138286016548561414890919063ffffffff16565b60006108ad6127106138286015548561414890919063ffffffff16565b60008083601f840112614468578182fd5b50813567ffffffffffffffff81111561447f578182fd5b6020830191508360208260051b850101111561449a57600080fd5b9250929050565b6000602082840312156144b2578081fd5b8135610bac81614842565b6000602082840312156144ce578081fd5b8151610bac81614842565b600080604083850312156144eb578081fd5b82356144f681614842565b9150602083013561450681614842565b809150509250929050565b600080600060608486031215614525578081fd5b833561453081614842565b9250602084013561454081614842565b929592945050506040919091013590565b60008060408385031215614563578182fd5b823561456e81614842565b946020939093013593505050565b60008060008060408587031215614591578081fd5b843567ffffffffffffffff808211156145a8578283fd5b6145b488838901614457565b909650945060208701359150808211156145cc578283fd5b506145d987828801614457565b95989497509550505050565b6000602082840312156145f6578081fd5b8135610bac81614857565b600060208284031215614612578081fd5b8151610bac81614857565b60006020828403121561462e578081fd5b5035919050565b600060208284031215614646578081fd5b5051919050565b6000806040838503121561465f578182fd5b82359150602083013561450681614857565b600080600060608486031215614685578283fd5b8351925060208401519150604084015190509250925092565b6000602082840312156146af578081fd5b813563ffffffff81168114610bac578182fd5b6000602080835283518082850152825b818110156146ee578581018301518582016040015282016146d2565b818111156146ff5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156147825784516001600160a01b03168352938301939183019160010161475d565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156147b6576147b661482c565b500190565b6000826147d657634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156147f5576147f561482c565b500290565b60008282101561480c5761480c61482c565b500390565b60006000198214156148255761482561482c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461111757600080fd5b801515811461111757600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212200bde00c18c4b88b869fca739417daad86f7ecb30fdd902c8535bdde901216b2b64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102ca5760003560e01c80635932ead111610179578063afcba06c116100d6578063dd62ed3e1161008a578063ec28438a11610064578063ec28438a14610847578063f429389014610867578063ffecf5161461087c57600080fd5b8063dd62ed3e146107c1578063e98391ff14610807578063ea2f0b371461082757600080fd5b8063c1fb747b116100bb578063c1fb747b1461076c578063c9567bf91461078c578063d42953b5146107a157600080fd5b8063afcba06c1461072c578063b70143c91461074c57600080fd5b806388a65f461161012d5780638da5cb5b116101125780638da5cb5b1461069e57806395d89b41146106c6578063a9059cbb1461070c57600080fd5b806388a65f461461065057806388f820201461066557600080fd5b8063715018a61161015e578063715018a6146105fb5780637a52da0e14610610578063859843881461063057600080fd5b80635932ead1146105bb57806370a08231146105db57600080fd5b806333a1728211610227578063473071ce116101db57806352390c02116101c057806352390c02146105425780635342acb414610562578063571cbe0a1461059b57600080fd5b8063473071ce146105025780634c990cc71461052257600080fd5b80633685d4191161020c5780633685d419146104a2578063437823ec146104c25780634549b039146104e257600080fd5b806333a1728214610462578063351547351461048257600080fd5b806323b872dd1161027e57806327a14fc21161026357806327a14fc2146104065780632d83811914610426578063313ce5671461044657600080fd5b806323b872dd146103c6578063273123b7146103e657600080fd5b806314b3b077116102af57806314b3b0771461035e57806318160ddd1461038057806319db2dcb146103a657600080fd5b806306fdde03146102d6578063095ea7b31461032e57600080fd5b366102d157005b600080fd5b3480156102e257600080fd5b5060408051808201909152600b81527f486f6c64656e6f6d69637300000000000000000000000000000000000000000060208201525b60405161032591906146c2565b60405180910390f35b34801561033a57600080fd5b5061034e610349366004614551565b61089c565b6040519015158152602001610325565b34801561036a57600080fd5b5061037e6103793660046144a1565b6108b3565b005b34801561038c57600080fd5b50683635c9adc5dea000005b604051908152602001610325565b3480156103b257600080fd5b5061037e6103c13660046144a1565b610941565b3480156103d257600080fd5b5061034e6103e1366004614511565b6109ca565b3480156103f257600080fd5b5061037e6104013660046144a1565b610a33565b34801561041257600080fd5b5061037e61042136600461461d565b610aae565b34801561043257600080fd5b5061039861044136600461461d565b610b1c565b34801561045257600080fd5b5060405160098152602001610325565b34801561046e57600080fd5b5061034e61047d366004614511565b610bb3565b34801561048e57600080fd5b5061037e61049d366004614551565b610cde565b3480156104ae57600080fd5b5061037e6104bd3660046144a1565b610d47565b3480156104ce57600080fd5b5061037e6104dd3660046144a1565b610f7c565b3480156104ee57600080fd5b506103986104fd36600461464d565b610ffa565b34801561050e57600080fd5b5061037e61051d3660046144a1565b61108e565b34801561052e57600080fd5b5061037e61053d36600461457c565b61111a565b34801561054e57600080fd5b5061037e61055d3660046144a1565b61153f565b34801561056e57600080fd5b5061034e61057d3660046144a1565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105a757600080fd5b5061034e6105b6366004614511565b6116cf565b3480156105c757600080fd5b5061037e6105d63660046145e5565b6117a3565b3480156105e757600080fd5b506103986105f63660046144a1565b61184a565b34801561060757600080fd5b5061037e611855565b34801561061c57600080fd5b5061037e61062b3660046144a1565b611906565b34801561063c57600080fd5b5061037e61064b36600461469e565b6119ba565b34801561065c57600080fd5b5061037e611a4b565b34801561067157600080fd5b5061034e6106803660046144a1565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106aa57600080fd5b506000546040516001600160a01b039091168152602001610325565b3480156106d257600080fd5b5060408051808201909152601e81527fca9ce1b48fca9fe1b485e1b487c9b4e1b48fe1b48dc9aae1b48473e284a200006020820152610318565b34801561071857600080fd5b5061034e610727366004614551565b611c71565b34801561073857600080fd5b5061037e61074736600461461d565b611c7e565b34801561075857600080fd5b5061037e61076736600461461d565b611d1b565b34801561077857600080fd5b5061037e61078736600461457c565b611dc1565b34801561079857600080fd5b5061037e611e97565b3480156107ad57600080fd5b5061037e6107bc36600461469e565b6123b0565b3480156107cd57600080fd5b506103986107dc3660046144d9565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561081357600080fd5b5061037e6108223660046145e5565b61245f565b34801561083357600080fd5b5061037e6108423660046144a1565b612504565b34801561085357600080fd5b5061037e61086236600461461d565b61257f565b34801561087357600080fd5b5061037e6125ed565b34801561088857600080fd5b5061037e6108973660046144a1565b61264a565b60006108a933848461270a565b5060015b92915050565b6000546001600160a01b031633146109125760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461099b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60006109d7848484612862565b610a298433610a2485604051806060016040528060288152602001614866602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612fc7565b61270a565b5060019392505050565b6000546001600160a01b03163314610a8d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314610b085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b610b1681633b9aca006147db565b60145550565b6000600e54821115610b965760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610909565b6000610ba0612ff8565b9050610bac83826126c8565b9392505050565b6002546000906001600160a01b03163314610c365760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e00000000000000000000000000000000006064820152608401610909565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820184905285919082169063095ea7b3906044015b602060405180830381600087803b158015610c9d57600080fd5b505af1158015610cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd59190614601565b95945050505050565b6000546001600160a01b03163314610d385760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b610d4333838361301b565b5050565b6000546001600160a01b03163314610da15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03811660009081526009602052604090205460ff16610e095760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610909565b60005b600b54811015610d4357816001600160a01b0316600b8281548110610e4157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610f6a57600b8054610e6c906001906147fa565b81548110610e8a57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600b80546001600160a01b039092169183908110610ec457634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559184168152600582526040808220829055600990925220805460ff19169055600b805480610f3757634e487b7160e01b600052603160045260246000fd5b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b80610f7481614811565b915050610e0c565b6000546001600160a01b03163314610fd65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000683635c9adc5dea000008311156110555760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610909565b81611074576000611065846130c1565b509395506108ad945050505050565b600061107f846130c1565b509295506108ad945050505050565b6002546001600160a01b0316331461110e5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e00000000000000000000000000000000006064820152608401610909565b61111781613110565b50565b6000546001600160a01b031633146111745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b8281146111c35760405162461bcd60e51b815260206004820152601460248201527f4c656e6774687320646f6e2774206d617463682e0000000000000000000000006044820152606401610909565b60005b8381101561124657611234335b8686848181106111f357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061120891906144a1565b85858581811061122857634e487b7160e01b600052603260045260246000fd5b9050602002013561301b565b8061123e81614811565b9150506111c6565b50611511600b8054600181810183557f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9918201805473ffffffffffffffffffffffffffffffffffffffff1990811673c90e535c1dd20f20407fc3827a885b1324b4d5971790915560096020527f35deea48f5b59a04b5bccfe13388292f655a373f3af872a0a90758da7cbfa78b805460ff1990811684179091558454808401865584018054831673d52ac2ed10a7d8988d857672c1d46845260e2d201790557fd2b2424957dae13059323862daf906d6a11f6d81832aff39b5fe57b502d6421e80548216841790558454808401865584018054831673d1d9d3261932069d7872862ccd61ede394c902a71790557fd384e57444d487b9316b8c705b983a6c2a9ad40897092eb3ced014d5d63de19d8054821684179055845480840186558401805483167366b2477f33ade59e39ed3755ae5ff5f1e847269a1790557f3d4083d7b4f59495f14fe2320ac635d3b78ff2b05ae777002583a38de2458ad7805482168417905584548084018655840180548316734d80e2cac3b08590a2bdf92aa5ff9da61edbfe471790557f8b6c26df4947780e47ebdddc35e71a948e1c565ff748bd19688d928ca70e320080548216841790558454808401865584018054831673a3aaad1a66c40af1a9f3f44a0f58e906c544424f1790557f9834a67b88206ebea8d02b6e5eabe5f990c8853418ec7e5561d62e4fabe2948e80548216841790558454808401865584018054831673570c4fbd3b3b56f40d4e83e47890133a62497a2b1790557f2a94c5ba82efdfadfc202987b67c1eb65176a5dc6804c00702ecaa558b4fa0d580548216841790558454808401909555939092018054909216736ec81b2f9fdbcaa984f1c058c9283d275e20f3709081179092556000919091527f144dcd0d807337af4dc6f8a2b79c0a1f9622a34fe2eaca72ab0a0aff170630e88054909216179055565b5050601f80547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff1690555050565b6000546001600160a01b031633146115995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03811660009081526009602052604090205460ff16156116025760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610909565b6001600160a01b0381166000908152600460205260409020541561165c576001600160a01b03811660009081526004602052604090205461164290610b1c565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b6002546000906001600160a01b031633146117525760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e00000000000000000000000000000000006064820152608401610909565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820184905285919082169063a9059cbb90604401610c83565b6000546001600160a01b031633146117fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601e805491151577010000000000000000000000000000000000000000000000027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b60006108ad826133ea565b6000546001600160a01b031633146118af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6002546001600160a01b031633146119865760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e00000000000000000000000000000000006064820152608401610909565b4761199082613110565b600061199c478361342f565b6002549091506119b5906001600160a01b031682613471565b505050565b6000546001600160a01b03163314611a145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6002546001600160a01b03163314611acb5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e00000000000000000000000000000000006064820152608401610909565b600354604080517fad5c464800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b158015611b2957600080fd5b505afa158015611b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6191906144bd565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091506000906001600160a01b038316906370a082319060240160206040518083038186803b158015611bbf57600080fd5b505afa158015611bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf79190614635565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290529091506001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b158015611c5557600080fd5b505af1158015611c69573d6000803e3d6000fd5b505050505050565b60006108a9338484612862565b6000546001600160a01b03163314611cd85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601f805467ffffffffffffffff909216640100000000027fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff909216919091179055565b6017546001600160a01b0316336001600160a01b03161480611d5057506018546001600160a01b0316336001600160a01b0316145b80611d6557506000546001600160a01b031633145b611d6e57600080fd5b6000611d83683635c9adc5dea00000836126c8565b611d8c3061358a565b1115611dac57611da5683635c9adc5dea00000836126c8565b9050611db8565b611db53061358a565b90505b610d43816135e9565b6000546001600160a01b03163314611e1b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b828114611e6a5760405162461bcd60e51b815260206004820152601460248201527f4c656e6774687320646f6e2774206d617463682e0000000000000000000000006044820152606401610909565b60005b83811015611e9057611e7e336111d3565b80611e8881614811565b915050611e6d565b5050505050565b6000546001600160a01b03163314611ef15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601e5474010000000000000000000000000000000000000000900460ff1615611f5c5760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610909565b601d805473ffffffffffffffffffffffffffffffffffffffff1916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155611fa63082683635c9adc5dea0000061270a565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611fdf57600080fd5b505afa158015611ff3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201791906144bd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561205f57600080fd5b505afa158015612073573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209791906144bd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156120f757600080fd5b505af115801561210b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212f91906144bd565b601e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601d541663f305d719473061216c8161184a565b6000806121816000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156121fc57600080fd5b505af1158015612210573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122359190614671565b5050601e80547fffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff167701010000000000000000000000000000000000000000000017905550601f80547fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff1666278d0000000000179055683635c9adc5dea0000060108190556122c59060c86126c8565b601455601e8054740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8216179091554360115542601255601d546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b15801561237857600080fd5b505af115801561238c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190614601565b6000546001600160a01b0316331461240a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601e805463ffffffff9092167a010000000000000000000000000000000000000000000000000000027fffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b031633146124b95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b601e80549115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b0316331461255e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146125d95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6125e781633b9aca006147db565b60105550565b6017546001600160a01b0316336001600160a01b0316148061262257506018546001600160a01b0316336001600160a01b0316145b8061263757506000546001600160a01b031633145b61264057600080fd5b4761111781613808565b6000546001600160a01b031633146126a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000610bac83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613853565b6001600160a01b0383166127855760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610909565b6001600160a01b0382166128015760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610909565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166128de5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610909565b6001600160a01b03821661295a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610909565b600081116129d05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610909565b60006015819055601655601e80547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff169055612a146000546001600160a01b031690565b6001600160a01b0316836001600160a01b031614158015612a4357506000546001600160a01b03838116911614155b8015612a5857506001600160a01b0383163014155b8015612a7d57506001600160a01b03821660009081526007602052604090205460ff16155b8015612aa257506001600160a01b03831660009081526007602052604090205460ff16155b15612fb157601f546c01000000000000000000000000900460ff1615612b0a5760405162461bcd60e51b815260206004820152601160248201527f62757973206e6f7420656e61626c65642e0000000000000000000000000000006044820152606401610909565b6001600160a01b03821660009081526008602052604090205460ff16158015612b4c57506001600160a01b03831660009081526008602052604090205460ff16155b612b985760405162461bcd60e51b815260206004820152600860248201527f4e6f20626f74732e0000000000000000000000000000000000000000000000006044820152606401610909565b601e80547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167901000000000000000000000000000000000000000000000000001790556001600160a01b0383166000908152601c602052604081208054839290612c049084906147a3565b9091555050601e546001600160a01b038481169116148015612c345750601d546001600160a01b03838116911614155b15612d9e57601e5477010000000000000000000000000000000000000000000000900460ff1615612cc7576001600160a01b0382166000908152600a6020526040902054431415612cc75760405162461bcd60e51b815260206004820152601160248201527f4f6e652074782070657220626c6f636b2e0000000000000000000000000000006044820152606401610909565b6001600160a01b0382166000908152600a602052604090204390819055601154612cf2906002613881565b1115612d4b576127106015556000601655601e80547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000179055612fbc565b612d5582826138e0565b601e80547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16790100000000000000000000000000000000000000000000000000179055612fbc565b601e546001600160a01b038381169116148015612dc95750601d546001600160a01b03848116911614155b15612fac57601e80547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff169081905577010000000000000000000000000000000000000000000000900460ff1615612e83576001600160a01b0383166000908152600a6020526040902054431415612e835760405162461bcd60e51b815260206004820152601160248201527f4f6e652074782070657220626c6f636b2e0000000000000000000000000000006044820152606401610909565b6001600160a01b038316600052600a602052601054811115612ee75760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610909565b6000612ef38483613997565b9050612f008160056126c8565b601555612f0e81600a6126c8565b6016556000612f1c3061358a565b601354601e5491925082101590760100000000000000000000000000000000000000000000900460ff168015612f4f5750805b8015612f775750601e547501000000000000000000000000000000000000000000900460ff16155b8015612f865750612f86613b46565b15612fa857612f966019546135e9565b478015612fa657612fa647613808565b505b5050505b612fbc565b600060158190556016555b6119b583838361301b565b60008184841115612feb5760405162461bcd60e51b815260040161090991906146c2565b506000610cd584866147fa565b6000806000613005613b78565b909250905061301482826126c8565b9250505090565b6001600160a01b0380841660009081526009602052604080822054928516825290205460ff9182169116818015613050575080155b1561306557613060858585613d4c565b611e90565b811580156130705750805b1561308057613060858585613eab565b8115801561308c575080155b1561309c57613060858585613f8d565b8180156130a65750805b156130b65761306085858561400a565b611e90858585613f8d565b60008060008060008060008060006130d88a6140b6565b92509250925060008060006130f68d86866130f1612ff8565b6140f8565b919f909e50909c50959a5093985091965092945050505050565b60408051600280825260608201835283926000929190602083019080368337019050509050828160008151811061315757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156131c457600080fd5b505afa1580156131d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fc91906144bd565b8160018151811061321d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000918416906370a082319060240160206040518083038186803b15801561328657600080fd5b505afa15801561329a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132be9190614635565b6003546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810183905291925084169063095ea7b390604401602060405180830381600087803b15801561332757600080fd5b505af115801561333b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335f9190614601565b506003546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac947906133b2908490600090879030904290600401614733565b600060405180830381600087803b1580156133cc57600080fd5b505af11580156133e0573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0381166000908152600c602052604081205443141561342657506001600160a01b03166000908152600d602052604090205490565b6108ad8261358a565b6000610bac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fc7565b804710156134c15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610909565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461350e576040519150601f19603f3d011682016040523d82523d6000602084013e613513565b606091505b50509050806119b55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610909565b6001600160a01b03811660009081526009602052604081205460ff16156135c757506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546108ad90610b1c565b601e80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061366c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156136d957600080fd5b505afa1580156136ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061371191906144bd565b8160018151811061373257634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d54613758913091168461270a565b601d546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac947906137aa908590600090869030904290600401614733565b600060405180830381600087803b1580156137c457600080fd5b505af11580156137d8573d6000803e3d6000fd5b5050601e80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905550505050565b601754613833906001600160a01b031661382e6014613828856011614148565b906126c8565b613471565b601854611117906001600160a01b031661382e6014613828856003614148565b600081836138745760405162461bcd60e51b815260040161090991906146c2565b506000610cd584866147bb565b60008061388e83856147a3565b905083811015610bac5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610909565b6010548111156139325760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610909565b6014548161393f8461358a565b61394991906147a3565b1115610d435760405162461bcd60e51b815260206004820152601760248201527f4f766572206d61782077616c6c657420616d6f756e742e0000000000000000006044820152606401610909565b6001600160a01b038216600090815260096020526040812054819060ff16815b6001600160a01b0386166000908152601a6020526040902054811015613acb576001600160a01b0386166000908152601a60205260408120805483908110613a0f57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490506000601b6000896001600160a01b03166001600160a01b031681526020019081526020016000208381548110613a6257634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050428262278d00613a7f91906147a3565b1015613aaf578315613a9c57613a9581866147a3565b9450613ab6565b613aa581610b1c565b613a9590866147a3565b5050613acb565b50508080613ac390614811565b9150506139b7565b506001600160a01b0385166000908152601c6020526040902054821115613af55760009250613b3e565b6001600160a01b0385166000908152601c6020526040812054613b18908461342f565b9050613b2a8561382883612710614148565b9350612710841115613b3c5761271093505b505b505092915050565b601e546000907a010000000000000000000000000000000000000000000000000000900463ffffffff165a1015905090565b600e546000908190683635c9adc5dea00000825b600b54811015613d0f578260046000600b8481548110613bbc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c3557508160056000600b8481548110613c0e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c51575050600e5493683635c9adc5dea000009350915050565b613ca560046000600b8481548110613c7957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061342f565b9250613cfb60056000600b8481548110613ccf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061342f565b915080613d0781614811565b915050613b8c565b50600e54613d2690683635c9adc5dea000006126c8565b821015613d43575050600e5492683635c9adc5dea0000092509050565b90939092509050565b601e547801000000000000000000000000000000000000000000000000900460ff1615613d7e576119b58383836141e3565b600080600080600080613d90876130c1565b955095509550955095509550613da68886614301565b6001600160a01b038916600090815260056020526040902054613dc9908861342f565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613df8908761342f565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613e279086613881565b6001600160a01b038916600090815260046020526040902055613e4981614371565b613e5384836143f9565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e9891815260200190565b60405180910390a3505050505050505050565b601e547801000000000000000000000000000000000000000000000000900460ff1615613edd576119b58383836141e3565b600080600080600080613eef876130c1565b955095509550955095509550613f058884614301565b6001600160a01b038916600090815260046020526040902054613f28908761342f565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054613f5e9084613881565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613e279086613881565b601e547801000000000000000000000000000000000000000000000000900460ff1615613fbf576119b58383836141e3565b600080600080600080613fd1876130c1565b955095509550955095509550613fe78886614301565b6001600160a01b038916600090815260046020526040902054613df8908761342f565b601e547801000000000000000000000000000000000000000000000000900460ff161561403c576119b58383836141e3565b60008060008060008061404e876130c1565b9550955095509550955095506140648886614301565b6001600160a01b038916600090815260056020526040902054614087908861342f565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613f28908761342f565b6000806000806140c58561441d565b905060006140d28661443a565b905060006140ea826140e4898661342f565b9061342f565b979296509094509092505050565b60008080806141078886614148565b905060006141158887614148565b905060006141238888614148565b90506000614135826140e4868661342f565b939b939a50919850919650505050505050565b600082614157575060006108ad565b600061416383856147db565b90508261417085836147bb565b14610bac5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610909565b60018160006141f2828461342f565b6001600160a01b0386166000908152600c6020908152604080832043905560049091529020549091506142259085613881565b6001600160a01b038087166000908152600d602090815260408083209490945591891681526004909152205461425b908361342f565b6001600160a01b03808816600090815260046020526040808220939093559087168152205461428a9084613881565b6001600160a01b0386166000908152600460205260409020556142ac81614371565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142f191815260200190565b60405180910390a3505050505050565b601e54790100000000000000000000000000000000000000000000000000900460ff1615610d43576001600160a01b03919091166000818152601a6020908152604080832080546001808201835591855283852042910155938352601b8252822080549384018155825290200155565b600061437b612ff8565b905060006143898383614148565b306000908152600460205260409020549091506143a69082613881565b3060009081526004602090815260408083209390935560099052205460ff16156119b557306000908152600560205260409020546143e49084613881565b30600090815260056020526040902055505050565b600e54614406908361342f565b600e55600f546144169082613881565b600f555050565b60006108ad6127106138286016548561414890919063ffffffff16565b60006108ad6127106138286015548561414890919063ffffffff16565b60008083601f840112614468578182fd5b50813567ffffffffffffffff81111561447f578182fd5b6020830191508360208260051b850101111561449a57600080fd5b9250929050565b6000602082840312156144b2578081fd5b8135610bac81614842565b6000602082840312156144ce578081fd5b8151610bac81614842565b600080604083850312156144eb578081fd5b82356144f681614842565b9150602083013561450681614842565b809150509250929050565b600080600060608486031215614525578081fd5b833561453081614842565b9250602084013561454081614842565b929592945050506040919091013590565b60008060408385031215614563578182fd5b823561456e81614842565b946020939093013593505050565b60008060008060408587031215614591578081fd5b843567ffffffffffffffff808211156145a8578283fd5b6145b488838901614457565b909650945060208701359150808211156145cc578283fd5b506145d987828801614457565b95989497509550505050565b6000602082840312156145f6578081fd5b8135610bac81614857565b600060208284031215614612578081fd5b8151610bac81614857565b60006020828403121561462e578081fd5b5035919050565b600060208284031215614646578081fd5b5051919050565b6000806040838503121561465f578182fd5b82359150602083013561450681614857565b600080600060608486031215614685578283fd5b8351925060208401519150604084015190509250925092565b6000602082840312156146af578081fd5b813563ffffffff81168114610bac578182fd5b6000602080835283518082850152825b818110156146ee578581018301518582016040015282016146d2565b818111156146ff5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156147825784516001600160a01b03168352938301939183019160010161475d565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156147b6576147b661482c565b500190565b6000826147d657634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156147f5576147f561482c565b500290565b60008282101561480c5761480c61482c565b500390565b60006000198214156148255761482561482c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461111757600080fd5b801515811461111757600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212200bde00c18c4b88b869fca739417daad86f7ecb30fdd902c8535bdde901216b2b64736f6c63430008040033

Deployed Bytecode Sourcemap

16492:33852:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22554:83;;;;;;;;;;-1:-1:-1;22624:5:0;;;;;;;;;;;;;;;;;22554:83;;;;;;;:::i;:::-;;;;;;;;23460:193;;;;;;;;;;-1:-1:-1;23460:193:0;;;;;:::i;:::-;;:::i;:::-;;;6685:14:1;;6678:22;6660:41;;6648:2;6633:18;23460:193:0;6615:92:1;30814:116:0;;;;;;;;;;-1:-1:-1;30814:116:0;;;;;:::i;:::-;;:::i;:::-;;22831:95;;;;;;;;;;-1:-1:-1;17332:21:0;22831:95;;;15794:25:1;;;15782:2;15767:18;22831:95:0;15749:76:1;31061:116:0;;;;;;;;;;-1:-1:-1;31061:116:0;;;;;:::i;:::-;;:::i;23661:446::-;;;;;;;;;;-1:-1:-1;23661:446:0;;;;;:::i;:::-;;:::i;34551:91::-;;;;;;;;;;-1:-1:-1;34551:91:0;;;;;:::i;:::-;;:::i;30231:115::-;;;;;;;;;;-1:-1:-1;30231:115:0;;;;;:::i;:::-;;:::i;39021:253::-;;;;;;;;;;-1:-1:-1;39021:253:0;;;;;:::i;:::-;;:::i;22740:83::-;;;;;;;;;;-1:-1:-1;22740:83:0;;18901:1;17006:36:1;;16994:2;16979:18;22740:83:0;16961:87:1;13873:273:0;;;;;;;;;;-1:-1:-1;13873:273:0;;;;;:::i;:::-;;:::i;49706:134::-;;;;;;;;;;-1:-1:-1;49706:134:0;;;;;:::i;:::-;;:::i;47668:510::-;;;;;;;;;;-1:-1:-1;47668:510:0;;;;;:::i;:::-;;:::i;49145:111::-;;;;;;;;;;-1:-1:-1;49145:111:0;;;;;:::i;:::-;;:::i;38577:436::-;;;;;;;;;;-1:-1:-1;38577:436:0;;;;;:::i;:::-;;:::i;14537:112::-;;;;;;;;;;-1:-1:-1;14537:112:0;;;;;:::i;:::-;;:::i;33894:345::-;;;;;;;;;;-1:-1:-1;33894:345:0;;;;;:::i;:::-;;:::i;47193:467::-;;;;;;;;;;-1:-1:-1;47193:467:0;;;;;:::i;:::-;;:::i;48644:124::-;;;;;;;;;;-1:-1:-1;48644:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;48733:27:0;48709:4;48733:27;;;:18;:27;;;;;;;;;48644:124;14207:279;;;;;;;;;;-1:-1:-1;14207:279:0;;;;;:::i;:::-;;:::i;24218:101::-;;;;;;;;;;-1:-1:-1;24218:101:0;;;;;:::i;:::-;;:::i;22934:119::-;;;;;;;;;;-1:-1:-1;22934:119:0;;;;;:::i;:::-;;:::i;11791:148::-;;;;;;;;;;;;;:::i;15288:388::-;;;;;;;;;;-1:-1:-1;15288:388:0;;;;;:::i;:::-;;:::i;35303:98::-;;;;;;;;;;-1:-1:-1;35303:98:0;;;;;:::i;:::-;;:::i;15748:210::-;;;;;;;;;;;;;:::i;36819:130::-;;;;;;;;;;-1:-1:-1;36819:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;36911:30:0;36887:4;36911:30;;;:21;:30;;;;;;;;;36819:130;11577:79;;;;;;;;;;-1:-1:-1;11615:7:0;11642:6;11577:79;;-1:-1:-1;;;;;11642:6:0;;;5166:74:1;;5154:2;5139:18;11577:79:0;5121:125:1;22645:87:0;;;;;;;;;;-1:-1:-1;22717:7:0;;;;;;;;;;;;;;;;;22645:87;;23061:199;;;;;;;;;;-1:-1:-1;23061:199:0;;;;;:::i;:::-;;:::i;41669:110::-;;;;;;;;;;-1:-1:-1;41669:110:0;;;;;:::i;:::-;;:::i;35627:346::-;;;;;;;;;;-1:-1:-1;35627:346:0;;;;;:::i;:::-;;:::i;49388:306::-;;;;;;;;;;-1:-1:-1;49388:306:0;;;;;:::i;:::-;;:::i;31240:1172::-;;;;;;;;;;;;;:::i;35087:96::-;;;;;;;;;;-1:-1:-1;35087:96:0;;;;;:::i;:::-;;:::i;23268:184::-;;;;;;;;;;-1:-1:-1;23268:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;23417:18:0;;;23385:7;23417:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23268:184;28829:99;;;;;;;;;;-1:-1:-1;28829:99:0;;;;;:::i;:::-;;:::i;49268:110::-;;;;;;;;;;-1:-1:-1;49268:110:0;;;;;:::i;:::-;;:::i;29990:107::-;;;;;;;;;;-1:-1:-1;29990:107:0;;;;;:::i;:::-;;:::i;36077:157::-;;;;;;;;;;;;;:::i;34348:90::-;;;;;;;;;;-1:-1:-1;34348:90:0;;;;;:::i;:::-;;:::i;23460:193::-;23562:4;23584:39;9160:10;23607:7;23616:6;23584:8;:39::i;:::-;-1:-1:-1;23641:4:0;23460:193;;;;;:::o;30814:116::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;;;;;;;;;30886:15:::1;:36:::0;;-1:-1:-1;;30886:36:0::1;-1:-1:-1::0;;;;;30886:36:0;;;::::1;::::0;;;::::1;::::0;;30814:116::o;31061:::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;31133:15:::1;:36:::0;;-1:-1:-1;;31133:36:0::1;-1:-1:-1::0;;;;;31133:36:0;;;::::1;::::0;;;::::1;::::0;;31061:116::o;23661:446::-;23793:4;23810:36;23820:6;23828:9;23839:6;23810:9;:36::i;:::-;23857:220;23880:6;9160:10;23928:138;23984:6;23928:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23928:19:0;;;;;;:11;:19;;;;;;;;9160:10;23928:33;;;;;;;;;;:37;:138::i;:::-;23857:8;:220::i;:::-;-1:-1:-1;24095:4:0;23661:446;;;;;:::o;34551:91::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;-1:-1:-1;;;;;34613:13:0::1;34629:5;34613:13:::0;;;:5:::1;:13;::::0;;;;:21;;-1:-1:-1;;34613:21:0::1;::::0;;34551:91::o;30231:115::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;30324:14:::1;:6:::0;30333:5:::1;30324:14;:::i;:::-;30305:16;:33:::0;-1:-1:-1;30231:115:0:o;39021:253::-;39087:7;39126;;39115;:18;;39107:73;;;;-1:-1:-1;;;39107:73:0;;7985:2:1;39107:73:0;;;7967:21:1;8024:2;8004:18;;;7997:30;8063:34;8043:18;;;8036:62;8134:12;8114:18;;;8107:40;8164:19;;39107:73:0;7957:232:1;39107:73:0;39191:19;39214:10;:8;:10::i;:::-;39191:33;-1:-1:-1;39242:24:0;:7;39191:33;39242:11;:24::i;:::-;39235:31;39021:253;-1:-1:-1;;;39021:253:0:o;13873:273::-;13697:11;;14025:4;;-1:-1:-1;;;;;13697:11:0;9160:10;13697:27;13675:124;;;;-1:-1:-1;;;13675:124:0;;12534:2:1;13675:124:0;;;12516:21:1;12573:2;12553:18;;;12546:30;12612:34;12592:18;;;12585:62;12683:17;12663:18;;;12656:45;12718:19;;13675:124:0;12506:237:1;13675:124:0;14102:36:::1;::::0;;;;-1:-1:-1;;;;;5775:55:1;;;14102:36:0::1;::::0;::::1;5757:74:1::0;5847:18;;;5840:34;;;14070:13:0;;14102:19;;::::1;::::0;::::1;::::0;5730:18:1;;14102:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14095:43:::0;13873:273;-1:-1:-1;;;;;13873:273:0:o;49706:134::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;49788:44:::1;9160:10:::0;49817:7:::1;49826:5;49788:14;:44::i;:::-;49706:134:::0;;:::o;47668:510::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;-1:-1:-1;;;;;47761:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;47753:70;;;::::0;-1:-1:-1;;;47753:70:0;;10296:2:1;47753:70:0::1;::::0;::::1;10278:21:1::0;10335:2;10315:18;;;10308:30;10374:29;10354:18;;;10347:57;10421:18;;47753:70:0::1;10268:177:1::0;47753:70:0::1;47839:9;47834:337;47858:9;:16:::0;47854:20;::::1;47834:337;;;47916:7;-1:-1:-1::0;;;;;47900:23:0::1;:9;47910:1;47900:12;;;;;;-1:-1:-1::0;;;47900:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;47900:12:0::1;:23;47896:264;;;47959:9;47969:16:::0;;:20:::1;::::0;47988:1:::1;::::0;47969:20:::1;:::i;:::-;47959:31;;;;;;-1:-1:-1::0;;;47959:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;47944:9:::1;:12:::0;;-1:-1:-1;;;;;47959:31:0;;::::1;::::0;47954:1;;47944:12;::::1;;;-1:-1:-1::0;;;47944:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;47944:46:0::1;-1:-1:-1::0;;;;;47944:46:0;;::::1;;::::0;;48009:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;48048:21:::1;:30:::0;;;;:38;;-1:-1:-1;;48048:38:0::1;::::0;;48105:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;48105:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;48105:15:0;;;;;-1:-1:-1;;48105:15:0::1;::::0;;;;;49706:134;;:::o;47896:264::-:1;47876:3:::0;::::1;::::0;::::1;:::i;:::-;;;;47834:337;;49145:111:::0;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;-1:-1:-1;;;;;49214:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;49214:34:0::1;49244:4;49214:34;::::0;;49145:111::o;38577:436::-;38667:7;17332:21;38695:7;:18;;38687:62;;;;-1:-1:-1;;;38687:62:0;;10652:2:1;38687:62:0;;;10634:21:1;10691:2;10671:18;;;10664:30;10730:33;10710:18;;;10703:61;10781:18;;38687:62:0;10624:181:1;38687:62:0;38765:17;38760:246;;38800:15;38824:19;38835:7;38824:10;:19::i;:::-;-1:-1:-1;38799:44:0;;-1:-1:-1;38858:14:0;;-1:-1:-1;;;;;38858:14:0;38760:246;38907:23;38938:19;38949:7;38938:10;:19::i;:::-;-1:-1:-1;38905:52:0;;-1:-1:-1;38972:22:0;;-1:-1:-1;;;;;38972:22:0;14537:112;13697:11;;-1:-1:-1;;;;;13697:11:0;9160:10;13697:27;13675:124;;;;-1:-1:-1;;;13675:124:0;;12534:2:1;13675:124:0;;;12516:21:1;12573:2;12553:18;;;12546:30;12612:34;12592:18;;;12585:62;12683:17;12663:18;;;12656:45;12718:19;;13675:124:0;12506:237:1;13675:124:0;14621:20:::1;14627:13;14621:5;:20::i;:::-;14537:112:::0;:::o;33894:345::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;34003:25;;::::1;33995:58;;;::::0;-1:-1:-1;;;33995:58:0;;11775:2:1;33995:58:0::1;::::0;::::1;11757:21:1::0;11814:2;11794:18;;;11787:30;11853:22;11833:18;;;11826:50;11893:18;;33995:58:0::1;11747:170:1::0;33995:58:0::1;34068:6;34064:110;34080:15:::0;;::::1;34064:110;;;34117:45;9160:10:::0;34132:12:::1;34146:4;;34151:1;34146:7;;;;;-1:-1:-1::0;;;34146:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34155:3;;34159:1;34155:6;;;;;-1:-1:-1::0;;;34155:6:0::1;;;;;;;;;;;;;;;34117:14;:45::i;:::-;34097:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34064:110;;;;34184:18;32517:9:::0;:67;;;;;;;;;;;;;;-1:-1:-1;;32517:67:0;;;32540:42;32517:67;;;;32595:21;32517:67;32595:74;;:81;;-1:-1:-1;;32595:81:0;;;;;;;;32687:67;;;;;;;;;;;;;32710:42;32687:67;;;32765:74;:81;;;;;;;;32857:67;;;;;;;;;;;;;32880:42;32857:67;;;32935:74;:81;;;;;;;;33027:67;;;;;;;;;;;;;33050:42;33027:67;;;33105:74;:81;;;;;;;;33197:67;;;;;;;;;;;;;33220:42;33197:67;;;33275:74;:81;;;;;;;;33367:67;;;;;;;;;;;;;33390:42;33367:67;;;33445:74;:81;;;;;;;;33537:67;;;;;;;;;;;;;33560:42;33537:67;;;33615:74;:81;;;;;;;;33707:67;;;;;;;;;;;;;;;;;33730:42;33707:67;;;;;;-1:-1:-1;33785:74:0;;;;;:81;;;;;;;;32430:1454;34184:18:::1;-1:-1:-1::0;;34213:10:0::1;:18:::0;;;::::1;::::0;;-1:-1:-1;;33894:345:0:o;47193:467::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;-1:-1:-1;;;;;47390:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;47389:31;47381:71;;;::::0;-1:-1:-1;;;47381:71:0;;9155:2:1;47381:71:0::1;::::0;::::1;9137:21:1::0;9194:2;9174:18;;;9167:30;9233:29;9213:18;;;9206:57;9280:18;;47381:71:0::1;9127:177:1::0;47381:71:0::1;-1:-1:-1::0;;;;;47466:16:0;::::1;47485:1;47466:16:::0;;;:7:::1;:16;::::0;;;;;:20;47463:108:::1;;-1:-1:-1::0;;;;;47542:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;47522:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;47503:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;47463:108:::1;-1:-1:-1::0;;;;;47581:30:0::1;;::::0;;;:21:::1;:30;::::0;;;;:37;;-1:-1:-1;;47581:37:0::1;47614:4;47581:37:::0;;::::1;::::0;;;47629:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;47629:23:0::1;::::0;;::::1;::::0;;47193:467::o;14207:279::-;13697:11;;14362:4;;-1:-1:-1;;;;;13697:11:0;9160:10;13697:27;13675:124;;;;-1:-1:-1;;;13675:124:0;;12534:2:1;13675:124:0;;;12516:21:1;12573:2;12553:18;;;12546:30;12612:34;12592:18;;;12585:62;12683:17;12663:18;;;12656:45;12718:19;;13675:124:0;12506:237:1;13675:124:0;14439:39:::1;::::0;;;;-1:-1:-1;;;;;5775:55:1;;;14439:39:0::1;::::0;::::1;5757:74:1::0;5847:18;;;5840:34;;;14407:13:0;;14439:20;;::::1;::::0;::::1;::::0;5730:18:1;;14439:39:0::1;5712:168:1::0;24218:101:0;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;24288:15:::1;:23:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;24218:101::o;22934:119::-;23000:7;23027:18;23037:7;23027:9;:18::i;11791:148::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;11898:1:::1;11882:6:::0;;11861:40:::1;::::0;-1:-1:-1;;;;;11882:6:0;;::::1;::::0;11861:40:::1;::::0;11898:1;;11861:40:::1;11929:1;11912:19:::0;;-1:-1:-1;;11912:19:0::1;::::0;;11791:148::o;15288:388::-;13697:11;;-1:-1:-1;;;;;13697:11:0;9160:10;13697:27;13675:124;;;;-1:-1:-1;;;13675:124:0;;12534:2:1;13675:124:0;;;12516:21:1;12573:2;12553:18;;;12546:30;12612:34;12592:18;;;12585:62;12683:17;12663:18;;;12656:45;12718:19;;13675:124:0;12506:237:1;13675:124:0;15419:21:::1;15451:20;15457:13:::0;15451:5:::1;:20::i;:::-;15482:11;15496:33;:21;15522:6:::0;15496:25:::1;:33::i;:::-;15650:11;::::0;15482:47;;-1:-1:-1;15632:36:0::1;::::0;-1:-1:-1;;;;;15650:11:0::1;15482:47:::0;15632:9:::1;:36::i;:::-;13810:1;;15288:388:::0;:::o;35303:98::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;35368:16:::1;:25:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;35303:98::o;15748:210::-;13697:11;;-1:-1:-1;;;;;13697:11:0;9160:10;13697:27;13675:124;;;;-1:-1:-1;;;13675:124:0;;12534:2:1;13675:124:0;;;12516:21:1;12573:2;12553:18;;;12546:30;12612:34;12592:18;;;12585:62;12683:17;12663:18;;;12656:45;12718:19;;13675:124:0;12506:237:1;13675:124:0;15852:7:::1;::::0;:14:::1;::::0;;;;;;;15819:17:::1;::::0;-1:-1:-1;;;;;15852:7:0::1;::::0;:12:::1;::::0;:14:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:7;:14;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15892:29;::::0;;;;15915:4:::1;15892:29;::::0;::::1;5166:74:1::0;15819:48:0;;-1:-1:-1;15878:11:0::1;::::0;-1:-1:-1;;;;;15892:14:0;::::1;::::0;::::1;::::0;5139:18:1;;15892:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15932:18;::::0;;;;::::1;::::0;::::1;15794:25:1::0;;;15878:43:0;;-1:-1:-1;;;;;;15932:13:0;::::1;::::0;::::1;::::0;15767:18:1;;15932::0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13810:1;;15748:210::o:0;23061:199::-;23166:4;23188:42;9160:10;23212:9;23223:6;23188:9;:42::i;41669:110::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;41741:14:::1;:30:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;41669:110::o;35627:346::-;19581:15;;-1:-1:-1;;;;;19581:15:0;9160:10;-1:-1:-1;;;;;19565:31:0;;:83;;;-1:-1:-1;19633:15:0;;-1:-1:-1;;;;;19633:15:0;9160:10;-1:-1:-1;;;;;19617:31:0;;19565:83;:127;;;-1:-1:-1;11615:7:0;11642:6;-1:-1:-1;;;;;11642:6:0;9160:10;19669:23;19565:127;19543:160;;;;;;35735:12:::1;35791:20;17332:21;35803:7:::0;35791:11:::1;:20::i;:::-;35762:26;35782:4;35762:11;:26::i;:::-;:49;35758:175;;;35835:20;17332:21;35847:7:::0;35835:11:::1;:20::i;:::-;35828:27;;35758:175;;;35895:26;35915:4;35895:11;:26::i;:::-;35888:33;;35758:175;35943:22;35960:4;35943:16;:22::i;49388:306::-:0;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;49503:30;;::::1;49495:63;;;::::0;-1:-1:-1;;;49495:63:0;;11775:2:1;49495:63:0::1;::::0;::::1;11757:21:1::0;11814:2;11794:18;;;11787:30;11853:22;11833:18;;;11826:50;11893:18;;49495:63:0::1;11747:170:1::0;49495:63:0::1;49573:6;49569:118;49585:18:::0;;::::1;49569:118;;;49625:50;9160:10:::0;49640:12:::1;9080:98:::0;49625:50:::1;49605:3:::0;::::1;::::0;::::1;:::i;:::-;;;;49569:118;;;;49388:306:::0;;;;:::o;31240:1172::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;31300:11:::1;::::0;;;::::1;;;31299:12;31291:48;;;::::0;-1:-1:-1;;;31291:48:0;;14449:2:1;31291:48:0::1;::::0;::::1;14431:21:1::0;14488:2;14468:18;;;14461:30;14527:25;14507:18;;;14500:53;14570:18;;31291:48:0::1;14421:173:1::0;31291:48:0::1;31485:15;:34:::0;;-1:-1:-1;;31485:34:0::1;31421:42;31485:34:::0;;::::1;::::0;;;31530:58:::1;31547:4;31421:42:::0;17332:21:::1;31530:8;:58::i;:::-;31633:16;-1:-1:-1::0;;;;;31633:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31615:70:0::1;;31694:4;31701:16;-1:-1:-1::0;;;;;31701:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31615:110;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;5504:15:1;;;31615:110:0::1;::::0;::::1;5486:34:1::0;5556:15;;5536:18;;;5529:43;5398:18;;31615:110:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31599:13;:126:::0;;-1:-1:-1;;31599:126:0::1;-1:-1:-1::0;;;;;31599:126:0;;::::1;;::::0;;31736:15:::1;::::0;::::1;:31;31775:21;31820:4;31840:24;31820:4:::0;31840:9:::1;:24::i;:::-;31879:1;31895::::0;31911:7:::1;11615::::0;11642:6;-1:-1:-1;;;;;11642:6:0;;11577:79;31911:7:::1;31736:223;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;6267:15:1;;;31736:223:0::1;::::0;::::1;6249:34:1::0;6299:18;;;6292:34;;;;6342:18;;;6335:34;;;;6385:18;;;6378:34;6449:15;;;6428:19;;;6421:44;31933:15:0::1;6481:19:1::0;;;6474:35;6160:19;;31736:223:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;31970:11:0::1;:18:::0;;31999:22;;;;;;-1:-1:-1;32064:14:0::1;:24:::0;;;::::1;::::0;::::1;::::0;;17332:21:::1;32099:12;:22:::0;;;32167:16:::1;::::0;32179:3:::1;32167:11;:16::i;:::-;32148;:35:::0;32194:11:::1;:18:::0;;;;;::::1;;::::0;;;32235:12:::1;32223:9;:24:::0;32267:15:::1;32258:6;:24:::0;32345:15:::1;::::0;32293:111:::1;::::0;;;;-1:-1:-1;;;;;32345:15:0;;::::1;32293:111;::::0;::::1;5757:74:1::0;-1:-1:-1;;5847:18:1;;;5840:34;32300:13:0;;;32293:29:::1;::::0;5730:18:1;;32293:111:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35087:96::-:0;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;35151:15:::1;:24:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;35087:96::o;28829:99::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;28904:6:::1;:16:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;28829:99::o;49268:110::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;-1:-1:-1;;;;;49335:27:0::1;49365:5;49335:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;49335:35:0::1;::::0;;49268:110::o;29990:107::-;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;30075:14:::1;:6:::0;30084:5:::1;30075:14;:::i;:::-;30060:12;:29:::0;-1:-1:-1;29990:107:0:o;36077:157::-;19581:15;;-1:-1:-1;;;;;19581:15:0;9160:10;-1:-1:-1;;;;;19565:31:0;;:83;;;-1:-1:-1;19633:15:0;;-1:-1:-1;;;;;19633:15:0;9160:10;-1:-1:-1;;;;;19617:31:0;;19565:83;:127;;;-1:-1:-1;11615:7:0;11642:6;-1:-1:-1;;;;;11642:6:0;9160:10;19669:23;19565:127;19543:160;;;;;;36162:21:::1;36194:32;36162:21:::0;36194:12:::1;:32::i;34348:90::-:0;11704:6;;-1:-1:-1;;;;;11704:6:0;9160:10;11704:22;11696:67;;;;-1:-1:-1;;;11696:67:0;;11414:2:1;11696:67:0;;;11396:21:1;;;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;11544:18;;11696:67:0;11386:182:1;11696:67:0;-1:-1:-1;;;;;34410:13:0::1;;::::0;;;:5:::1;:13;::::0;;;;:20;;-1:-1:-1;;34410:20:0::1;34426:4;34410:20;::::0;;34348:90::o;10828:132::-;10886:7;10913:39;10917:1;10920;10913:39;;;;;;;;;;;;;;;;;:3;:39::i;24327:369::-;-1:-1:-1;;;;;24454:19:0;;24446:68;;;;-1:-1:-1;;;24446:68:0;;14044:2:1;24446:68:0;;;14026:21:1;14083:2;14063:18;;;14056:30;14122:34;14102:18;;;14095:62;14193:6;14173:18;;;14166:34;14217:19;;24446:68:0;14016:226:1;24446:68:0;-1:-1:-1;;;;;24533:21:0;;24525:68;;;;-1:-1:-1;;;24525:68:0;;8396:2:1;24525:68:0;;;8378:21:1;8435:2;8415:18;;;8408:30;8474:34;8454:18;;;8447:62;8545:4;8525:18;;;8518:32;8567:19;;24525:68:0;8368:224:1;24525:68:0;-1:-1:-1;;;;;24604:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24656:32;;15794:25:1;;;24656:32:0;;15767:18:1;24656:32:0;;;;;;;24327:369;;;:::o;24704:4007::-;-1:-1:-1;;;;;24826:18:0;;24818:68;;;;-1:-1:-1;;;24818:68:0;;13638:2:1;24818:68:0;;;13620:21:1;13677:2;13657:18;;;13650:30;13716:34;13696:18;;;13689:62;13787:7;13767:18;;;13760:35;13812:19;;24818:68:0;13610:227:1;24818:68:0;-1:-1:-1;;;;;24905:16:0;;24897:64;;;;-1:-1:-1;;;24897:64:0;;7581:2:1;24897:64:0;;;7563:21:1;7620:2;7600:18;;;7593:30;7659:34;7639:18;;;7632:62;7730:5;7710:18;;;7703:33;7753:19;;24897:64:0;7553:225:1;24897:64:0;24989:1;24980:6;:10;24972:64;;;;-1:-1:-1;;;24972:64:0;;12124:2:1;24972:64:0;;;12106:21:1;12163:2;12143:18;;;12136:30;12202:34;12182:18;;;12175:62;12273:11;12253:18;;;12246:39;12302:19;;24972:64:0;12096:231:1;24972:64:0;25059:1;25049:7;:11;;;25071;:15;25097:5;:13;;;;;;25149:7;11615;11642:6;-1:-1:-1;;;;;11642:6:0;;11577:79;25149:7;-1:-1:-1;;;;;25141:15:0;:4;-1:-1:-1;;;;;25141:15:0;;;:45;;;;-1:-1:-1;11615:7:0;11642:6;-1:-1:-1;;;;;25173:13:0;;;11642:6;;25173:13;;25141:45;:83;;;;-1:-1:-1;;;;;;25203:21:0;;25219:4;25203:21;;25141:83;:123;;;;-1:-1:-1;;;;;;25242:22:0;;;;;;:18;:22;;;;;;;;25241:23;25141:123;:165;;;;-1:-1:-1;;;;;;25282:24:0;;;;;;:18;:24;;;;;;;;25281:25;25141:165;25123:3536;;;25342:10;;;;;;;25341:11;25333:41;;;;-1:-1:-1;;;25333:41:0;;14801:2:1;25333:41:0;;;14783:21:1;14840:2;14820:18;;;14813:30;14879:19;14859:18;;;14852:47;14916:18;;25333:41:0;14773:167:1;25333:41:0;-1:-1:-1;;;;;25416:9:0;;;;;;:5;:9;;;;;;;;25415:10;:47;;;;-1:-1:-1;;;;;;25451:11:0;;;;;;:5;:11;;;;;;;;25450:12;25415:47;25389:117;;;;-1:-1:-1;;;25389:117:0;;13302:2:1;25389:117:0;;;13284:21:1;13341:1;13321:18;;;13314:29;13379:10;13359:18;;;13352:38;13407:18;;25389:117:0;13274:157:1;25389:117:0;25666:5;:12;;;;;;;;-1:-1:-1;;;;;25790:12:0;;25666;25790;;;:6;:12;;;;;:22;;25806:6;;25666:12;25790:22;;25806:6;;25790:22;:::i;:::-;;;;-1:-1:-1;;25860:13:0;;-1:-1:-1;;;;;25852:21:0;;;25860:13;;25852:21;:55;;;;-1:-1:-1;25891:15:0;;-1:-1:-1;;;;;25877:30:0;;;25891:15;;25877:30;;25852:55;25848:2641;;;26016:15;;;;;;;26013:126;;;-1:-1:-1;;;;;26064:17:0;;;;;;:13;:17;;;;;;26085:12;26064:33;;26056:63;;;;-1:-1:-1;;;26056:63:0;;15147:2:1;26056:63:0;;;15129:21:1;15186:2;15166:18;;;15159:30;15225:19;15205:18;;;15198:47;15262:18;;26056:63:0;15119:167:1;26056:63:0;-1:-1:-1;;;;;26188:17:0;;;;;;:13;:17;;;;;26208:12;26188:32;;;;26363:9;;:18;;17853:1;26363:13;:18::i;:::-;:33;26360:459;;;26525:5;26515:7;:15;26567:1;26553:11;:15;26591:5;:12;;;;;;;;25123:3536;;26360:459;26742:22;26753:2;26757:6;26742:10;:22::i;:::-;26787:5;:12;;;;;;;;25123:3536;;25848:2641;26850:13;;-1:-1:-1;;;;;26844:19:0;;;26850:13;;26844:19;:55;;;;-1:-1:-1;26883:15:0;;-1:-1:-1;;;;;26867:32:0;;;26883:15;;26867:32;;26844:55;26840:1649;;;26946:5;:13;;;;;;;;27066:15;;;26946:13;27066:15;27063:128;;;-1:-1:-1;;;;;27114:19:0;;;;;;:13;:19;;;;;;27137:12;27114:35;;27106:65;;;;-1:-1:-1;;;27106:65:0;;15147:2:1;27106:65:0;;;15129:21:1;15186:2;15166:18;;;15159:30;15225:19;15205:18;;;15198:47;15262:18;;27106:65:0;15119:167:1;27106:65:0;-1:-1:-1;;;;;27240:19:0;;;;:13;:19;;27334:12;;27324:22;;;27316:63;;;;-1:-1:-1;;;27316:63:0;;15493:2:1;27316:63:0;;;15475:21:1;15532:2;15512:18;;;15505:30;15571;15551:18;;;15544:58;15619:18;;27316:63:0;15465:178:1;27316:63:0;27506:13;27522:26;27535:4;27541:6;27522:12;:26::i;:::-;27506:42;-1:-1:-1;27708:12:0;27506:42;27718:1;27708:9;:12::i;:::-;27698:7;:22;27812:13;:5;27822:2;27812:9;:13::i;:::-;27798:11;:27;27902:28;27933:26;27953:4;27933:11;:26::i;:::-;28017:19;;28059:11;;27902:57;;-1:-1:-1;27993:43:0;;;;28059:11;;;;;:22;;;;;28074:7;28059:22;:33;;;;-1:-1:-1;28086:6:0;;;;;;;28085:7;28059:33;:50;;;;;28096:13;:11;:13::i;:::-;28055:419;;;28211:34;28228:16;;28211;:34::i;:::-;28297:21;28345:22;;28341:114;;28396:35;28409:21;28396:12;:35::i;:::-;28055:419;;26840:1649;;;;25123:3536;;;28616:1;28606:7;:11;;;28632;:15;25123:3536;28671:32;28686:4;28692:2;28696:6;28671:14;:32::i;10342:224::-;10462:7;10498:12;10490:6;;;;10482:29;;;;-1:-1:-1;;;10482:29:0;;;;;;;;:::i;:::-;-1:-1:-1;10522:9:0;10534:5;10538:1;10534;:5;:::i;40639:163::-;40680:7;40701:15;40718;40737:19;:17;:19::i;:::-;40700:56;;-1:-1:-1;40700:56:0;-1:-1:-1;40774:20:0;40700:56;;40774:11;:20::i;:::-;40767:27;;;;40639:163;:::o;37032:762::-;-1:-1:-1;;;;;37176:29:0;;;37160:13;37176:29;;;:21;:29;;;;;;;37235:32;;;;;;;;37176:29;;;;;37235:32;37176:29;37282:24;;;;;37295:11;37294:12;37282:24;37278:509;;;37323:48;37345:6;37353:9;37364:6;37323:21;:48::i;:::-;37278:509;;;37394:8;37393:9;:24;;;;;37406:11;37393:24;37389:398;;;37434:46;37454:6;37462:9;37473:6;37434:19;:46::i;37389:398::-;37503:8;37502:9;:25;;;;;37516:11;37515:12;37502:25;37498:289;;;37544:44;37562:6;37570:9;37581:6;37544:17;:44::i;37498:289::-;37610:8;:23;;;;;37622:11;37610:23;37606:181;;;37650:48;37672:6;37680:9;37691:6;37650:21;:48::i;37606:181::-;37731:44;37749:6;37757:9;37768:6;37731:17;:44::i;39439:419::-;39498:7;39507;39516;39525;39534;39543;39564:23;39589:12;39603:18;39625:20;39637:7;39625:11;:20::i;:::-;39563:82;;;;;;39657:15;39674:23;39699:12;39715:50;39727:7;39736:4;39742:10;39754;:8;:10::i;:::-;39715:11;:50::i;:::-;39656:109;;;;-1:-1:-1;39656:109:0;;-1:-1:-1;39816:15:0;;-1:-1:-1;39833:4:0;;-1:-1:-1;39839:10:0;;-1:-1:-1;39439:419:0;;-1:-1:-1;;;;;39439:419:0:o;14753:527::-;14868:16;;;14882:1;14868:16;;;;;;;;14829:3;;14801:18;;14868:16;14882:1;14868:16;;;;;;;;;;-1:-1:-1;14868:16:0;14844:40;;14905:3;14895:4;14900:1;14895:7;;;;;;-1:-1:-1;;;14895:7:0;;;;;;;;;-1:-1:-1;;;;;14895:13:0;;;:7;;;;;;;;;;:13;;;;14929:7;;:14;;;;;;;;:7;;;;;:12;;:14;;;;;14895:7;;14929:14;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14919:4;14924:1;14919:7;;;;;;-1:-1:-1;;;14919:7:0;;;;;;;;;-1:-1:-1;;;;;14919:24:0;;;:7;;;;;;;;;:24;14976:36;;;;;15006:4;14976:36;;;5166:74:1;14954:19:0;;14976:21;;;;;5139:18:1;;14976:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15051:7;;15023:50;;;;;-1:-1:-1;;;;;15051:7:0;;;15023:50;;;5757:74:1;5847:18;;;5840:34;;;14954:58:0;;-1:-1:-1;15023:19:0;;;;;5730:18:1;;15023:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15084:7:0;;:188;;;;;-1:-1:-1;;;;;15084:7:0;;;;:58;;:188;;15157:11;;15084:7;;15199:4;;15226;;15246:15;;15084:188;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14753:527;;;;:::o;36242:221::-;-1:-1:-1;;;;;36320:13:0;;36296:7;36320:13;;;:8;:13;;;;;;36337:12;36320:29;36316:140;;;-1:-1:-1;;;;;;36373:15:0;;;;;:10;:15;;;;;;;36242:221::o;36316:140::-;36428:16;36440:3;36428:11;:16::i;10198:136::-;10256:7;10283:43;10287:1;10290;10283:43;;;;;;;;;;;;;;;;;:3;:43::i;16079:391::-;16208:6;16183:21;:31;;16161:110;;;;-1:-1:-1;;;16161:110:0;;9938:2:1;16161:110:0;;;9920:21:1;9977:2;9957:18;;;9950:30;10016:31;9996:18;;;9989:59;10065:18;;16161:110:0;9910:179:1;16161:110:0;16285:12;16303:9;-1:-1:-1;;;;;16303:14:0;16325:6;16303:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16284:52;;;16369:7;16347:115;;;;-1:-1:-1;;;16347:115:0;;9511:2:1;16347:115:0;;;9493:21:1;9550:2;9530:18;;;9523:30;9589:34;9569:18;;;9562:62;9660:28;9640:18;;;9633:56;9706:19;;16347:115:0;9483:248:1;36471:186:0;-1:-1:-1;;;;;36551:26:0;;36527:7;36551:26;;;:21;:26;;;;;;;;36547:51;;;-1:-1:-1;;;;;;36586:12:0;;;;;:7;:12;;;;;;;36471:186::o;36547:51::-;-1:-1:-1;;;;;36636:12:0;;;;;;:7;:12;;;;;;36616:33;;:19;:33::i;28936:483::-;19441:6;:13;;;;;;;;29038:16:::1;::::0;;29052:1:::1;29038:16:::0;;;;;::::1;::::0;;-1:-1:-1;;29038:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;29038:16:0::1;29014:40;;29083:4;29065;29070:1;29065:7;;;;;;-1:-1:-1::0;;;29065:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;29065:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;29109:15:::1;::::0;:22:::1;::::0;;;;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;29065:7;;29109:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29099:4;29104:1;29099:7;;;;;;-1:-1:-1::0;;;29099:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;29099:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;29174:15:::1;::::0;29142:62:::1;::::0;29159:4:::1;::::0;29174:15:::1;29192:11:::0;29142:8:::1;:62::i;:::-;29215:15;::::0;:196:::1;::::0;;;;-1:-1:-1;;;;;29215:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;29296:11;;29215:15:::1;::::0;29338:4;;29365::::1;::::0;29385:15:::1;::::0;29215:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19477:6:0;:14;;;;;;-1:-1:-1;;;;28936:483:0:o;29427:433::-;29638:15;;29606:110;;-1:-1:-1;;;;;29638:15:0;29668:37;18157:2;29668:19;:6;18050:2;29668:10;:19::i;:::-;:23;;:37::i;:::-;29606:17;:110::i;:::-;29775:15;;29743:109;;-1:-1:-1;;;;;29775:15:0;29805:36;18157:2;29805:18;:6;18093:1;29805:10;:18::i;10968:223::-;11088:7;11123:12;11116:5;11108:28;;;;-1:-1:-1;;;11108:28:0;;;;;;;;:::i;:::-;-1:-1:-1;11147:9:0;11159:5;11163:1;11159;:5;:::i;10011:179::-;10069:7;;10101:5;10105:1;10101;:5;:::i;:::-;10089:17;;10130:1;10125;:6;;10117:46;;;;-1:-1:-1;;;10117:46:0;;8799:2:1;10117:46:0;;;8781:21:1;8838:2;8818:18;;;8811:30;8877:29;8857:18;;;8850:57;8924:18;;10117:46:0;8771:177:1;30354:329:0;30479:12;;30469:6;:22;;30461:63;;;;-1:-1:-1;;;30461:63:0;;15493:2:1;30461:63:0;;;15475:21:1;15532:2;15512:18;;;15505:30;15571;15551:18;;;15544:58;15619:18;;30461:63:0;15465:178:1;30461:63:0;30608:16;;30598:6;30580:15;30592:2;30580:11;:15::i;:::-;:24;;;;:::i;:::-;:44;;30558:117;;;;-1:-1:-1;;;30558:117:0;;12950:2:1;30558:117:0;;;12932:21:1;12989:2;12969:18;;;12962:30;13028:25;13008:18;;;13001:53;13071:18;;30558:117:0;12922:173:1;42131:1678:0;-1:-1:-1;;;;;42380:29:0;;42207:16;42380:29;;;:21;:29;;;;;;42207:16;;42380:29;;42207:16;42420:730;-1:-1:-1;;;;;42489:14:0;;;;;;:6;:14;;;;;:21;42476:34;;42420:730;;;-1:-1:-1;;;;;42609:14:0;;42596:10;42609:14;;;:6;:14;;;;;:26;;42624:10;;42609:26;;;;-1:-1:-1;;;42609:26:0;;;;;;;;;;;;;;;;;42596:39;;42650:11;42664:7;:15;42672:6;-1:-1:-1;;;;;42664:15:0;-1:-1:-1;;;;;42664:15:0;;;;;;;;;;;;42680:10;42664:27;;;;;;-1:-1:-1;;;42664:27:0;;;;;;;;;;;;;;;;;42650:41;;42725:15;42710:2;42715:7;42710:12;;;;:::i;:::-;:30;42706:433;;;42828:4;42825:156;;;42857:17;42871:3;42857:17;;:::i;:::-;;;42706:433;;42825:156;42937:24;42957:3;42937:19;:24::i;:::-;42923:38;;;;:::i;42706:433::-;43118:5;;;;42706:433;42420:730;;42525:12;;;;;:::i;:::-;;;;42420:730;;;-1:-1:-1;;;;;;43356:14:0;;;;;;:6;:14;;;;;;43343:27;;43340:462;;;43398:1;43387:12;;43340:462;;;-1:-1:-1;;;;;43501:14:0;;43484;43501;;;:6;:14;;;;;;:30;;43520:10;43501:18;:30::i;:::-;43484:47;-1:-1:-1;43647:29:0;43669:6;43647:17;43484:47;43658:5;43647:10;:17::i;:29::-;43636:40;;43733:5;43722:8;:16;43719:72;;;43770:5;43759:16;;43719:72;43340:462;;42131:1678;;;;;;:::o;34650:161::-;34788:15;;34695:4;;34788:15;;;;;34775:9;:28;;34768:35;;34650:161;:::o;40810:561::-;40907:7;;40860;;;;17332:21;40860:7;40967:289;40991:9;:16;40987:20;;40967:289;;;41057:7;41033;:21;41041:9;41051:1;41041:12;;;;;;-1:-1:-1;;;41041:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41041:12:0;41033:21;;;;;;;;;;;;;:31;;:66;;;41092:7;41068;:21;41076:9;41086:1;41076:12;;;;;;-1:-1:-1;;;41076:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41076:12:0;41068:21;;;;;;;;;;;;;:31;41033:66;41029:97;;;-1:-1:-1;;41109:7:0;;;17332:21;;-1:-1:-1;40810:561:0;-1:-1:-1;;40810:561:0:o;41029:97::-;41151:34;41163:7;:21;41171:9;41181:1;41171:12;;;;;;-1:-1:-1;;;41171:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41171:12:0;41163:21;;;;;;;;;;;;;41151:7;;:11;:34::i;:::-;41141:44;;41210:34;41222:7;:21;41230:9;41240:1;41230:12;;;;;;-1:-1:-1;;;41230:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41230:12:0;41222:21;;;;;;;;;;;;;41210:7;;:11;:34::i;:::-;41200:44;-1:-1:-1;41009:3:0;;;;:::i;:::-;;;;40967:289;;;-1:-1:-1;41280:7:0;;:20;;17332:21;41280:11;:20::i;:::-;41270:7;:30;41266:61;;;-1:-1:-1;;41310:7:0;;;17332:21;;-1:-1:-1;40810:561:0;-1:-1:-1;40810:561:0:o;41266:61::-;41346:7;;41355;;-1:-1:-1;40810:561:0;-1:-1:-1;40810:561:0:o;45507:837::-;45647:5;;;;;;;45643:694;;;45669:40;45682:6;45690:9;45701:7;45669:12;:40::i;45643:694::-;45753:15;45783:23;45821:12;45848:23;45886:12;45913:18;45945:19;45956:7;45945:10;:19::i;:::-;45738:226;;;;;;;;;;;;45975:38;45986:9;45997:15;45975:10;:38::i;:::-;-1:-1:-1;;;;;46042:15:0;;;;;;:7;:15;;;;;;:28;;46062:7;46042:19;:28::i;:::-;-1:-1:-1;;;;;46024:15:0;;;;;;:7;:15;;;;;;;;:46;;;;46099:7;:15;;;;:28;;46119:7;46099:19;:28::i;:::-;-1:-1:-1;;;;;46081:15:0;;;;;;;:7;:15;;;;;;:46;;;;46159:18;;;;;;;:39;;46182:15;46159:22;:39::i;:::-;-1:-1:-1;;;;;46138:18:0;;;;;;:7;:18;;;;;:60;46209:22;46220:10;46209;:22::i;:::-;46242:23;46254:4;46260;46242:11;:23::i;:::-;46298:9;-1:-1:-1;;;;;46281:44:0;46290:6;-1:-1:-1;;;;;46281:44:0;;46309:15;46281:44;;;;15794:25:1;;15782:2;15767:18;;15749:76;46281:44:0;;;;;;;;45643:694;;;;;;45507:837;;;:::o;44650:849::-;44788:5;;;;;;;44784:708;;;44810:40;44823:6;44831:9;44842:7;44810:12;:40::i;44784:708::-;44894:15;44924:23;44962:12;44989:23;45027:12;45054:18;45086:19;45097:7;45086:10;:19::i;:::-;44879:226;;;;;;;;;;;;45116:38;45127:9;45138:15;45116:10;:38::i;:::-;-1:-1:-1;;;;;45183:15:0;;;;;;:7;:15;;;;;;:28;;45203:7;45183:19;:28::i;:::-;-1:-1:-1;;;;;45165:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;45243:18;;;;;:7;:18;;;;;:39;;45266:15;45243:22;:39::i;:::-;-1:-1:-1;;;;;45222:18:0;;;;;;:7;:18;;;;;;;;:60;;;;45314:7;:18;;;;:39;;45337:15;45314:22;:39::i;43817:825::-;43988:5;;;;;;;43984:641;;;44010:40;44023:6;44031:9;44042:7;44010:12;:40::i;43984:641::-;44098:15;44128:23;44166:12;44193:23;44231:12;44258:18;44290:19;44301:7;44290:10;:19::i;:::-;44083:226;;;;;;;;;;;;44320:38;44331:9;44342:15;44320:10;:38::i;:::-;-1:-1:-1;;;;;44387:15:0;;;;;;:7;:15;;;;;;:28;;44407:7;44387:19;:28::i;46352:828::-;46457:5;;;;;;;46454:719;;;46479:40;46492:6;46500:9;46511:7;46479:12;:40::i;46454:719::-;46553:15;46570:23;46595:12;46609:23;46634:12;46648:18;46670:19;46681:7;46670:10;:19::i;:::-;46552:137;;;;;;;;;;;;46704:38;46715:9;46726:15;46704:10;:38::i;:::-;-1:-1:-1;;;;;46775:15:0;;;;;;:7;:15;;;;;;:28;;46795:7;46775:19;:28::i;:::-;-1:-1:-1;;;;;46757:15:0;;;;;;:7;:15;;;;;;;;:46;;;;46836:7;:15;;;;:28;;46856:7;46836:19;:28::i;39866:328::-;39926:7;39935;39944;39964:12;39979:28;39999:7;39979:19;:28::i;:::-;39964:43;;40018:18;40039:24;40055:7;40039:15;:24::i;:::-;40018:45;-1:-1:-1;40074:23:0;40100:33;40018:45;40100:17;:7;40112:4;40100:11;:17::i;:::-;:21;;:33::i;:::-;40074:59;40169:4;;-1:-1:-1;40175:10:0;;-1:-1:-1;39866:328:0;;-1:-1:-1;;;39866:328:0:o;40202:429::-;40317:7;;;;40373:24;:7;40385:11;40373;:24::i;:::-;40355:42;-1:-1:-1;40408:12:0;40423:21;:4;40432:11;40423:8;:21::i;:::-;40408:36;-1:-1:-1;40455:18:0;40476:27;:10;40491:11;40476:14;:27::i;:::-;40455:48;-1:-1:-1;40514:23:0;40540:33;40455:48;40540:17;:7;40552:4;40540:11;:17::i;:33::-;40592:7;;;;-1:-1:-1;40618:4:0;;-1:-1:-1;40202:429:0;;-1:-1:-1;;;;;;;40202:429:0:o;10574:246::-;10632:7;10656:6;10652:47;;-1:-1:-1;10686:1:0;10679:8;;10652:47;10709:9;10721:5;10725:1;10721;:5;:::i;:::-;10709:17;-1:-1:-1;10754:1:0;10745:5;10749:1;10709:17;10745:5;:::i;:::-;:10;10737:56;;;;-1:-1:-1;;;10737:56:0;;11012:2:1;10737:56:0;;;10994:21:1;11051:2;11031:18;;;11024:30;11090:34;11070:18;;;11063:62;11161:3;11141:18;;;11134:31;11182:19;;10737:56:0;10984:223:1;37855:714:0;38054:1;38084:7;38028:23;38118:28;38084:7;38054:1;38118:11;:28::i;:::-;-1:-1:-1;;;;;38202:19:0;;;;;;:8;:19;;;;;;;;38224:12;38202:34;;38271:7;:18;;;;;;38102:44;;-1:-1:-1;38271:31:0;;38294:7;38271:22;:31::i;:::-;-1:-1:-1;;;;;38247:21:0;;;;;;;:10;:21;;;;;;;;:55;;;;38364:15;;;;;:7;:15;;;;;:28;;38384:7;38364:19;:28::i;:::-;-1:-1:-1;;;;;38346:15:0;;;;;;;:7;:15;;;;;;:46;;;;38424:18;;;;;;;:39;;38447:15;38424:22;:39::i;:::-;-1:-1:-1;;;;;38403:18:0;;;;;;:7;:18;;;;;:60;38474:17;38485:5;38474:10;:17::i;:::-;38524:9;-1:-1:-1;;;;;38507:44:0;38516:6;-1:-1:-1;;;;;38507:44:0;;38535:15;38507:44;;;;15794:25:1;;15782:2;15767:18;;15749:76;38507:44:0;;;;;;;;37855:714;;;;;;:::o;41787:336::-;41901:5;;;;;;;41897:219;;;-1:-1:-1;;;;;42010:17:0;;;;;;;;:6;:17;;;;;;;;:39;;;;;;;;;;;;;;42033:15;42010:39;;;42064:18;;;:7;:18;;;;:40;;;;;;;;;;;;;41787:336::o;48776:361::-;48835:19;48857:10;:8;:10::i;:::-;48835:32;-1:-1:-1;48878:18:0;48899:27;:10;48835:32;48899:14;:27::i;:::-;48978:4;48962:22;;;;:7;:22;;;;;;48878:48;;-1:-1:-1;48962:38:0;;48878:48;48962:26;:38::i;:::-;48953:4;48937:22;;;;:7;:22;;;;;;;;:63;;;;49015:21;:36;;;;;;49011:118;;;49107:4;49091:22;;;;:7;:22;;;;;;:38;;49118:10;49091:26;:38::i;:::-;49082:4;49066:22;;;;:7;:22;;;;;:63;48776:361;;;:::o;39284:147::-;39362:7;;:17;;39374:4;39362:11;:17::i;:::-;39352:7;:27;39403:10;;:20;;39418:4;39403:14;:20::i;:::-;39390:10;:33;-1:-1:-1;;39284:147:0:o;48188:170::-;48283:7;48315:35;48344:5;48315:24;48327:11;;48315:7;:11;;:24;;;;:::i;41385:130::-;41449:7;41476:31;41501:5;41476:20;41488:7;;41476;:11;;:20;;;;:::i;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;942:398::-;1010:6;1018;1071:2;1059:9;1050:7;1046:23;1042:32;1039:2;;;1092:6;1084;1077:22;1039:2;1136:9;1123:23;1155:31;1180:5;1155:31;:::i;:::-;1205:5;-1:-1:-1;1262:2:1;1247:18;;1234:32;1275:33;1234:32;1275:33;:::i;:::-;1327:7;1317:17;;;1029:311;;;;;:::o;1345:466::-;1422:6;1430;1438;1491:2;1479:9;1470:7;1466:23;1462:32;1459:2;;;1512:6;1504;1497:22;1459:2;1556:9;1543:23;1575:31;1600:5;1575:31;:::i;:::-;1625:5;-1:-1:-1;1682:2:1;1667:18;;1654:32;1695:33;1654:32;1695:33;:::i;:::-;1449:362;;1747:7;;-1:-1:-1;;;1801:2:1;1786:18;;;;1773:32;;1449:362::o;1816:325::-;1884:6;1892;1945:2;1933:9;1924:7;1920:23;1916:32;1913:2;;;1966:6;1958;1951:22;1913:2;2010:9;1997:23;2029:31;2054:5;2029:31;:::i;:::-;2079:5;2131:2;2116:18;;;;2103:32;;-1:-1:-1;;;1903:238:1:o;2146:803::-;2268:6;2276;2284;2292;2345:2;2333:9;2324:7;2320:23;2316:32;2313:2;;;2366:6;2358;2351:22;2313:2;2411:9;2398:23;2440:18;2481:2;2473:6;2470:14;2467:2;;;2502:6;2494;2487:22;2467:2;2546:70;2608:7;2599:6;2588:9;2584:22;2546:70;:::i;:::-;2635:8;;-1:-1:-1;2520:96:1;-1:-1:-1;2723:2:1;2708:18;;2695:32;;-1:-1:-1;2739:16:1;;;2736:2;;;2773:6;2765;2758:22;2736:2;;2817:72;2881:7;2870:8;2859:9;2855:24;2817:72;:::i;:::-;2303:646;;;;-1:-1:-1;2908:8:1;-1:-1:-1;;;;2303:646:1:o;2954:251::-;3010:6;3063:2;3051:9;3042:7;3038:23;3034:32;3031:2;;;3084:6;3076;3069:22;3031:2;3128:9;3115:23;3147:28;3169:5;3147:28;:::i;3210:255::-;3277:6;3330:2;3318:9;3309:7;3305:23;3301:32;3298:2;;;3351:6;3343;3336:22;3298:2;3388:9;3382:16;3407:28;3429:5;3407:28;:::i;3470:190::-;3529:6;3582:2;3570:9;3561:7;3557:23;3553:32;3550:2;;;3603:6;3595;3588:22;3550:2;-1:-1:-1;3631:23:1;;3540:120;-1:-1:-1;3540:120:1:o;3665:194::-;3735:6;3788:2;3776:9;3767:7;3763:23;3759:32;3756:2;;;3809:6;3801;3794:22;3756:2;-1:-1:-1;3837:16:1;;3746:113;-1:-1:-1;3746:113:1:o;3864:319::-;3929:6;3937;3990:2;3978:9;3969:7;3965:23;3961:32;3958:2;;;4011:6;4003;3996:22;3958:2;4052:9;4039:23;4029:33;;4112:2;4101:9;4097:18;4084:32;4125:28;4147:5;4125:28;:::i;4188:316::-;4276:6;4284;4292;4345:2;4333:9;4324:7;4320:23;4316:32;4313:2;;;4366:6;4358;4351:22;4313:2;4400:9;4394:16;4384:26;;4450:2;4439:9;4435:18;4429:25;4419:35;;4494:2;4483:9;4479:18;4473:25;4463:35;;4303:201;;;;;:::o;4509:296::-;4567:6;4620:2;4608:9;4599:7;4595:23;4591:32;4588:2;;;4641:6;4633;4626:22;4588:2;4685:9;4672:23;4735:10;4728:5;4724:22;4717:5;4714:33;4704:2;;4766:6;4758;4751:22;6712:662;6824:4;6853:2;6882;6871:9;6864:21;6914:6;6908:13;6957:6;6952:2;6941:9;6937:18;6930:34;6982:4;6995:140;7009:6;7006:1;7003:13;6995:140;;;7104:14;;;7100:23;;7094:30;7070:17;;;7089:2;7066:26;7059:66;7024:10;;6995:140;;;7153:6;7150:1;7147:13;7144:2;;;7223:4;7218:2;7209:6;7198:9;7194:22;7190:31;7183:45;7144:2;-1:-1:-1;7290:2:1;7278:15;7295:66;7274:88;7259:104;;;;7365:2;7255:113;;6833:541;-1:-1:-1;;;6833:541:1:o;15830:1029::-;16092:4;16140:3;16129:9;16125:19;16171:6;16160:9;16153:25;16197:2;16235:6;16230:2;16219:9;16215:18;16208:34;16278:3;16273:2;16262:9;16258:18;16251:31;16302:6;16337;16331:13;16368:6;16360;16353:22;16406:3;16395:9;16391:19;16384:26;;16445:2;16437:6;16433:15;16419:29;;16466:4;16479:218;16493:6;16490:1;16487:13;16479:218;;;16558:13;;-1:-1:-1;;;;;16554:62:1;16542:75;;16672:15;;;;16637:12;;;;16515:1;16508:9;16479:218;;;-1:-1:-1;;;;;;;16753:55:1;;;;16748:2;16733:18;;16726:83;-1:-1:-1;;;16840:3:1;16825:19;16818:35;16714:3;16101:758;-1:-1:-1;;;16101:758:1:o;17053:128::-;17093:3;17124:1;17120:6;17117:1;17114:13;17111:2;;;17130:18;;:::i;:::-;-1:-1:-1;17166:9:1;;17101:80::o;17186:274::-;17226:1;17252;17242:2;;-1:-1:-1;;;17284:1:1;17277:88;17388:4;17385:1;17378:15;17416:4;17413:1;17406:15;17242:2;-1:-1:-1;17445:9:1;;17232:228::o;17465:::-;17505:7;17631:1;-1:-1:-1;;17559:74:1;17556:1;17553:81;17548:1;17541:9;17534:17;17530:105;17527:2;;;17638:18;;:::i;:::-;-1:-1:-1;17678:9:1;;17517:176::o;17698:125::-;17738:4;17766:1;17763;17760:8;17757:2;;;17771:18;;:::i;:::-;-1:-1:-1;17808:9:1;;17747:76::o;17828:195::-;17867:3;-1:-1:-1;;17891:5:1;17888:77;17885:2;;;17968:18;;:::i;:::-;-1:-1:-1;18015:1:1;18004:13;;17875:148::o;18028:184::-;-1:-1:-1;;;18077:1:1;18070:88;18177:4;18174:1;18167:15;18201:4;18198:1;18191:15;18217:154;-1:-1:-1;;;;;18296:5:1;18292:54;18285:5;18282:65;18272:2;;18361:1;18358;18351:12;18376:118;18462:5;18455:13;18448:21;18441:5;18438:32;18428:2;;18484:1;18481;18474:12

Swarm Source

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