ETH Price: $3,427.49 (-2.01%)
Gas: 5 Gwei

Token

FUCK 2.0 (FUCK2.0)
 

Overview

Max Total Supply

9,904,881,494.659680721 FUCK2.0

Holders

71

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
169,269,041.242884331 FUCK2.0

Value
$0.00
0x887580D5086995e41eFd71500cA729ecBEBA591b
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:
FUCK20

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-30
*/

/*
 _______ ___  ___  ________  ___  __             _______      ________     
|\  _____\\  \|\  \|\   ____\|\  \|\  \          /  ___  \    |\   __  \    
\ \  \__/\ \  \\\  \ \  \___|\ \  \/  /|_       /__/|_/  /|   \ \  \|\  \   
 \ \   __\\ \  \\\  \ \  \    \ \   ___  \      |__|//  / /    \ \  \\\  \  
  \ \  \_| \ \  \\\  \ \  \____\ \  \\ \  \         /  /_/__  __\ \  \\\  \ 
   \ \__\   \ \_______\ \_______\ \__\\ \__\       |\________\\__\ \_______\
    \|__|    \|_______|\|_______|\|__| \|__|        \|_______\|__|\|_______|
 
    #FUCK 2.0  Features

    https://fuck20.wtf/

    NOT another fucking 2.0 token
	
	Total Supply 1,000,000,000,000
	1% of every trade goes to existing holders
	1% of every trade is burned
	1% of every trade is used for Marketing to develop the Ecosystem
	Burning on every trade makes FUCK 2.0 TRULY HYPER-Deflationary
	FUCK 2.0 Is the Utlilty token and building block for the FUCK 2.0 Ecosystem. 
	FUCK 2.0 is a MEME Coin. No Utlity, no Broken Promises, NO RUG,No Owner, no scams, US Based Experienced DEV.   
    -----ANTI WHALE------
    MAX BUY 2% SUPPLY
    MAX SELL 2% SUPPLY
    MAX WALLET SIZE 4% OF SUPPLY
    
*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).

 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

// File contracts/IUniswapV2Router01.sol

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

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

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// File contracts/IUniswapV2Router02.sol

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

// File contracts/IUniswapV2Factory.sol

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

/**
 * @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
     * ====
     */
    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);
            }
        }
    }
}

contract FUCK20 is Context, IERC20, Ownable {
    using Address for address payable;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) public _isExcludedFromMaxWallet;

    mapping(address => bool) public isBot;

    address[] private _excluded;

    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 10_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public maxTxAmountBuy = 200_000_000 * 10**_decimals;  // 2% of supply
    uint256 public maxTxAmountSell = 200_000_000 * 10**_decimals; // 2% of supply
    uint256 public maxWalletAmount = 400_000_000 * 10**_decimals; // 4% of supply

    //antisnipers
    uint256 public liqAddedBlockNumber;
    uint256 public blocksToWait = 1;

    address payable public marketingAddress;
    address payable public devAddress;

    mapping(address => bool) public isAutomatedMarketMakerPair;

    string private constant _name = "FUCK 2.0";
    string private constant _symbol = "FUCK2.0";

    bool private inSwapAndLiquify;

    IUniswapV2Router02 public UniswapV2Router;
    address public uniswapPair;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingOpen = false;
    uint256 public numTokensSellToAddToLiquidity = 175_000_000 * 10**_decimals;

    struct feeRatesStruct {
        uint8 rfi;
        uint8 burn;
        uint8 marketing;
        uint8 dev;
        uint8 lp;
        uint8 toSwap;
    }

    feeRatesStruct public buyRates =
        feeRatesStruct({
            rfi: 1, // 0 RFI rate, in %
            burn: 1, // Burn rate, in %
            dev: 0, // dev team fee in %
            marketing: 1, // marketing fee in %
            lp: 0, // lp rate in %
            toSwap: 2 // marketing + dev + lp
        });

    feeRatesStruct public sellRates =
        feeRatesStruct({
            rfi: 1, // 0 RFI rate, in %
            burn: 1, // Burn rate, in %
            dev: 0, // dev team fee in %
            marketing: 1, // marketing fee in %
            lp: 0, // lp rate in %
            toSwap: 2 // marketing + dev + lp
        });

    feeRatesStruct private appliedRates = buyRates;

    struct TotFeesPaidStruct {
        uint256 rfi;
        uint256 burn;
        uint256 toSwap;
    }
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues {
        uint256 rAmount;
        uint256 rTransferAmount;
        uint256 rRfi;
        uint256 rBurn;
        uint256 rToSwap;
        uint256 tTransferAmount;
        uint256 tRfi;
        uint256 tBurn;
        uint256 tToSwap;
    }

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ETHReceived,
        uint256 tokensIntotoSwap
    );
    event LiquidityAdded(uint256 tokenAmount, uint256 ETHAmount);
    event TokensBurned(uint256 tokenAmount);
    event MarketingAndDevFeesAdded(uint256 devFee, uint256 marketingFee);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event BlacklistedUser(address botAddress, bool indexed value);
    event MaxWalletAmountUpdated(uint256 amount);
    event ExcludeFromMaxWallet(address account, bool indexed isExcluded);

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

    constructor() {
        IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapPair = IUniswapV2Factory(_UniswapV2Router.factory()).createPair(
            address(this),
            _UniswapV2Router.WETH()
        );
        isAutomatedMarketMakerPair[uniswapPair] = true;
        emit SetAutomatedMarketMakerPair(uniswapPair, true);
        UniswapV2Router = _UniswapV2Router;
        _rOwned[owner()] = _rTotal;
        devAddress = payable(msg.sender);
        marketingAddress = payable(address(0x1A9B52C9223c2818d5032893E9069a668a1760bb));

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[devAddress] = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[marketingAddress] = true;
        _isExcludedFromMaxWallet[devAddress] = true;
        _isExcludedFromMaxWallet[address(this)] = true;
        _isExcludedFromMaxWallet[uniswapPair] = true;

        emit Transfer(address(0), owner(), _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 view override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

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

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

    //No current rfi - Tiered Rewarding Feature Applied at APP Launch
    function excludeFromReward(address account) external onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

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

    function excludeMultipleAccountsFromMaxWallet(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            require(
                _isExcludedFromMaxWallet[accounts[i]] != excluded,
                "_isExcludedFromMaxWallet already set to that value for one wallet"
            );
            _isExcludedFromMaxWallet[accounts[i]] = excluded;
            emit ExcludeFromMaxWallet(accounts[i], excluded);
        }
    }

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

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

    function isExcludedFromMaxWallet(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxWallet[account];
    }

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

    //  @dev receive ETH from UniswapV2Router when swapping
    receive() external payable {}

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -= rRfi;
        totFeesPaid.rfi += tRfi;
    }

    function _takeToSwap(uint256 rToSwap, uint256 tToSwap) private {
        _rOwned[address(this)] += rToSwap;
        if (_isExcluded[address(this)]) _tOwned[address(this)] += tToSwap;
        totFeesPaid.toSwap += tToSwap;
    }

    function _getValues(uint256 tAmount, bool takeFee)
        private
        view
        returns (valuesFromGetValues memory to_return)
    {
        to_return = _getTValues(tAmount, takeFee);
        (
            to_return.rAmount,
            to_return.rTransferAmount,
            to_return.rRfi,
            to_return.rBurn,
            to_return.rToSwap
        ) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee)
        private
        view
        returns (valuesFromGetValues memory s)
    {
        if (!takeFee) {
            s.tTransferAmount = tAmount;
            return s;
        }
        s.tRfi = (tAmount * appliedRates.rfi) / 100;
        s.tBurn = (tAmount * appliedRates.burn) / 100;
        s.tToSwap = (tAmount * appliedRates.toSwap) / 100;
        s.tTransferAmount = tAmount - s.tRfi - s.tBurn - s.tToSwap;
        return s;
    }

    function _getRValues(
        valuesFromGetValues memory s,
        uint256 tAmount,
        bool takeFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rRfi,
            uint256 rBurn,
            uint256 rToSwap
        )
    {
        rAmount = tAmount * currentRate;

        if (!takeFee) {
            return (rAmount, rAmount, 0, 0, 0);
        }

        rRfi = s.tRfi * currentRate;
        rBurn = s.tBurn * currentRate;
        rToSwap = s.tToSwap * currentRate;
        rTransferAmount = rAmount - rRfi - rBurn - rToSwap;
        return (rAmount, rTransferAmount, rBurn, rRfi, rToSwap);
    }

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

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

    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(!isBot[from], "ERC20: address blacklisted (bot)");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            amount <= balanceOf(from),
            "You are trying to transfer more than your balance"
        );

        bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]);

        if (takeFee) {
            if (isAutomatedMarketMakerPair[from]) {
                if (block.number < liqAddedBlockNumber + blocksToWait) {
                    isBot[to] = true;
                    emit BlacklistedUser(to, true);
                }

                appliedRates = buyRates;
                require(
                    amount <= maxTxAmountBuy,
                    "amount must be <= maxTxAmountBuy"
                );
            } else {
                appliedRates = sellRates;
                require(
                    amount <= maxTxAmountSell,
                    "amount must be <= maxTxAmountSell"
                );
            }
        }

        if (
            balanceOf(address(this)) >= numTokensSellToAddToLiquidity &&
            !inSwapAndLiquify &&
            !isAutomatedMarketMakerPair[from] &&
            swapAndLiquifyEnabled
        ) {
            //add liquidity
            swapAndLiquify(numTokensSellToAddToLiquidity);
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee
    ) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender]) {
            _tOwned[sender] -= tAmount;
        }
        if (_isExcluded[recipient]) {
            _tOwned[recipient] += s.tTransferAmount;
        }

        _rOwned[sender] -= s.rAmount;
        _rOwned[recipient] += s.rTransferAmount;
        if (takeFee) {
            _tTotal = _tTotal -= s.tBurn;
            _rTotal = _rTotal -= s.rBurn;

            _reflectRfi(s.rRfi, s.tRfi);
            _takeToSwap(s.rToSwap, s.tToSwap);
            emit Transfer(sender, address(this), s.tToSwap);
        }
        if (!_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) {
            require(tradingOpen, "Trading not enabled yet");
        }
        require(
            _isExcludedFromMaxWallet[recipient] ||
                balanceOf(recipient) <= maxWalletAmount,
            "Recipient cannot hold more than maxWalletAmount"
        );
        emit Transfer(sender, recipient, s.tTransferAmount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 denominator = appliedRates.toSwap * 2;
        uint256 tokensToAddLiquidityWith = (contractTokenBalance *
            appliedRates.lp) / denominator;
        uint256 toSwap = contractTokenBalance - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 ETHToAddLiquidityWith = (deltaBalance * appliedRates.lp) /
            (denominator - appliedRates.lp);

        // add liquidity
        addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);

        // we give the remaining tax to dev & marketing wallets
        uint256 remainingBalance = address(this).balance;
        uint256 devFee = (remainingBalance * appliedRates.dev) /
            (denominator - appliedRates.dev);
        uint256 marketingFee = (remainingBalance * appliedRates.marketing) /
            (denominator - appliedRates.marketing);
        devAddress.sendValue(devFee);
        marketingAddress.sendValue(marketingFee);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the pair path of token
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = UniswapV2Router.WETH();

        if (allowance(address(this), address(UniswapV2Router)) < tokenAmount) {
            _approve(address(this), address(UniswapV2Router), ~uint256(0));
        }

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

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        // add the liquidity
        UniswapV2Router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            devAddress,
            block.timestamp
        );
        emit LiquidityAdded(tokenAmount, ETHAmount);
    }

    function setAutomatedMarketMakerPair(address _pair, bool value)
        external
        onlyOwner
    {
        require(
            isAutomatedMarketMakerPair[_pair] != value,
            "Automated market maker pair is already set to that value"
        );
        isAutomatedMarketMakerPair[_pair] = value;
        if (value) {
            _isExcludedFromMaxWallet[_pair] = true;
            emit ExcludeFromMaxWallet(_pair, value);
        }
        emit SetAutomatedMarketMakerPair(_pair, value);
    }

    function setBuyFees(
        uint8 _rfi,
        uint8 _Burn,
        uint8 _marketing,
        uint8 _dev,
        uint8 _lp
    ) external onlyOwner {
        require(
            _rfi + _Burn + _marketing + _dev + _lp <= 20,
            "Total sell fees cannot be over 20%"
        );
        buyRates.rfi = _rfi;
        buyRates.burn = _Burn;
        buyRates.marketing = _marketing;
        buyRates.dev = _dev;
        buyRates.lp = _lp;
        buyRates.toSwap = _marketing + _dev + _lp;
    }

    function setSellFees(
        uint8 _rfi,
        uint8 _Burn,
        uint8 _marketing,
        uint8 _dev,
        uint8 _lp
    ) external onlyOwner {
        require(
            _rfi + _Burn + _marketing + _dev + _lp <= 20,
            "Total sell fees cannot be over 20%"
        );
        sellRates.rfi = _rfi;
        sellRates.burn = _Burn;
        sellRates.marketing = _marketing;
        sellRates.dev = _dev;
        sellRates.lp = _lp;
        sellRates.toSwap = _marketing + _dev + _lp;
    }

    function setMaxTransactionAmount(
        uint256 _maxTxAmountBuyPct,
        uint256 _maxTxAmountSellPct
    ) external onlyOwner {
        require(
            _maxTxAmountSellPct <= 200,
            "Max Tx AmountSell cannot be less than 0.5%"
        );
        maxTxAmountBuy = _tTotal / _maxTxAmountBuyPct; // 100 = 1%, 50 = 2% etc.
        maxTxAmountSell = _tTotal / _maxTxAmountSellPct; // 100 = 1%, 50 = 2% etc.
    }

    function setNumTokensSellToAddToLiq(uint256 amountTokens)
        external
        onlyOwner
    {
        numTokensSellToAddToLiquidity = amountTokens * 10**_decimals;
    }

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

    function setDevAddress(address payable _devAddress) external onlyOwner {
        devAddress = _devAddress;
    }

    function withdrawBNB(uint256 amount) external onlyOwner {
        if (amount == 0) payable(owner()).transfer(address(this).balance);
        else payable(owner()).transfer(amount);
    }

    function withdrawForeignToken(address token) external onlyOwner {
        IERC20(address(token)).transfer(
            msg.sender,
            IERC20(token).balanceOf(address(this))
        );
    }

    function manualSwapAndAddToLiq() external onlyOwner {
        swapAndLiquify(balanceOf(address(this)));
    }

    function unblacklistSniper(address botAddress) external onlyOwner {
        require(
            isBot[botAddress],
            "address provided is already not blacklisted"
        );
        isBot[botAddress] = false;
        emit BlacklistedUser(botAddress, false);
    }

    function setMaxWalletAmount(uint256 _maxWalletAmountPct)
        external
        onlyOwner
    {
        require(
            _maxWalletAmountPct <= 200,
            "Max Wallet Ammount cannot be less than 0,5%"
        );
        maxWalletAmount = _tTotal / _maxWalletAmountPct;
        emit MaxWalletAmountUpdated(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromMaxWallet[account] != excluded,
            "_isExcludedFromMaxWallet already set to that value"
        );
        _isExcludedFromMaxWallet[account] = excluded;

        emit ExcludeFromMaxWallet(account, excluded);
    }

    function updateBlocksToWait(uint256 numberOfBlocks) external onlyOwner {
        require(numberOfBlocks < 10,"Too many blocks");
        blocksToWait = numberOfBlocks;
    }

    function enableTrading() external onlyOwner {
        tradingOpen = true;
        liqAddedBlockNumber = block.number;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"botAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistedUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"MarketingAndDevFeesAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntotoSwap","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksToWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"dev","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","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"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"isExcludedFromMaxWallet","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":"liqAddedBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapAndAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"dev","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_Burn","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_lp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmountBuyPct","type":"uint256"},{"internalType":"uint256","name":"_maxTxAmountSellPct","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmountPct","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_Burn","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_lp","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"toSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botAddress","type":"address"}],"name":"unblacklistSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfBlocks","type":"uint256"}],"name":"updateBlocksToWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000741565b62000023906402540be40062000759565b6009819055620000369060001962000773565b620000449060001962000796565b600a556009600a62000057919062000741565b6200006790630bebc20062000759565b600b55620000786009600a62000741565b6200008890630bebc20062000759565b600c55620000996009600a62000741565b620000a9906317d7840062000759565b600d556001600f556014805461ffff60a01b1916600160a01b179055620000d36009600a62000741565b620000e390630a6e49c062000759565b6015556040805160c0808201835260018083526020808401829052838501829052600060608086018290526080808701839052600260a09788018190526016805465ffffffffffff1990811665020000010101908117928390558b51998a018c52888a52968901889052998801879052928701849052908601929092529390940193909352601780549094169092179092556018805461ffff191661010080850460ff9081169091029190911790921763ffff0000191663ff0000001962010000808604851602161763010000008085048416021761ffff60201b191660ff60281b196401000000008086048516021617650100000000009384900492909216909202179055348015620001f657600080fd5b506200020233620005dc565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002809190620007ac565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f49190620007ac565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003689190620007ac565b601480546001600160a01b0319166001600160a01b039283169081178255600090815260126020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360138054610100600160a81b0319166101006001600160a01b03841602179055600a5460016000620004096000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600090812091909155601180546001600160a01b0319908116331790915560108054909116731a9b52c9223c2818d5032893e9069a668a1760bb179055600190600490620004756000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260049093528183208054851660019081179091556011549091168352818320805485168217905530835290822080549093168117909255600690620004f76000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260069093528183208054851660019081179091556011548216845282842080548616821790553084528284208054861682179055601454909116835291208054909216179055620005856000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620005cd91815260200190565b60405180910390a350620007d7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006835781600019048211156200066757620006676200062c565b808516156200067557918102915b93841c939080029062000647565b509250929050565b6000826200069c575060016200073b565b81620006ab575060006200073b565b8160018114620006c45760028114620006cf57620006ef565b60019150506200073b565b60ff841115620006e357620006e36200062c565b50506001821b6200073b565b5060208310610133831016604e8410600b841016171562000714575081810a6200073b565b62000720838362000642565b80600019048211156200073757620007376200062c565b0290505b92915050565b60006200075260ff8416836200068b565b9392505050565b80820281158282048414176200073b576200073b6200062c565b6000826200079157634e487b7160e01b600052601260045260246000fd5b500690565b818103818111156200073b576200073b6200062c565b600060208284031215620007bf57600080fd5b81516001600160a01b03811681146200075257600080fd5b613a6880620007e76000396000f3fe6080604052600436106103905760003560e01c80638a0eef5a116101dc578063c49b9a8011610102578063d6c180bf116100a0578063ea2f0b371161006f578063ea2f0b3714610bd2578063ee6b268814610bf2578063f2fde38b14610c12578063ffb54a9914610c3257600080fd5b8063d6c180bf14610b40578063d8dcac4f14610b56578063dcf4242414610b6c578063dd62ed3e14610b8c57600080fd5b8063d12a7688116100dc578063d12a768814610ac4578063d1d7d7ef14610ada578063d2fcc00114610b0a578063d44e586e14610b2a57600080fd5b8063c49b9a8014610a64578063c816841b14610a84578063d0d41fe114610aa457600080fd5b80639a7a23d61161017a578063a5ece94111610149578063a5ece941146109ee578063a9059cbb14610a0e578063aa4bde2814610a2e578063bd94545b14610a4457600080fd5b80639a7a23d6146109545780639ba5e4d514610974578063a13849ae146109ae578063a457c2d7146109ce57600080fd5b8063906e9dd0116101b6578063906e9dd0146108cf578063958b0f20146108ef57806395d89b411461090457806396344eea1461093457600080fd5b80638a0eef5a146108865780638a8c523c1461089c5780638da5cb5b146108b157600080fd5b80633bbac579116102c157806370a082311161025f578063768dc7101161022e578063768dc710146107cd5780637949a403146107fd578063885a4cd01461082d57806388f820201461084d57600080fd5b806370a08231146106c8578063713898cd146106e8578063715018a61461076e57806373cafdc21461078357600080fd5b80634a74bb021161029b5780634a74bb021461061557806352390c02146106365780635342acb4146106565780636dd3d39f1461068f57600080fd5b80633bbac579146105a5578063437823ec146105d55780634549b039146105f557600080fd5b806323b872dd1161032e578063313ce56711610308578063313ce567146105295780633685d4191461054557806339509351146105655780633ad10ef61461058557600080fd5b806323b872dd146104c957806327a14fc2146104e95780632d8381191461050957600080fd5b8063095ea7b31161036a578063095ea7b31461043a578063127f4b2e1461046a57806315952f541461048a57806318160ddd146104aa57600080fd5b8063046797801461039c578063055add0d146103be57806306fdde031461040057600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103bc6103b7366004613400565b610c53565b005b3480156103ca57600080fd5b506013546103e39061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040c57600080fd5b5060408051808201909152600881526704655434b20322e360c41b60208201525b6040516103f79190613419565b34801561044657600080fd5b5061045a61045536600461347c565b610ca2565b60405190151581526020016103f7565b34801561047657600080fd5b506103bc610485366004613400565b610cb9565b34801561049657600080fd5b506103bc6104a53660046134a8565b610d65565b3480156104b657600080fd5b506009545b6040519081526020016103f7565b3480156104d557600080fd5b5061045a6104e43660046134c5565b610e62565b3480156104f557600080fd5b506103bc610504366004613400565b610f0c565b34801561051557600080fd5b506104bb610524366004613400565b610fe5565b34801561053557600080fd5b50604051600981526020016103f7565b34801561055157600080fd5b506103bc6105603660046134a8565b611069565b34801561057157600080fd5b5061045a61058036600461347c565b61121b565b34801561059157600080fd5b506011546103e3906001600160a01b031681565b3480156105b157600080fd5b5061045a6105c03660046134a8565b60076020526000908152604090205460ff1681565b3480156105e157600080fd5b506103bc6105f03660046134a8565b611257565b34801561060157600080fd5b506104bb610610366004613514565b6112a5565b34801561062157600080fd5b5060145461045a90600160a01b900460ff1681565b34801561064257600080fd5b506103bc6106513660046134a8565b61132f565b34801561066257600080fd5b5061045a6106713660046134a8565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561069b57600080fd5b5061045a6106aa3660046134a8565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106d457600080fd5b506104bb6106e33660046134a8565b611482565b3480156106f457600080fd5b506017546107329060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691600160281b90041686565b6040805160ff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103f7565b34801561077a57600080fd5b506103bc6114e1565b34801561078f57600080fd5b506016546107329060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691600160281b90041686565b3480156107d957600080fd5b5061045a6107e83660046134a8565b60046020526000908152604090205460ff1681565b34801561080957600080fd5b5061045a6108183660046134a8565b60126020526000908152604090205460ff1681565b34801561083957600080fd5b506103bc6108483660046134a8565b611517565b34801561085957600080fd5b5061045a6108683660046134a8565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561089257600080fd5b506104bb600e5481565b3480156108a857600080fd5b506103bc611622565b3480156108bd57600080fd5b506000546001600160a01b03166103e3565b3480156108db57600080fd5b506103bc6108ea3660046134a8565b611665565b3480156108fb57600080fd5b506103bc6116b1565b34801561091057600080fd5b5060408051808201909152600781526604655434b322e360cc1b602082015261042d565b34801561094057600080fd5b506103bc61094f36600461355a565b6116ec565b34801561096057600080fd5b506103bc61096f3660046135bf565b6117f3565b34801561098057600080fd5b50601954601a54601b5461099392919083565b604080519384526020840192909252908201526060016103f7565b3480156109ba57600080fd5b506103bc6109c9366004613400565b611978565b3480156109da57600080fd5b5061045a6109e936600461347c565b6119e9565b3480156109fa57600080fd5b506010546103e3906001600160a01b031681565b348015610a1a57600080fd5b5061045a610a2936600461347c565b611a82565b348015610a3a57600080fd5b506104bb600d5481565b348015610a5057600080fd5b506103bc610a5f3660046135ed565b611a8f565b348015610a7057600080fd5b506103bc610a7f366004613673565b611c60565b348015610a9057600080fd5b506014546103e3906001600160a01b031681565b348015610ab057600080fd5b506103bc610abf3660046134a8565b611cd7565b348015610ad057600080fd5b506104bb60155481565b348015610ae657600080fd5b5061045a610af53660046134a8565b60066020526000908152604090205460ff1681565b348015610b1657600080fd5b506103bc610b253660046135bf565b611d23565b348015610b3657600080fd5b506104bb600c5481565b348015610b4c57600080fd5b506104bb600b5481565b348015610b6257600080fd5b506104bb600f5481565b348015610b7857600080fd5b506103bc610b87366004613690565b611e39565b348015610b9857600080fd5b506104bb610ba73660046136b2565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610bde57600080fd5b506103bc610bed3660046134a8565b611eed565b348015610bfe57600080fd5b506103bc610c0d36600461355a565b611f38565b348015610c1e57600080fd5b506103bc610c2d3660046134a8565b61203f565b348015610c3e57600080fd5b5060145461045a90600160a81b900460ff1681565b6000546001600160a01b03163314610c865760405162461bcd60e51b8152600401610c7d906136e0565b60405180910390fd5b610c926009600a61380f565b610c9c908261381e565b60155550565b6000610caf3384846120d7565b5060015b92915050565b6000546001600160a01b03163314610ce35760405162461bcd60e51b8152600401610c7d906136e0565b80600003610d2957600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610d25573d6000803e3d6000fd5b5050565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610d25573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03811660009081526007602052604090205460ff16610e0b5760405162461bcd60e51b815260206004820152602b60248201527f616464726573732070726f766964656420697320616c7265616479206e6f742060448201526a189b1858dadb1a5cdd195960aa1b6064820152608401610c7d565b6001600160a01b0381166000818152600760209081526040808320805460ff191690555192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a250565b6000610e6f8484846121fb565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610ef45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c7d565b610f0185338584036120d7565b506001949350505050565b6000546001600160a01b03163314610f365760405162461bcd60e51b8152600401610c7d906136e0565b60c8811115610f9b5760405162461bcd60e51b815260206004820152602b60248201527f4d61782057616c6c657420416d6d6f756e742063616e6e6f74206265206c657360448201526a73207468616e20302c352560a81b6064820152608401610c7d565b80600954610fa99190613835565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000600a5482111561104c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c7d565b60006110566126f1565b90506110628184613835565b9392505050565b6000546001600160a01b031633146110935760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03811660009081526005602052604090205460ff166110fb5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c7d565b60005b600854811015610d2557816001600160a01b03166008828154811061112557611125613857565b6000918252602090912001546001600160a01b031603611209576008805461114f9060019061386d565b8154811061115f5761115f613857565b600091825260209091200154600880546001600160a01b03909216918390811061118b5761118b613857565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806111e3576111e3613880565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061121381613896565b9150506110fe565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610caf9185906112529086906138af565b6120d7565b6000546001600160a01b031633146112815760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156112f95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c7d565b8161131557600061130b846001612714565b519150610cb39050565b6000611322846001612714565b602001519150610cb39050565b6000546001600160a01b031633146113595760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03811660009081526005602052604090205460ff16156113c25760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c7d565b6001600160a01b0381166000908152600160205260409020541561141c576001600160a01b03811660009081526001602052604090205461140290610fe5565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff16156114bf57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610cb390610fe5565b6000546001600160a01b0316331461150b5760405162461bcd60e51b8152600401610c7d906136e0565b6115156000612757565b565b6000546001600160a01b031633146115415760405162461bcd60e51b8152600401610c7d906136e0565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b391906138c2565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156115fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2591906138db565b6000546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610c7d906136e0565b6014805460ff60a81b1916600160a81b17905543600e55565b6000546001600160a01b0316331461168f5760405162461bcd60e51b8152600401610c7d906136e0565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116db5760405162461bcd60e51b8152600401610c7d906136e0565b6115156116e730611482565b6127a7565b6000546001600160a01b031633146117165760405162461bcd60e51b8152600401610c7d906136e0565b6014818385611725888a6138f8565b61172f91906138f8565b61173991906138f8565b61174391906138f8565b60ff1611156117645760405162461bcd60e51b8152600401610c7d90613911565b6016805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff0000001916176301000000858316021764ff000000001916600160201b91841691909102179055806117c383856138f8565b6117cd91906138f8565b6016805460ff92909216600160281b0260ff60281b199092169190911790555050505050565b6000546001600160a01b0316331461181d5760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036118b35760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610c7d565b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915561193c576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000546001600160a01b031633146119a25760405162461bcd60e51b8152600401610c7d906136e0565b600a81106119e45760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920626c6f636b7360881b6044820152606401610c7d565b600f55565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015611a6b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c7d565b611a7833858584036120d7565b5060019392505050565b6000610caf3384846121fb565b6000546001600160a01b03163314611ab95760405162461bcd60e51b8152600401610c7d906136e0565b60005b82811015611c5a5781151560066000868685818110611add57611add613857565b9050602002016020810190611af291906134a8565b6001600160a01b0316815260208101919091526040016000205460ff16151503611b8e5760405162461bcd60e51b815260206004820152604160248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656064820152601d60fa1b608482015260a401610c7d565b8160066000868685818110611ba557611ba5613857565b9050602002016020810190611bba91906134a8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2858584818110611c1857611c18613857565b9050602002016020810190611c2d91906134a8565b6040516001600160a01b03909116815260200160405180910390a280611c5281613896565b915050611abc565b50505050565b6000546001600160a01b03163314611c8a5760405162461bcd60e51b8152600401610c7d906136e0565b60148054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610fda90831515815260200190565b6000546001600160a01b03163314611d015760405162461bcd60e51b8152600401610c7d906136e0565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d4d5760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611dd85760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610c7d565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b6000546001600160a01b03163314611e635760405162461bcd60e51b8152600401610c7d906136e0565b60c8811115611ec75760405162461bcd60e51b815260206004820152602a60248201527f4d617820547820416d6f756e7453656c6c2063616e6e6f74206265206c657373604482015269207468616e20302e352560b01b6064820152608401610c7d565b81600954611ed59190613835565b600b55600954611ee6908290613835565b600c555050565b6000546001600160a01b03163314611f175760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611f625760405162461bcd60e51b8152600401610c7d906136e0565b6014818385611f71888a6138f8565b611f7b91906138f8565b611f8591906138f8565b611f8f91906138f8565b60ff161115611fb05760405162461bcd60e51b8152600401610c7d90613911565b6017805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff0000001916176301000000858316021764ff000000001916600160201b918416919091021790558061200f83856138f8565b61201991906138f8565b6017805460ff92909216600160281b0260ff60281b199092169190911790555050505050565b6000546001600160a01b031633146120695760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b0381166120ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c7d565b610d6281612757565b6001600160a01b0383166121395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c7d565b6001600160a01b03821661219a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c7d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661225f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c7d565b6001600160a01b0382166122c15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c7d565b6001600160a01b03831660009081526007602052604090205460ff161561232a5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610c7d565b6000811161238c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c7d565b61239583611482565b8111156123fe5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c7d565b6001600160a01b03831660009081526004602052604081205460ff168061243d57506001600160a01b03831660009081526004602052604090205460ff165b159050801561267e576001600160a01b03841660009081526012602052604090205460ff16156125aa57600f54600e5461247791906138af565b4310156124db576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b6016546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021765ffff000000001916600160201b80850483160260ff60281b191617600160281b9384900491909116909202919091179055600b548211156125a55760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610c7d565b61267e565b6017546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021765ffff000000001916600160201b80850483160260ff60281b191617600160281b9384900491909116909202919091179055600c5482111561267e5760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610c7d565b60155461268a30611482565b1015801561269b575060135460ff16155b80156126c057506001600160a01b03841660009081526012602052604090205460ff16155b80156126d55750601454600160a01b900460ff165b156126e5576126e56015546127a7565b611c5a84848484612929565b60008060006126fe612c8a565b909250905061270d8183613835565b9250505090565b61271c6133b4565b6127268383612e0d565b905061273b8184846127366126f1565b612ece565b6080860152606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6013805460ff191660011790556018546000906127cf90600160281b900460ff166002613953565b60185460ff918216925060009183916127f191600160201b909104168561381e565b6127fb9190613835565b90506000612809828561386d565b90504761281582612f5e565b6000612821824761386d565b60185490915060009061283e90600160201b900460ff168761386d565b60185461285590600160201b900460ff168461381e565b61285f9190613835565b905061286b8582613111565b6018544790600090612887906301000000900460ff168961386d565b60185461289e906301000000900460ff168461381e565b6128a89190613835565b6018549091506000906128c49062010000900460ff168a61386d565b6018546128da9062010000900460ff168561381e565b6128e49190613835565b6011549091506128fd906001600160a01b0316836131eb565b601054612913906001600160a01b0316826131eb565b50506013805460ff191690555050505050505050565b60006129358383612714565b6001600160a01b03861660009081526005602052604090205490915060ff1615612987576001600160a01b0385166000908152600260205260408120805485929061298190849061386d565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156129db5760a08101516001600160a01b038516600090815260026020526040812080549091906129d59084906138af565b90915550505b80516001600160a01b03861660009081526001602052604081208054909190612a0590849061386d565b90915550506020808201516001600160a01b0386166000908152600190925260408220805491929091612a399084906138af565b90915550508115612afd578060e0015160096000828254612a5a919061386d565b9182905550600955506060810151600a8054600090612a7a90849061386d565b9182905550600a5550604081015160c0820151612a979190613309565b612aaa816080015182610100015161333e565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612af491815260200190565b60405180910390a35b6001600160a01b03851660009081526004602052604090205460ff16158015612b3f57506001600160a01b03841660009081526004602052604090205460ff16155b15612b9d57601454600160a81b900460ff16612b9d5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610c7d565b6001600160a01b03841660009081526006602052604090205460ff1680612bce5750600d54612bcb85611482565b11155b612c325760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610c7d565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a00151604051612c7b91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612ddc57826001600060088481548110612cb957612cb9613857565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d245750816002600060088481548110612cfd57612cfd613857565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d3a57600a54600954945094505050509091565b6001600060088381548110612d5157612d51613857565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d80908461386d565b92506002600060088381548110612d9957612d99613857565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612dc8908361386d565b915080612dd481613896565b915050612c97565b50600954600a54612ded9190613835565b821015612e0457600a546009549350935050509091565b90939092509050565b612e156133b4565b81612e265760a08101839052610cb3565b601854606490612e399060ff168561381e565b612e439190613835565b60c0820152601854606490612e6090610100900460ff168561381e565b612e6a9190613835565b60e0820152601854606490612e8990600160281b900460ff168561381e565b612e939190613835565b610100820181905260e082015160c0830151612eaf908661386d565b612eb9919061386d565b612ec3919061386d565b60a082015292915050565b600080808080612ede868961381e565b945086612ef657508392506000915081905080612f53565b858960c00151612f06919061381e565b9250858960e00151612f18919061381e565b915085896101000151612f2b919061381e565b90508082612f39858861386d565b612f43919061386d565b612f4d919061386d565b93509091905b945094509450945094565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f9357612f93613857565b60200260200101906001600160a01b031690816001600160a01b031681525050601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302a9190613976565b8160018151811061303d5761303d613857565b6001600160a01b0392831660209182029290920181019190915260135430600090815260038352604080822061010090930490941681529152205482111561309e5760135461309e90309061010090046001600160a01b03166000196120d7565b60135460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906130db908590600090869030904290600401613993565b600060405180830381600087803b1580156130f557600080fd5b505af1158015613109573d6000803e3d6000fd5b505050505050565b60135460115460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af1158015613186573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131ab9190613a04565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b8047101561323b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c7d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613288576040519150601f19603f3d011682016040523d82523d6000602084013e61328d565b606091505b50509050806133045760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c7d565b505050565b81600a600082825461331b919061386d565b9091555050601980548291906000906133359084906138af565b90915550505050565b306000908152600160205260408120805484929061335d9084906138af565b90915550503060009081526005602052604090205460ff161561339f5730600090815260026020526040812080548392906133999084906138af565b90915550505b806019600201600082825461333591906138af565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006020828403121561341257600080fd5b5035919050565b600060208083528351808285015260005b818110156134465785810183015185820160400152820161342a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d6257600080fd5b6000806040838503121561348f57600080fd5b823561349a81613467565b946020939093013593505050565b6000602082840312156134ba57600080fd5b813561106281613467565b6000806000606084860312156134da57600080fd5b83356134e581613467565b925060208401356134f581613467565b929592945050506040919091013590565b8015158114610d6257600080fd5b6000806040838503121561352757600080fd5b82359150602083013561353981613506565b809150509250929050565b803560ff8116811461355557600080fd5b919050565b600080600080600060a0868803121561357257600080fd5b61357b86613544565b945061358960208701613544565b935061359760408701613544565b92506135a560608701613544565b91506135b360808701613544565b90509295509295909350565b600080604083850312156135d257600080fd5b82356135dd81613467565b9150602083013561353981613506565b60008060006040848603121561360257600080fd5b833567ffffffffffffffff8082111561361a57600080fd5b818601915086601f83011261362e57600080fd5b81358181111561363d57600080fd5b8760208260051b850101111561365257600080fd5b6020928301955093505084013561366881613506565b809150509250925092565b60006020828403121561368557600080fd5b813561106281613506565b600080604083850312156136a357600080fd5b50508035926020909101359150565b600080604083850312156136c557600080fd5b82356136d081613467565b9150602083013561353981613467565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561376657816000190482111561374c5761374c613715565b8085161561375957918102915b93841c9390800290613730565b509250929050565b60008261377d57506001610cb3565b8161378a57506000610cb3565b81600181146137a057600281146137aa576137c6565b6001915050610cb3565b60ff8411156137bb576137bb613715565b50506001821b610cb3565b5060208310610133831016604e8410600b84101617156137e9575081810a610cb3565b6137f3838361372b565b806000190482111561380757613807613715565b029392505050565b600061106260ff84168361376e565b8082028115828204841417610cb357610cb3613715565b60008261385257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b81810381811115610cb357610cb3613715565b634e487b7160e01b600052603160045260246000fd5b6000600182016138a8576138a8613715565b5060010190565b80820180821115610cb357610cb3613715565b6000602082840312156138d457600080fd5b5051919050565b6000602082840312156138ed57600080fd5b815161106281613506565b60ff8181168382160190811115610cb357610cb3613715565b60208082526022908201527f546f74616c2073656c6c20666565732063616e6e6f74206265206f7665722032604082015261302560f01b606082015260800190565b60ff818116838216029081169081811461396f5761396f613715565b5092915050565b60006020828403121561398857600080fd5b815161106281613467565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139e35784516001600160a01b0316835293830193918301916001016139be565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a1957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220499b23b1de4cd5bd41f3181b6ed711fb4986402314af43cedfccc3f86898f52c64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80638a0eef5a116101dc578063c49b9a8011610102578063d6c180bf116100a0578063ea2f0b371161006f578063ea2f0b3714610bd2578063ee6b268814610bf2578063f2fde38b14610c12578063ffb54a9914610c3257600080fd5b8063d6c180bf14610b40578063d8dcac4f14610b56578063dcf4242414610b6c578063dd62ed3e14610b8c57600080fd5b8063d12a7688116100dc578063d12a768814610ac4578063d1d7d7ef14610ada578063d2fcc00114610b0a578063d44e586e14610b2a57600080fd5b8063c49b9a8014610a64578063c816841b14610a84578063d0d41fe114610aa457600080fd5b80639a7a23d61161017a578063a5ece94111610149578063a5ece941146109ee578063a9059cbb14610a0e578063aa4bde2814610a2e578063bd94545b14610a4457600080fd5b80639a7a23d6146109545780639ba5e4d514610974578063a13849ae146109ae578063a457c2d7146109ce57600080fd5b8063906e9dd0116101b6578063906e9dd0146108cf578063958b0f20146108ef57806395d89b411461090457806396344eea1461093457600080fd5b80638a0eef5a146108865780638a8c523c1461089c5780638da5cb5b146108b157600080fd5b80633bbac579116102c157806370a082311161025f578063768dc7101161022e578063768dc710146107cd5780637949a403146107fd578063885a4cd01461082d57806388f820201461084d57600080fd5b806370a08231146106c8578063713898cd146106e8578063715018a61461076e57806373cafdc21461078357600080fd5b80634a74bb021161029b5780634a74bb021461061557806352390c02146106365780635342acb4146106565780636dd3d39f1461068f57600080fd5b80633bbac579146105a5578063437823ec146105d55780634549b039146105f557600080fd5b806323b872dd1161032e578063313ce56711610308578063313ce567146105295780633685d4191461054557806339509351146105655780633ad10ef61461058557600080fd5b806323b872dd146104c957806327a14fc2146104e95780632d8381191461050957600080fd5b8063095ea7b31161036a578063095ea7b31461043a578063127f4b2e1461046a57806315952f541461048a57806318160ddd146104aa57600080fd5b8063046797801461039c578063055add0d146103be57806306fdde031461040057600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103bc6103b7366004613400565b610c53565b005b3480156103ca57600080fd5b506013546103e39061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040c57600080fd5b5060408051808201909152600881526704655434b20322e360c41b60208201525b6040516103f79190613419565b34801561044657600080fd5b5061045a61045536600461347c565b610ca2565b60405190151581526020016103f7565b34801561047657600080fd5b506103bc610485366004613400565b610cb9565b34801561049657600080fd5b506103bc6104a53660046134a8565b610d65565b3480156104b657600080fd5b506009545b6040519081526020016103f7565b3480156104d557600080fd5b5061045a6104e43660046134c5565b610e62565b3480156104f557600080fd5b506103bc610504366004613400565b610f0c565b34801561051557600080fd5b506104bb610524366004613400565b610fe5565b34801561053557600080fd5b50604051600981526020016103f7565b34801561055157600080fd5b506103bc6105603660046134a8565b611069565b34801561057157600080fd5b5061045a61058036600461347c565b61121b565b34801561059157600080fd5b506011546103e3906001600160a01b031681565b3480156105b157600080fd5b5061045a6105c03660046134a8565b60076020526000908152604090205460ff1681565b3480156105e157600080fd5b506103bc6105f03660046134a8565b611257565b34801561060157600080fd5b506104bb610610366004613514565b6112a5565b34801561062157600080fd5b5060145461045a90600160a01b900460ff1681565b34801561064257600080fd5b506103bc6106513660046134a8565b61132f565b34801561066257600080fd5b5061045a6106713660046134a8565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561069b57600080fd5b5061045a6106aa3660046134a8565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106d457600080fd5b506104bb6106e33660046134a8565b611482565b3480156106f457600080fd5b506017546107329060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691600160281b90041686565b6040805160ff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103f7565b34801561077a57600080fd5b506103bc6114e1565b34801561078f57600080fd5b506016546107329060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691600160281b90041686565b3480156107d957600080fd5b5061045a6107e83660046134a8565b60046020526000908152604090205460ff1681565b34801561080957600080fd5b5061045a6108183660046134a8565b60126020526000908152604090205460ff1681565b34801561083957600080fd5b506103bc6108483660046134a8565b611517565b34801561085957600080fd5b5061045a6108683660046134a8565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561089257600080fd5b506104bb600e5481565b3480156108a857600080fd5b506103bc611622565b3480156108bd57600080fd5b506000546001600160a01b03166103e3565b3480156108db57600080fd5b506103bc6108ea3660046134a8565b611665565b3480156108fb57600080fd5b506103bc6116b1565b34801561091057600080fd5b5060408051808201909152600781526604655434b322e360cc1b602082015261042d565b34801561094057600080fd5b506103bc61094f36600461355a565b6116ec565b34801561096057600080fd5b506103bc61096f3660046135bf565b6117f3565b34801561098057600080fd5b50601954601a54601b5461099392919083565b604080519384526020840192909252908201526060016103f7565b3480156109ba57600080fd5b506103bc6109c9366004613400565b611978565b3480156109da57600080fd5b5061045a6109e936600461347c565b6119e9565b3480156109fa57600080fd5b506010546103e3906001600160a01b031681565b348015610a1a57600080fd5b5061045a610a2936600461347c565b611a82565b348015610a3a57600080fd5b506104bb600d5481565b348015610a5057600080fd5b506103bc610a5f3660046135ed565b611a8f565b348015610a7057600080fd5b506103bc610a7f366004613673565b611c60565b348015610a9057600080fd5b506014546103e3906001600160a01b031681565b348015610ab057600080fd5b506103bc610abf3660046134a8565b611cd7565b348015610ad057600080fd5b506104bb60155481565b348015610ae657600080fd5b5061045a610af53660046134a8565b60066020526000908152604090205460ff1681565b348015610b1657600080fd5b506103bc610b253660046135bf565b611d23565b348015610b3657600080fd5b506104bb600c5481565b348015610b4c57600080fd5b506104bb600b5481565b348015610b6257600080fd5b506104bb600f5481565b348015610b7857600080fd5b506103bc610b87366004613690565b611e39565b348015610b9857600080fd5b506104bb610ba73660046136b2565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610bde57600080fd5b506103bc610bed3660046134a8565b611eed565b348015610bfe57600080fd5b506103bc610c0d36600461355a565b611f38565b348015610c1e57600080fd5b506103bc610c2d3660046134a8565b61203f565b348015610c3e57600080fd5b5060145461045a90600160a81b900460ff1681565b6000546001600160a01b03163314610c865760405162461bcd60e51b8152600401610c7d906136e0565b60405180910390fd5b610c926009600a61380f565b610c9c908261381e565b60155550565b6000610caf3384846120d7565b5060015b92915050565b6000546001600160a01b03163314610ce35760405162461bcd60e51b8152600401610c7d906136e0565b80600003610d2957600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610d25573d6000803e3d6000fd5b5050565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610d25573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03811660009081526007602052604090205460ff16610e0b5760405162461bcd60e51b815260206004820152602b60248201527f616464726573732070726f766964656420697320616c7265616479206e6f742060448201526a189b1858dadb1a5cdd195960aa1b6064820152608401610c7d565b6001600160a01b0381166000818152600760209081526040808320805460ff191690555192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a250565b6000610e6f8484846121fb565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610ef45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c7d565b610f0185338584036120d7565b506001949350505050565b6000546001600160a01b03163314610f365760405162461bcd60e51b8152600401610c7d906136e0565b60c8811115610f9b5760405162461bcd60e51b815260206004820152602b60248201527f4d61782057616c6c657420416d6d6f756e742063616e6e6f74206265206c657360448201526a73207468616e20302c352560a81b6064820152608401610c7d565b80600954610fa99190613835565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000600a5482111561104c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c7d565b60006110566126f1565b90506110628184613835565b9392505050565b6000546001600160a01b031633146110935760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03811660009081526005602052604090205460ff166110fb5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c7d565b60005b600854811015610d2557816001600160a01b03166008828154811061112557611125613857565b6000918252602090912001546001600160a01b031603611209576008805461114f9060019061386d565b8154811061115f5761115f613857565b600091825260209091200154600880546001600160a01b03909216918390811061118b5761118b613857565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806111e3576111e3613880565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061121381613896565b9150506110fe565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610caf9185906112529086906138af565b6120d7565b6000546001600160a01b031633146112815760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156112f95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c7d565b8161131557600061130b846001612714565b519150610cb39050565b6000611322846001612714565b602001519150610cb39050565b6000546001600160a01b031633146113595760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03811660009081526005602052604090205460ff16156113c25760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c7d565b6001600160a01b0381166000908152600160205260409020541561141c576001600160a01b03811660009081526001602052604090205461140290610fe5565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff16156114bf57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610cb390610fe5565b6000546001600160a01b0316331461150b5760405162461bcd60e51b8152600401610c7d906136e0565b6115156000612757565b565b6000546001600160a01b031633146115415760405162461bcd60e51b8152600401610c7d906136e0565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b391906138c2565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156115fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2591906138db565b6000546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610c7d906136e0565b6014805460ff60a81b1916600160a81b17905543600e55565b6000546001600160a01b0316331461168f5760405162461bcd60e51b8152600401610c7d906136e0565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116db5760405162461bcd60e51b8152600401610c7d906136e0565b6115156116e730611482565b6127a7565b6000546001600160a01b031633146117165760405162461bcd60e51b8152600401610c7d906136e0565b6014818385611725888a6138f8565b61172f91906138f8565b61173991906138f8565b61174391906138f8565b60ff1611156117645760405162461bcd60e51b8152600401610c7d90613911565b6016805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff0000001916176301000000858316021764ff000000001916600160201b91841691909102179055806117c383856138f8565b6117cd91906138f8565b6016805460ff92909216600160281b0260ff60281b199092169190911790555050505050565b6000546001600160a01b0316331461181d5760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036118b35760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610c7d565b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915561193c576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000546001600160a01b031633146119a25760405162461bcd60e51b8152600401610c7d906136e0565b600a81106119e45760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920626c6f636b7360881b6044820152606401610c7d565b600f55565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015611a6b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c7d565b611a7833858584036120d7565b5060019392505050565b6000610caf3384846121fb565b6000546001600160a01b03163314611ab95760405162461bcd60e51b8152600401610c7d906136e0565b60005b82811015611c5a5781151560066000868685818110611add57611add613857565b9050602002016020810190611af291906134a8565b6001600160a01b0316815260208101919091526040016000205460ff16151503611b8e5760405162461bcd60e51b815260206004820152604160248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656064820152601d60fa1b608482015260a401610c7d565b8160066000868685818110611ba557611ba5613857565b9050602002016020810190611bba91906134a8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2858584818110611c1857611c18613857565b9050602002016020810190611c2d91906134a8565b6040516001600160a01b03909116815260200160405180910390a280611c5281613896565b915050611abc565b50505050565b6000546001600160a01b03163314611c8a5760405162461bcd60e51b8152600401610c7d906136e0565b60148054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610fda90831515815260200190565b6000546001600160a01b03163314611d015760405162461bcd60e51b8152600401610c7d906136e0565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d4d5760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611dd85760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610c7d565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b6000546001600160a01b03163314611e635760405162461bcd60e51b8152600401610c7d906136e0565b60c8811115611ec75760405162461bcd60e51b815260206004820152602a60248201527f4d617820547820416d6f756e7453656c6c2063616e6e6f74206265206c657373604482015269207468616e20302e352560b01b6064820152608401610c7d565b81600954611ed59190613835565b600b55600954611ee6908290613835565b600c555050565b6000546001600160a01b03163314611f175760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611f625760405162461bcd60e51b8152600401610c7d906136e0565b6014818385611f71888a6138f8565b611f7b91906138f8565b611f8591906138f8565b611f8f91906138f8565b60ff161115611fb05760405162461bcd60e51b8152600401610c7d90613911565b6017805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff0000001916176301000000858316021764ff000000001916600160201b918416919091021790558061200f83856138f8565b61201991906138f8565b6017805460ff92909216600160281b0260ff60281b199092169190911790555050505050565b6000546001600160a01b031633146120695760405162461bcd60e51b8152600401610c7d906136e0565b6001600160a01b0381166120ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c7d565b610d6281612757565b6001600160a01b0383166121395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c7d565b6001600160a01b03821661219a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c7d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661225f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c7d565b6001600160a01b0382166122c15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c7d565b6001600160a01b03831660009081526007602052604090205460ff161561232a5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610c7d565b6000811161238c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c7d565b61239583611482565b8111156123fe5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c7d565b6001600160a01b03831660009081526004602052604081205460ff168061243d57506001600160a01b03831660009081526004602052604090205460ff165b159050801561267e576001600160a01b03841660009081526012602052604090205460ff16156125aa57600f54600e5461247791906138af565b4310156124db576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b6016546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021765ffff000000001916600160201b80850483160260ff60281b191617600160281b9384900491909116909202919091179055600b548211156125a55760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610c7d565b61267e565b6017546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021765ffff000000001916600160201b80850483160260ff60281b191617600160281b9384900491909116909202919091179055600c5482111561267e5760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610c7d565b60155461268a30611482565b1015801561269b575060135460ff16155b80156126c057506001600160a01b03841660009081526012602052604090205460ff16155b80156126d55750601454600160a01b900460ff165b156126e5576126e56015546127a7565b611c5a84848484612929565b60008060006126fe612c8a565b909250905061270d8183613835565b9250505090565b61271c6133b4565b6127268383612e0d565b905061273b8184846127366126f1565b612ece565b6080860152606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6013805460ff191660011790556018546000906127cf90600160281b900460ff166002613953565b60185460ff918216925060009183916127f191600160201b909104168561381e565b6127fb9190613835565b90506000612809828561386d565b90504761281582612f5e565b6000612821824761386d565b60185490915060009061283e90600160201b900460ff168761386d565b60185461285590600160201b900460ff168461381e565b61285f9190613835565b905061286b8582613111565b6018544790600090612887906301000000900460ff168961386d565b60185461289e906301000000900460ff168461381e565b6128a89190613835565b6018549091506000906128c49062010000900460ff168a61386d565b6018546128da9062010000900460ff168561381e565b6128e49190613835565b6011549091506128fd906001600160a01b0316836131eb565b601054612913906001600160a01b0316826131eb565b50506013805460ff191690555050505050505050565b60006129358383612714565b6001600160a01b03861660009081526005602052604090205490915060ff1615612987576001600160a01b0385166000908152600260205260408120805485929061298190849061386d565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156129db5760a08101516001600160a01b038516600090815260026020526040812080549091906129d59084906138af565b90915550505b80516001600160a01b03861660009081526001602052604081208054909190612a0590849061386d565b90915550506020808201516001600160a01b0386166000908152600190925260408220805491929091612a399084906138af565b90915550508115612afd578060e0015160096000828254612a5a919061386d565b9182905550600955506060810151600a8054600090612a7a90849061386d565b9182905550600a5550604081015160c0820151612a979190613309565b612aaa816080015182610100015161333e565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612af491815260200190565b60405180910390a35b6001600160a01b03851660009081526004602052604090205460ff16158015612b3f57506001600160a01b03841660009081526004602052604090205460ff16155b15612b9d57601454600160a81b900460ff16612b9d5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610c7d565b6001600160a01b03841660009081526006602052604090205460ff1680612bce5750600d54612bcb85611482565b11155b612c325760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610c7d565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a00151604051612c7b91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612ddc57826001600060088481548110612cb957612cb9613857565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d245750816002600060088481548110612cfd57612cfd613857565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d3a57600a54600954945094505050509091565b6001600060088381548110612d5157612d51613857565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d80908461386d565b92506002600060088381548110612d9957612d99613857565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612dc8908361386d565b915080612dd481613896565b915050612c97565b50600954600a54612ded9190613835565b821015612e0457600a546009549350935050509091565b90939092509050565b612e156133b4565b81612e265760a08101839052610cb3565b601854606490612e399060ff168561381e565b612e439190613835565b60c0820152601854606490612e6090610100900460ff168561381e565b612e6a9190613835565b60e0820152601854606490612e8990600160281b900460ff168561381e565b612e939190613835565b610100820181905260e082015160c0830151612eaf908661386d565b612eb9919061386d565b612ec3919061386d565b60a082015292915050565b600080808080612ede868961381e565b945086612ef657508392506000915081905080612f53565b858960c00151612f06919061381e565b9250858960e00151612f18919061381e565b915085896101000151612f2b919061381e565b90508082612f39858861386d565b612f43919061386d565b612f4d919061386d565b93509091905b945094509450945094565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f9357612f93613857565b60200260200101906001600160a01b031690816001600160a01b031681525050601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302a9190613976565b8160018151811061303d5761303d613857565b6001600160a01b0392831660209182029290920181019190915260135430600090815260038352604080822061010090930490941681529152205482111561309e5760135461309e90309061010090046001600160a01b03166000196120d7565b60135460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906130db908590600090869030904290600401613993565b600060405180830381600087803b1580156130f557600080fd5b505af1158015613109573d6000803e3d6000fd5b505050505050565b60135460115460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af1158015613186573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131ab9190613a04565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b8047101561323b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c7d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613288576040519150601f19603f3d011682016040523d82523d6000602084013e61328d565b606091505b50509050806133045760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c7d565b505050565b81600a600082825461331b919061386d565b9091555050601980548291906000906133359084906138af565b90915550505050565b306000908152600160205260408120805484929061335d9084906138af565b90915550503060009081526005602052604090205460ff161561339f5730600090815260026020526040812080548392906133999084906138af565b90915550505b806019600201600082825461333591906138af565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006020828403121561341257600080fd5b5035919050565b600060208083528351808285015260005b818110156134465785810183015185820160400152820161342a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d6257600080fd5b6000806040838503121561348f57600080fd5b823561349a81613467565b946020939093013593505050565b6000602082840312156134ba57600080fd5b813561106281613467565b6000806000606084860312156134da57600080fd5b83356134e581613467565b925060208401356134f581613467565b929592945050506040919091013590565b8015158114610d6257600080fd5b6000806040838503121561352757600080fd5b82359150602083013561353981613506565b809150509250929050565b803560ff8116811461355557600080fd5b919050565b600080600080600060a0868803121561357257600080fd5b61357b86613544565b945061358960208701613544565b935061359760408701613544565b92506135a560608701613544565b91506135b360808701613544565b90509295509295909350565b600080604083850312156135d257600080fd5b82356135dd81613467565b9150602083013561353981613506565b60008060006040848603121561360257600080fd5b833567ffffffffffffffff8082111561361a57600080fd5b818601915086601f83011261362e57600080fd5b81358181111561363d57600080fd5b8760208260051b850101111561365257600080fd5b6020928301955093505084013561366881613506565b809150509250925092565b60006020828403121561368557600080fd5b813561106281613506565b600080604083850312156136a357600080fd5b50508035926020909101359150565b600080604083850312156136c557600080fd5b82356136d081613467565b9150602083013561353981613467565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561376657816000190482111561374c5761374c613715565b8085161561375957918102915b93841c9390800290613730565b509250929050565b60008261377d57506001610cb3565b8161378a57506000610cb3565b81600181146137a057600281146137aa576137c6565b6001915050610cb3565b60ff8411156137bb576137bb613715565b50506001821b610cb3565b5060208310610133831016604e8410600b84101617156137e9575081810a610cb3565b6137f3838361372b565b806000190482111561380757613807613715565b029392505050565b600061106260ff84168361376e565b8082028115828204841417610cb357610cb3613715565b60008261385257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b81810381811115610cb357610cb3613715565b634e487b7160e01b600052603160045260246000fd5b6000600182016138a8576138a8613715565b5060010190565b80820180821115610cb357610cb3613715565b6000602082840312156138d457600080fd5b5051919050565b6000602082840312156138ed57600080fd5b815161106281613506565b60ff8181168382160190811115610cb357610cb3613715565b60208082526022908201527f546f74616c2073656c6c20666565732063616e6e6f74206265206f7665722032604082015261302560f01b606082015260800190565b60ff818116838216029081169081811461396f5761396f613715565b5092915050565b60006020828403121561398857600080fd5b815161106281613467565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139e35784516001600160a01b0316835293830193918301916001016139be565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a1957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220499b23b1de4cd5bd41f3181b6ed711fb4986402314af43cedfccc3f86898f52c64736f6c63430008120033

Deployed Bytecode Sourcemap

22124:23594:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43363:179;;;;;;;;;;-1:-1:-1;43363:179:0;;;;;:::i;:::-;;:::i;:::-;;23504:41;;;;;;;;;;-1:-1:-1;23504:41:0;;;;;;;-1:-1:-1;;;;;23504:41:0;;;;;;-1:-1:-1;;;;;389:32:1;;;371:51;;359:2;344:18;23504:41:0;;;;;;;;27047:83;;;;;;;;;;-1:-1:-1;27117:5:0;;;;;;;;;;;;-1:-1:-1;;;27117:5:0;;;;27047:83;;;;;;;:::i;28032:193::-;;;;;;;;;;-1:-1:-1;28032:193:0;;;;;:::i;:::-;;:::i;:::-;;;1607:14:1;;1600:22;1582:41;;1570:2;1555:18;28032:193:0;1442:187:1;43841:189:0;;;;;;;;;;-1:-1:-1;43841:189:0;;;;;:::i;:::-;;:::i;44368:281::-;;;;;;;;;;-1:-1:-1;44368:281:0;;;;;:::i;:::-;;:::i;27324:95::-;;;;;;;;;;-1:-1:-1;27404:7:0;;27324:95;;;2032:25:1;;;2020:2;2005:18;27324:95:0;1886:177:1;28233:521:0;;;;;;;;;;-1:-1:-1;28233:521:0;;;;;:::i;:::-;;:::i;44657:350::-;;;;;;;;;;-1:-1:-1;44657:350:0;;;;;:::i;:::-;;:::i;30182:319::-;;;;;;;;;;-1:-1:-1;30182:319:0;;;;;:::i;:::-;;:::i;27233:83::-;;;;;;;;;;-1:-1:-1;27233:83:0;;22679:1;2671:36:1;;2659:2;2644:18;27233:83:0;2529:184:1;30922:473:0;;;;;;;;;;-1:-1:-1;30922:473:0;;;;;:::i;:::-;;:::i;28762:297::-;;;;;;;;;;-1:-1:-1;28762:297:0;;;;;:::i;:::-;;:::i;23256:33::-;;;;;;;;;;-1:-1:-1;23256:33:0;;;;-1:-1:-1;;;;;23256:33:0;;;22562:37;;;;;;;;;;-1:-1:-1;22562:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31403:113;;;;;;;;;;-1:-1:-1;31403:113:0;;;;;:::i;:::-;;:::i;29685:489::-;;;;;;;;;;-1:-1:-1;29685:489:0;;;;;:::i;:::-;;:::i;23585:40::-;;;;;;;;;;-1:-1:-1;23585:40:0;;;;-1:-1:-1;;;23585:40:0;;;;;;30580:334;;;;;;;;;;-1:-1:-1;30580:334:0;;;;;:::i;:::-;;:::i;32177:124::-;;;;;;;;;;-1:-1:-1;32177:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;32266:27:0;32242:4;32266:27;;;:18;:27;;;;;;;;;32177:124;32309:168;;;;;;;;;;-1:-1:-1;32309:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;32436:33:0;32407:4;32436:33;;;:24;:33;;;;;;;;;32309:168;27427:198;;;;;;;;;;-1:-1:-1;27427:198:0;;;;;:::i;:::-;;:::i;24255:327::-;;;;;;;;;;-1:-1:-1;24255:327:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24255:327:0;;;;;-1:-1:-1;;;24255:327:0;;;;;;;;;3652:4:1;3683:15;;;3665:34;;3735:15;;;3730:2;3715:18;;3708:43;3787:15;;;3767:18;;;3760:43;;;;3839:15;;;3834:2;3819:18;;3812:43;3892:15;;3886:3;3871:19;;3864:44;3945:15;;;3939:3;3924:19;;3917:44;3629:3;3614:19;24255:327:0;3379:588:1;3599:94:0;;;;;;;;;;;;;:::i;23920:326::-;;;;;;;;;;-1:-1:-1;23920:326:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23920:326:0;;;;;-1:-1:-1;;;23920:326:0;;;;;22389:50;;;;;;;;;;-1:-1:-1;22389:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23298:58;;;;;;;;;;-1:-1:-1;23298:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44038:203;;;;;;;;;;-1:-1:-1;44038:203:0;;;;;:::i;:::-;;:::i;29557:120::-;;;;;;;;;;-1:-1:-1;29557:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;29649:20:0;29625:4;29649:20;;;:11;:20;;;;;;;;;29557:120;23129:34;;;;;;;;;;;;;;;;45587:126;;;;;;;;;;;;;:::i;2948:87::-;;;;;;;;;;-1:-1:-1;2994:7:0;3021:6;-1:-1:-1;;;;;3021:6:0;2948:87;;43550:161;;;;;;;;;;-1:-1:-1;43550:161:0;;;;;:::i;:::-;;:::i;44249:111::-;;;;;;;;;;;;;:::i;27138:87::-;;;;;;;;;;-1:-1:-1;27210:7:0;;;;;;;;;;;;-1:-1:-1;;;27210:7:0;;;;27138:87;;41859:518;;;;;;;;;;-1:-1:-1;41859:518:0;;;;;:::i;:::-;;:::i;41329:522::-;;;;;;;;;;-1:-1:-1;41329:522:0;;;;;:::i;:::-;;:::i;24755:36::-;;;;;;;;;;-1:-1:-1;24755:36:0;;;;;;;;;;;;;;;;5659:25:1;;;5715:2;5700:18;;5693:34;;;;5743:18;;;5736:34;5647:2;5632:18;24755:36:0;5457:319:1;45403:176:0;;;;;;;;;;-1:-1:-1;45403:176:0;;;;;:::i;:::-;;:::i;29067:482::-;;;;;;;;;;-1:-1:-1;29067:482:0;;;;;:::i;:::-;;:::i;23210:39::-;;;;;;;;;;-1:-1:-1;23210:39:0;;;;-1:-1:-1;;;;;23210:39:0;;;27633:199;;;;;;;;;;-1:-1:-1;27633:199:0;;;;;:::i;:::-;;:::i;23025:60::-;;;;;;;;;;;;;;;;31524:525;;;;;;;;;;-1:-1:-1;31524:525:0;;;;;:::i;:::-;;:::i;32485:171::-;;;;;;;;;;-1:-1:-1;32485:171:0;;;;;:::i;:::-;;:::i;23552:26::-;;;;;;;;;;-1:-1:-1;23552:26:0;;;;-1:-1:-1;;;;;23552:26:0;;;43719:114;;;;;;;;;;-1:-1:-1;43719:114:0;;;;;:::i;:::-;;:::i;23670:74::-;;;;;;;;;;;;;;;;22497:56;;;;;;;;;;-1:-1:-1;22497:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45015:380;;;;;;;;;;-1:-1:-1;45015:380:0;;;;;:::i;:::-;;:::i;22942:60::-;;;;;;;;;;;;;;;;22859:59;;;;;;;;;;;;;;;;23170:31;;;;;;;;;;;;;;;;42918:437;;;;;;;;;;-1:-1:-1;42918:437:0;;;;;:::i;:::-;;:::i;27840:184::-;;;;;;;;;;-1:-1:-1;27840:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;27989:18:0;;;27957:7;27989:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;27840:184;32057:112;;;;;;;;;;-1:-1:-1;32057:112:0;;;;;:::i;:::-;;:::i;42385:525::-;;;;;;;;;;-1:-1:-1;42385:525:0;;;;;:::i;:::-;;:::i;3848:229::-;;;;;;;;;;-1:-1:-1;3848:229:0;;;;;:::i;:::-;;:::i;23632:31::-;;;;;;;;;;-1:-1:-1;23632:31:0;;;;-1:-1:-1;;;23632:31:0;;;;;;43363:179;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;;;;;;;;;43521:13:::1;22679:1;43521:2;:13;:::i;:::-;43506:28;::::0;:12;:28:::1;:::i;:::-;43474:29;:60:::0;-1:-1:-1;43363:179:0:o;28032:193::-;28134:4;28156:39;1879:10;28179:7;28188:6;28156:8;:39::i;:::-;-1:-1:-1;28213:4:0;28032:193;;;;;:::o;43841:189::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;43912:6:::1;43922:1;43912:11:::0;43908:114:::1;;2994:7:::0;3021:6;;43925:48:::1;::::0;-1:-1:-1;;;;;3021:6:0;;;;43951:21:::1;43925:48:::0;::::1;;;::::0;43951:21;;43925:48;2994:7;43925:48;43951:21;3021:6;43925:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;43841:189:::0;:::o;43908:114::-:1;2994:7:::0;3021:6;;43989:33:::1;::::0;-1:-1:-1;;;;;3021:6:0;;;;43989:33;::::1;;;::::0;44015:6;;43989:33;2994:7;43989:33;44015:6;3021;43989:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;43908:114;43841:189:::0;:::o;44368:281::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44467:17:0;::::1;;::::0;;;:5:::1;:17;::::0;;;;;::::1;;44445:110;;;::::0;-1:-1:-1;;;44445:110:0;;9679:2:1;44445:110:0::1;::::0;::::1;9661:21:1::0;9718:2;9698:18;;;9691:30;9757:34;9737:18;;;9730:62;-1:-1:-1;;;9808:18:1;;;9801:41;9859:19;;44445:110:0::1;9477:407:1::0;44445:110:0::1;-1:-1:-1::0;;;;;44566:17:0;::::1;44586:5;44566:17:::0;;;:5:::1;:17;::::0;;;;;;;:25;;-1:-1:-1;;44566:25:0::1;::::0;;44607:34;371:51:1;;;44586:5:0;;44607:34:::1;::::0;344:18:1;44607:34:0::1;;;;;;;44368:281:::0;:::o;28233:521::-;28365:4;28382:36;28392:6;28400:9;28411:6;28382:9;:36::i;:::-;-1:-1:-1;;;;;28458:19:0;;28431:24;28458:19;;;:11;:19;;;;;;;;1879:10;28458:33;;;;;;;;28524:26;;;;28502:116;;;;-1:-1:-1;;;28502:116:0;;10091:2:1;28502:116:0;;;10073:21:1;10130:2;10110:18;;;10103:30;10169:34;10149:18;;;10142:62;-1:-1:-1;;;10220:18:1;;;10213:38;10268:19;;28502:116:0;9889:404:1;28502:116:0;28654:57;28663:6;1879:10;28704:6;28685:16;:25;28654:8;:57::i;:::-;-1:-1:-1;28742:4:0;;28233:521;-1:-1:-1;;;;28233:521:0:o;44657:350::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;44812:3:::1;44789:19;:26;;44767:119;;;::::0;-1:-1:-1;;;44767:119:0;;10500:2:1;44767:119:0::1;::::0;::::1;10482:21:1::0;10539:2;10519:18;;;10512:30;10578:34;10558:18;;;10551:62;-1:-1:-1;;;10629:18:1;;;10622:41;10680:19;;44767:119:0::1;10298:407:1::0;44767:119:0::1;44925:19;44915:7;;:29;;;;:::i;:::-;44897:15;:47:::0;;;44960:39:::1;::::0;2032:25:1;;;44960:39:0::1;::::0;2020:2:1;2005:18;44960:39:0::1;;;;;;;;44657:350:::0;:::o;30182:319::-;30276:7;30334;;30323;:18;;30301:110;;;;-1:-1:-1;;;30301:110:0;;11134:2:1;30301:110:0;;;11116:21:1;11173:2;11153:18;;;11146:30;11212:34;11192:18;;;11185:62;-1:-1:-1;;;11263:18:1;;;11256:40;11313:19;;30301:110:0;10932:406:1;30301:110:0;30422:19;30444:10;:8;:10::i;:::-;30422:32;-1:-1:-1;30472:21:0;30422:32;30472:7;:21;:::i;:::-;30465:28;30182:319;-1:-1:-1;;;30182:319:0:o;30922:473::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31002:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30994:56;;;::::0;-1:-1:-1;;;30994:56:0;;11545:2:1;30994:56:0::1;::::0;::::1;11527:21:1::0;11584:2;11564:18;;;11557:30;11623:25;11603:18;;;11596:53;11666:18;;30994:56:0::1;11343:347:1::0;30994:56:0::1;31066:9;31061:327;31085:9;:16:::0;31081:20;::::1;31061:327;;;31143:7;-1:-1:-1::0;;;;;31127:23:0::1;:9;31137:1;31127:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31127:12:0::1;:23:::0;31123:254:::1;;31186:9;31196:16:::0;;:20:::1;::::0;31215:1:::1;::::0;31196:20:::1;:::i;:::-;31186:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;31171:9:::1;:12:::0;;-1:-1:-1;;;;;31186:31:0;;::::1;::::0;31181:1;;31171:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31171:46:0::1;-1:-1:-1::0;;;;;31171:46:0;;::::1;;::::0;;31236:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;31275:11:::1;:20:::0;;;;:28;;-1:-1:-1;;31275:28:0::1;::::0;;31322:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;31322:15:0;;;;;-1:-1:-1;;;;;;31322:15:0::1;::::0;;;;;43925:48:::1;43841:189:::0;:::o;31123:254::-:1;31103:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31061:327;;28762:297:::0;1879:10;28877:4;28971:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28971:34:0;;;;;;;;;;28877:4;;28899:130;;28949:7;;28971:47;;29008:10;;28971:47;:::i;:::-;28899:8;:130::i;31403:113::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31474:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;31474:34:0::1;31504:4;31474:34;::::0;;31403:113::o;29685:489::-;29803:7;29847;;29836;:18;;29828:62;;;;-1:-1:-1;;;29828:62:0;;12564:2:1;29828:62:0;;;12546:21:1;12603:2;12583:18;;;12576:30;12642:33;12622:18;;;12615:61;12693:18;;29828:62:0;12362:355:1;29828:62:0;29906:17;29901:266;;29940:28;29971:25;29982:7;29991:4;29971:10;:25::i;:::-;30018:9;;-1:-1:-1;30011:16:0;;-1:-1:-1;30011:16:0;29901:266;30060:28;30091:25;30102:7;30111:4;30091:10;:25::i;:::-;30138:17;;;;-1:-1:-1;30131:24:0;;-1:-1:-1;30131:24:0;30580:334;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30663:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30662:21;30654:61;;;::::0;-1:-1:-1;;;30654:61:0;;12924:2:1;30654:61:0::1;::::0;::::1;12906:21:1::0;12963:2;12943:18;;;12936:30;13002:29;12982:18;;;12975:57;13049:18;;30654:61:0::1;12722:351:1::0;30654:61:0::1;-1:-1:-1::0;;;;;30730:16:0;::::1;30749:1;30730:16:::0;;;:7:::1;:16;::::0;;;;;:20;30726:109:::1;;-1:-1:-1::0;;;;;30806:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;30786:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;30767:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;30726:109:::1;-1:-1:-1::0;;;;;30845:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;30845:27:0::1;30868:4;30845:27:::0;;::::1;::::0;;;30883:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30883:23:0::1;::::0;;::::1;::::0;;30580:334::o;27427:198::-;-1:-1:-1;;;;;27517:20:0;;27493:7;27517:20;;;:11;:20;;;;;;;;27513:49;;;-1:-1:-1;;;;;;27546:16:0;;;;;:7;:16;;;;;;;27427:198::o;27513:49::-;-1:-1:-1;;;;;27600:16:0;;;;;;:7;:16;;;;;;27580:37;;:19;:37::i;3599:94::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;3664:21:::1;3682:1;3664:9;:21::i;:::-;3599:94::o:0;44038:203::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;44184:38:::1;::::0;-1:-1:-1;;;44184:38:0;;44216:4:::1;44184:38;::::0;::::1;371:51:1::0;-1:-1:-1;;;;;44113:31:0;::::1;::::0;::::1;::::0;44159:10:::1;::::0;44113:31;;44184:23:::1;::::0;344:18:1;;44184:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44113:120;::::0;-1:-1:-1;;;;;;44113:120:0::1;::::0;;;;;;-1:-1:-1;;;;;13459:32:1;;;44113:120:0::1;::::0;::::1;13441:51:1::0;13508:18;;;13501:34;13414:18;;44113:120:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45587:126::-:0;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;45642:11:::1;:18:::0;;-1:-1:-1;;;;45642:18:0::1;-1:-1:-1::0;;;45642:18:0::1;::::0;;45693:12:::1;45671:19;:34:::0;45587:126::o;43550:161::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;43667:16:::1;:36:::0;;-1:-1:-1;;;;;;43667:36:0::1;-1:-1:-1::0;;;;;43667:36:0;;;::::1;::::0;;;::::1;::::0;;43550:161::o;44249:111::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;44312:40:::1;44327:24;44345:4;44327:9;:24::i;:::-;44312:14;:40::i;41859:518::-:0;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;42091:2:::1;42084:3:::0;42077:4;42064:10;42049:12:::1;42056:5:::0;42049:4;:12:::1;:::i;:::-;:25;;;;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:44;;;;42027:128;;;;-1:-1:-1::0;;;42027:128:0::1;;;;;;;:::i;:::-;42166:8;:19:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;42196:21:0;;;;;;;42166:19:::1;42196:21:::0;;::::1;;;-1:-1:-1::0;;42270:19:0;42228:31;;;::::1;;-1:-1:-1::0;;42270:19:0;;;;;::::1;;;-1:-1:-1::0;;42300:17:0::1;-1:-1:-1::0;;;42300:17:0;;::::1;::::0;;;::::1;;::::0;;;42346::::1;42270:19:::0;42228:31;42346:17:::1;:::i;:::-;:23;;;;:::i;:::-;42328:8;:41:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;42328:41:0::1;-1:-1:-1::0;;;;42328:41:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;41859:518:0:o;41329:522::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41468:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;;:42;::::1;;:33;::::0;;::::1;:42;;::::0;41446:148:::1;;;::::0;-1:-1:-1;;;41446:148:0;;14554:2:1;41446:148:0::1;::::0;::::1;14536:21:1::0;14593:2;14573:18;;;14566:30;14632:34;14612:18;;;14605:62;14703:26;14683:18;;;14676:54;14747:19;;41446:148:0::1;14352:420:1::0;41446:148:0::1;-1:-1:-1::0;;;;;41605:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;41605:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;41657:130:::1;;-1:-1:-1::0;;;;;41683:31:0;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;;;:38;;-1:-1:-1;;41683:38:0::1;41717:4;41683:38;::::0;;41741:34;;371:51:1;;;41741:34:0;::::1;;::::0;::::1;::::0;344:18:1;41741:34:0::1;;;;;;;41657:130;41802:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;41802:41:0;::::1;::::0;::::1;::::0;;;::::1;41329:522:::0;;:::o;45403:176::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;45510:2:::1;45493:14;:19;45485:46;;;::::0;-1:-1:-1;;;45485:46:0;;14979:2:1;45485:46:0::1;::::0;::::1;14961:21:1::0;15018:2;14998:18;;;14991:30;-1:-1:-1;;;15037:18:1;;;15030:45;15092:18;;45485:46:0::1;14777:339:1::0;45485:46:0::1;45542:12;:29:::0;45403:176::o;29067:482::-;1879:10;29187:4;29236:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29236:34:0;;;;;;;;;;29303:35;;;;29281:122;;;;-1:-1:-1;;;29281:122:0;;15323:2:1;29281:122:0;;;15305:21:1;15362:2;15342:18;;;15335:30;15401:34;15381:18;;;15374:62;-1:-1:-1;;;15452:18:1;;;15445:35;15497:19;;29281:122:0;15121:401:1;29281:122:0;29439:67;1879:10;29462:7;29490:15;29471:16;:34;29439:8;:67::i;:::-;-1:-1:-1;29537:4:0;;29067:482;-1:-1:-1;;;29067:482:0:o;27633:199::-;27738:4;27760:42;1879:10;27784:9;27795:6;27760:9;:42::i;31524:525::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;31672:9:::1;31667:375;31687:19:::0;;::::1;31667:375;;;31795:8;31754:49;;:24;:37;31779:8;;31788:1;31779:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31754:37:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;31754:37:0;;::::1;;:49;;::::0;31728:176:::1;;;::::0;-1:-1:-1;;;31728:176:0;;15729:2:1;31728:176:0::1;::::0;::::1;15711:21:1::0;15768:2;15748:18;;;15741:30;15807:34;15787:18;;;15780:62;15878:34;15858:18;;;15851:62;-1:-1:-1;;;15929:19:1;;;15922:32;15971:19;;31728:176:0::1;15527:469:1::0;31728:176:0::1;31959:8;31919:24;:37;31944:8;;31953:1;31944:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31919:37:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;31919:37:0;:48;;-1:-1:-1;;31919:48:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31987:43;::::1;;;32008:8:::0;;32017:1;32008:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;31987:43;::::0;-1:-1:-1;;;;;389:32:1;;;371:51;;359:2;344:18;31987:43:0::1;;;;;;;31708:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31667:375;;;;31524:525:::0;;;:::o;32485:171::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;32562:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;32562:32:0::1;-1:-1:-1::0;;;;32562:32:0;;::::1;;::::0;;32610:38:::1;::::0;::::1;::::0;::::1;::::0;32586:8;1607:14:1;1600:22;1582:41;;1570:2;1555:18;;1442:187;43719:114:0;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;43801:10:::1;:24:::0;;-1:-1:-1;;;;;;43801:24:0::1;-1:-1:-1::0;;;;;43801:24:0;;;::::1;::::0;;;::::1;::::0;;43719:114::o;45015:380::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45152:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;45130:145:::1;;;::::0;-1:-1:-1;;;45130:145:0;;16203:2:1;45130:145:0::1;::::0;::::1;16185:21:1::0;16242:2;16222:18;;;16215:30;16281:34;16261:18;;;16254:62;-1:-1:-1;;;16332:18:1;;;16325:48;16390:19;;45130:145:0::1;16001:414:1::0;45130:145:0::1;-1:-1:-1::0;;;;;45286:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;;;:44;;-1:-1:-1;;45286:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;45348:39;;371:51:1;;;45286:44:0;;45348:39:::1;::::0;344:18:1;45348:39:0::1;;;;;;;45015:380:::0;;:::o;42918:437::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;43108:3:::1;43085:19;:26;;43063:118;;;::::0;-1:-1:-1;;;43063:118:0;;16622:2:1;43063:118:0::1;::::0;::::1;16604:21:1::0;16661:2;16641:18;;;16634:30;16700:34;16680:18;;;16673:62;-1:-1:-1;;;16751:18:1;;;16744:40;16801:19;;43063:118:0::1;16420:406:1::0;43063:118:0::1;43219:18;43209:7;;:28;;;;:::i;:::-;43192:14;:45:::0;43292:7:::1;::::0;:29:::1;::::0;43302:19;;43292:29:::1;:::i;:::-;43274:15;:47:::0;-1:-1:-1;;42918:437:0:o;32057:112::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32126:27:0::1;32156:5;32126:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32126:35:0::1;::::0;;32057:112::o;42385:525::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;42618:2:::1;42611:3:::0;42604:4;42591:10;42576:12:::1;42583:5:::0;42576:4;:12:::1;:::i;:::-;:25;;;;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:44;;;;42554:128;;;;-1:-1:-1::0;;;42554:128:0::1;;;;;;;:::i;:::-;42693:9;:20:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;42724:22:0;;;;;;;42693:20:::1;42724:22:::0;;::::1;;;-1:-1:-1::0;;42800:20:0;42757:32;;;::::1;;-1:-1:-1::0;;42800:20:0;;;;;::::1;;;-1:-1:-1::0;;42831:18:0::1;-1:-1:-1::0;;;42831:18:0;;::::1;::::0;;;::::1;;::::0;;;42879:17:::1;42800:20:::0;42757:32;42879:17:::1;:::i;:::-;:23;;;;:::i;:::-;42860:9;:42:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;42860:42:0::1;-1:-1:-1::0;;;;42860:42:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;42385:525:0:o;3848:229::-;2994:7;3021:6;-1:-1:-1;;;;;3021:6:0;1879:10;3168:23;3160:68;;;;-1:-1:-1;;;3160:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3951:22:0;::::1;3929:110;;;::::0;-1:-1:-1;;;3929:110:0;;17033:2:1;3929:110:0::1;::::0;::::1;17015:21:1::0;17072:2;17052:18;;;17045:30;17111:34;17091:18;;;17084:62;-1:-1:-1;;;17162:18:1;;;17155:36;17208:19;;3929:110:0::1;16831:402:1::0;3929:110:0::1;4050:19;4060:8;4050:9;:19::i;35638:369::-:0;-1:-1:-1;;;;;35765:19:0;;35757:68;;;;-1:-1:-1;;;35757:68:0;;17440:2:1;35757:68:0;;;17422:21:1;17479:2;17459:18;;;17452:30;17518:34;17498:18;;;17491:62;-1:-1:-1;;;17569:18:1;;;17562:34;17613:19;;35757:68:0;17238:400:1;35757:68:0;-1:-1:-1;;;;;35844:21:0;;35836:68;;;;-1:-1:-1;;;35836:68:0;;17845:2:1;35836:68:0;;;17827:21:1;17884:2;17864:18;;;17857:30;17923:34;17903:18;;;17896:62;-1:-1:-1;;;17974:18:1;;;17967:32;18016:19;;35836:68:0;17643:398:1;35836:68:0;-1:-1:-1;;;;;35915:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;35967:32;;2032:25:1;;;35967:32:0;;2005:18:1;35967:32:0;;;;;;;35638:369;;;:::o;36015:1699::-;-1:-1:-1;;;;;36137:18:0;;36129:68;;;;-1:-1:-1;;;36129:68:0;;18248:2:1;36129:68:0;;;18230:21:1;18287:2;18267:18;;;18260:30;18326:34;18306:18;;;18299:62;-1:-1:-1;;;18377:18:1;;;18370:35;18422:19;;36129:68:0;18046:401:1;36129:68:0;-1:-1:-1;;;;;36216:16:0;;36208:64;;;;-1:-1:-1;;;36208:64:0;;18654:2:1;36208:64:0;;;18636:21:1;18693:2;18673:18;;;18666:30;18732:34;18712:18;;;18705:62;-1:-1:-1;;;18783:18:1;;;18776:33;18826:19;;36208:64:0;18452:399:1;36208:64:0;-1:-1:-1;;;;;36292:11:0;;;;;;:5;:11;;;;;;;;36291:12;36283:57;;;;-1:-1:-1;;;36283:57:0;;19058:2:1;36283:57:0;;;19040:21:1;;;19077:18;;;19070:30;19136:34;19116:18;;;19109:62;19188:18;;36283:57:0;18856:356:1;36283:57:0;36368:1;36359:6;:10;36351:64;;;;-1:-1:-1;;;36351:64:0;;19419:2:1;36351:64:0;;;19401:21:1;19458:2;19438:18;;;19431:30;19497:34;19477:18;;;19470:62;-1:-1:-1;;;19548:18:1;;;19541:39;19597:19;;36351:64:0;19217:405:1;36351:64:0;36458:15;36468:4;36458:9;:15::i;:::-;36448:6;:25;;36426:124;;;;-1:-1:-1;;;36426:124:0;;19829:2:1;36426:124:0;;;19811:21:1;19868:2;19848:18;;;19841:30;19907:34;19887:18;;;19880:62;-1:-1:-1;;;19958:18:1;;;19951:47;20015:19;;36426:124:0;19627:413:1;36426:124:0;-1:-1:-1;;;;;36580:24:0;;36563:12;36580:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;36608:22:0;;;;;;:18;:22;;;;;;;;36580:50;36578:53;36563:68;;36648:7;36644:687;;;-1:-1:-1;;;;;36676:32:0;;;;;;:26;:32;;;;;;;;36672:648;;;36770:12;;36748:19;;:34;;;;:::i;:::-;36733:12;:49;36729:167;;;-1:-1:-1;;;;;36807:9:0;;;;;;:5;:9;;;;;;;;;:16;;-1:-1:-1;;36807:16:0;36819:4;36807:16;;;;;;36851:25;;371:51:1;;;36819:4:0;;36851:25;;344:18:1;36851:25:0;;;;;;;36729:167;36931:8;36916:23;:12;:23;;;;;;-1:-1:-1;;36916:23:0;;;;;;;;;;;;;;;-1:-1:-1;;36916:23:0;;;;;;;;-1:-1:-1;;36916:23:0;;;;;;;;;;-1:-1:-1;;36916:23:0;-1:-1:-1;;;36916:23:0;;;;;;-1:-1:-1;;;;36916:23:0;;-1:-1:-1;;;36916:23:0;;;;;;;;;;;;;;;;;36998:14;;36988:24;;;36958:130;;;;-1:-1:-1;;;36958:130:0;;20247:2:1;36958:130:0;;;20229:21:1;;;20266:18;;;20259:30;20325:34;20305:18;;;20298:62;20377:18;;36958:130:0;20045:356:1;36958:130:0;36672:648;;;37144:9;37129:24;:12;:24;;;;;;-1:-1:-1;;37129:24:0;;;;;;;;;;;;;;;-1:-1:-1;;37129:24:0;;;;;;;;-1:-1:-1;;37129:24:0;;;;;;;;;;-1:-1:-1;;37129:24:0;-1:-1:-1;;;37129:24:0;;;;;;-1:-1:-1;;;;37129:24:0;;-1:-1:-1;;;37129:24:0;;;;;;;;;;;;;;;;;37212:15;;37202:25;;;37172:132;;;;-1:-1:-1;;;37172:132:0;;20608:2:1;37172:132:0;;;20590:21:1;20647:2;20627:18;;;20620:30;20686:34;20666:18;;;20659:62;-1:-1:-1;;;20737:18:1;;;20730:31;20778:19;;37172:132:0;20406:397:1;37172:132:0;37389:29;;37361:24;37379:4;37361:9;:24::i;:::-;:57;;:91;;;;-1:-1:-1;37436:16:0;;;;37435:17;37361:91;:141;;;;-1:-1:-1;;;;;;37470:32:0;;;;;;:26;:32;;;;;;;;37469:33;37361:141;:179;;;;-1:-1:-1;37519:21:0;;-1:-1:-1;;;37519:21:0;;;;37361:179;37343:310;;;37596:45;37611:29;;37596:14;:45::i;:::-;37665:41;37680:4;37686:2;37690:6;37698:7;37665:14;:41::i;34883:161::-;34925:7;34946:15;34963;34982:19;:17;:19::i;:::-;34945:56;;-1:-1:-1;34945:56:0;-1:-1:-1;35019:17:0;34945:56;;35019:17;:::i;:::-;35012:24;;;;34883:161;:::o;33134:470::-;33234:36;;:::i;:::-;33300:29;33312:7;33321;33300:11;:29::i;:::-;33288:41;;33517:52;33529:9;33540:7;33549;33558:10;:8;:10::i;:::-;33517:11;:52::i;:::-;33486:17;;;33340:229;33456:15;;;33340:229;33427:14;;;33340:229;33387:25;;;33340:229;;;33134:470;;;;:::o;4085:173::-;4141:16;4160:6;;-1:-1:-1;;;;;4177:17:0;;;-1:-1:-1;;;;;;4177:17:0;;;;;;4210:40;;4160:6;;;;;;;4210:40;;4141:16;4210:40;4130:128;4085:173;:::o;38998:1210::-;25769:16;:23;;-1:-1:-1;;25769:23:0;25788:4;25769:23;;;39105:12:::1;:19:::0;25769:16;;39105:23:::1;::::0;-1:-1:-1;;;39105:19:0;::::1;25769:23:::0;39105:19:::1;39127:1;39105:23;:::i;:::-;39211:12;:15:::0;39083:45:::1;::::0;;::::1;::::0;-1:-1:-1;39139:32:0::1;::::0;39083:45;;39175:51:::1;::::0;-1:-1:-1;;;39211:15:0;;::::1;;39175:20:::0;:51:::1;:::i;:::-;39174:67;;;;:::i;:::-;39139:102:::0;-1:-1:-1;39252:14:0::1;39269:47;39139:102:::0;39269:20;:47:::1;:::i;:::-;39252:64:::0;-1:-1:-1;39354:21:0::1;39420:24;39252:64:::0;39420:16:::1;:24::i;:::-;39457:20;39480:38;39504:14:::0;39480:21:::1;:38;:::i;:::-;39624:12;:15:::0;39457:61;;-1:-1:-1;39529:29:0::1;::::0;39610::::1;::::0;-1:-1:-1;;;39624:15:0;::::1;;;39610:11:::0;:29:::1;:::i;:::-;39577:12;:15:::0;39562:30:::1;::::0;-1:-1:-1;;;39577:15:0;::::1;;;39562:12:::0;:30:::1;:::i;:::-;39561:79;;;;:::i;:::-;39529:111;;39679:61;39692:24;39718:21;39679:12;:61::i;:::-;39962:12;:16:::0;39845:21:::1;::::0;39818:24:::1;::::0;39948:30:::1;::::0;39962:16;;::::1;;;39948:11:::0;:30:::1;:::i;:::-;39914:12;:16:::0;39895:35:::1;::::0;39914:16;;::::1;;;39895::::0;:35:::1;:::i;:::-;39894:85;;;;:::i;:::-;40087:12;:22:::0;39877:102;;-1:-1:-1;39990:20:0::1;::::0;40073:36:::1;::::0;40087:22;;::::1;;;40073:11:::0;:36:::1;:::i;:::-;40033:12;:22:::0;40014:41:::1;::::0;40033:22;;::::1;;;40014:16:::0;:41:::1;:::i;:::-;40013:97;;;;:::i;:::-;40121:10;::::0;39990:120;;-1:-1:-1;40121:28:0::1;::::0;-1:-1:-1;;;;;40121:10:0::1;40142:6:::0;40121:20:::1;:28::i;:::-;40160:16;::::0;:40:::1;::::0;-1:-1:-1;;;;;40160:16:0::1;40187:12:::0;40160:26:::1;:40::i;:::-;-1:-1:-1::0;;25815:16:0;:24;;-1:-1:-1;;25815:24:0;;;-1:-1:-1;;;;;;;;38998:1210:0:o;37795:1195::-;37947:28;37978;37989:7;37998;37978:10;:28::i;:::-;-1:-1:-1;;;;;38023:19:0;;;;;;:11;:19;;;;;;37947:59;;-1:-1:-1;38023:19:0;;38019:78;;;-1:-1:-1;;;;;38059:15:0;;;;;;:7;:15;;;;;:26;;38078:7;;38059:15;:26;;38078:7;;38059:26;:::i;:::-;;;;-1:-1:-1;;38019:78:0;-1:-1:-1;;;;;38111:22:0;;;;;;:11;:22;;;;;;;;38107:94;;;38172:17;;;;-1:-1:-1;;;;;38150:18:0;;;;;;:7;:18;;;;;:39;;:18;;;:39;;38172:17;;38150:39;:::i;:::-;;;;-1:-1:-1;;38107:94:0;38232:9;;-1:-1:-1;;;;;38213:15:0;;38232:9;38213:15;;;:7;:15;;;;;:28;;:15;;38232:9;38213:28;;38232:9;;38213:28;:::i;:::-;;;;-1:-1:-1;;38274:17:0;;;;;-1:-1:-1;;;;;38252:18:0;;;;;;:7;:18;;;;;;:39;;38274:17;;38252:18;;:39;;38274:17;;38252:39;:::i;:::-;;;;-1:-1:-1;;38302:265:0;;;;38351:1;:7;;;38340;;:18;;;;;;;:::i;:::-;;;;;-1:-1:-1;38330:7:0;:28;-1:-1:-1;38394:7:0;;;;38383;:18;;:7;;:18;;38394:7;;38383:18;:::i;:::-;;;;;-1:-1:-1;38373:7:0;:28;-1:-1:-1;38430:6:0;;;;38438;;;;38418:27;;38430:6;38418:11;:27::i;:::-;38460:33;38472:1;:9;;;38483:1;:9;;;38460:11;:33::i;:::-;38538:4;-1:-1:-1;;;;;38513:42:0;38522:6;-1:-1:-1;;;;;38513:42:0;;38545:1;:9;;;38513:42;;;;2032:25:1;;2020:2;2005:18;;1886:177;38513:42:0;;;;;;;;38302:265;-1:-1:-1;;;;;38582:26:0;;;;;;:18;:26;;;;;;;;38581:27;:61;;;;-1:-1:-1;;;;;;38613:29:0;;;;;;:18;:29;;;;;;;;38612:30;38581:61;38577:141;;;38667:11;;-1:-1:-1;;;38667:11:0;;;;38659:47;;;;-1:-1:-1;;;38659:47:0;;21240:2:1;38659:47:0;;;21222:21:1;21279:2;21259:18;;;21252:30;21318:25;21298:18;;;21291:53;21361:18;;38659:47:0;21038:347:1;38659:47:0;-1:-1:-1;;;;;38750:35:0;;;;;;:24;:35;;;;;;;;;:95;;;38830:15;;38806:20;38816:9;38806;:20::i;:::-;:39;;38750:95;38728:192;;;;-1:-1:-1;;;38728:192:0;;21592:2:1;38728:192:0;;;21574:21:1;21631:2;21611:18;;;21604:30;21670:34;21650:18;;;21643:62;-1:-1:-1;;;21721:18:1;;;21714:45;21776:19;;38728:192:0;21390:411:1;38728:192:0;38953:9;-1:-1:-1;;;;;38936:46:0;38945:6;-1:-1:-1;;;;;38936:46:0;;38964:1;:17;;;38936:46;;;;2032:25:1;;2020:2;2005:18;;1886:177;38936:46:0;;;;;;;;37936:1054;37795:1195;;;;:::o;35052:578::-;35150:7;;35186;;35103;;;;;35204:314;35228:9;:16;35224:20;;35204:314;;;35312:7;35288;:21;35296:9;35306:1;35296:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35296:12:0;35288:21;;;;;;;;;;;;;:31;;:83;;;35364:7;35340;:21;35348:9;35358:1;35348:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35348:12:0;35340:21;;;;;;;;;;;;;:31;35288:83;35266:146;;;35395:7;;35404;;35387:25;;;;;;;35052:578;;:::o;35266:146::-;35438:7;:21;35446:9;35456:1;35446:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35446:12:0;35438:21;;;;;;;;;;;;;35427:32;;;;:::i;:::-;;;35485:7;:21;35493:9;35503:1;35493:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35493:12:0;35485:21;;;;;;;;;;;;;35474:32;;;;:::i;:::-;;-1:-1:-1;35246:3:0;;;;:::i;:::-;;;;35204:314;;;;35552:7;;35542;;:17;;;;:::i;:::-;35532:7;:27;35528:58;;;35569:7;;35578;;35561:25;;;;;;35052:578;;:::o;35528:58::-;35605:7;;35614;;-1:-1:-1;35052:578:0;-1:-1:-1;35052:578:0:o;33612:503::-;33713:28;;:::i;:::-;33764:7;33759:91;;33788:17;;;:27;;;33830:8;;33759:91;33880:12;:16;33900:3;;33870:26;;33880:16;;33870:7;:26;:::i;:::-;33869:34;;;;:::i;:::-;33860:6;;;:43;33935:12;:17;33956:3;;33925:27;;33935:17;;;;;33925:7;:27;:::i;:::-;33924:35;;;;:::i;:::-;33914:7;;;:45;33993:12;:19;34016:3;;33983:29;;-1:-1:-1;;;33993:19:0;;;;33983:7;:29;:::i;:::-;33982:37;;;;:::i;:::-;33970:9;;;:49;;;34069:7;;;;34060:6;;;;34050:16;;:7;:16;:::i;:::-;:26;;;;:::i;:::-;:38;;;;:::i;:::-;34030:17;;;:58;33612:503;;;;:::o;34123:752::-;34332:15;;;;;34508:21;34518:11;34508:7;:21;:::i;:::-;34498:31;;34547:7;34542:75;;-1:-1:-1;34579:7:0;;-1:-1:-1;34597:1:0;;-1:-1:-1;34597:1:0;;-1:-1:-1;34597:1:0;34571:34;;34542:75;34645:11;34636:1;:6;;;:20;;;;:::i;:::-;34629:27;;34685:11;34675:1;:7;;;:21;;;;:::i;:::-;34667:29;;34729:11;34717:1;:9;;;:23;;;;:::i;:::-;34707:33;-1:-1:-1;34707:33:0;34786:5;34769:14;34779:4;34769:7;:14;:::i;:::-;:22;;;;:::i;:::-;:32;;;;:::i;:::-;34751:50;-1:-1:-1;34846:5:0;;34853:4;34123:752;;;;;;;;;;:::o;40216:669::-;40350:16;;;40364:1;40350:16;;;;;;;;40326:21;;40350:16;;;;;;;;;;-1:-1:-1;40350:16:0;40326:40;;40395:4;40377;40382:1;40377:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;40377:23:0;;;-1:-1:-1;;;;;40377:23:0;;;;;40421:15;;;;;;;;;-1:-1:-1;;;;;40421:15:0;-1:-1:-1;;;;;40421:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40411:4;40416:1;40411:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40411:32:0;;;:7;;;;;;;;;;:32;;;;40493:15;;40478:4;27957:7;27989:18;;;:11;:18;;;;;;40493:15;;;;;;;27989:27;;;;;;40513:11;-1:-1:-1;40456:159:0;;;40573:15;;40541:62;;40558:4;;40573:15;;;-1:-1:-1;;;;;40573:15:0;-1:-1:-1;;40541:8:0;:62::i;:::-;40653:15;;:224;;-1:-1:-1;;;40653:224:0;;:15;;;;-1:-1:-1;;;;;40653:15:0;;:66;;:224;;40734:11;;40760:1;;40804:4;;40831;;40851:15;;40653:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40271:614;40216:669;:::o;40893:428::-;41004:15;;41208:10;;41004:255;;-1:-1:-1;;;41004:255:0;;41076:4;41004:255;;;23528:34:1;23578:18;;;23571:34;;;41122:1:0;23621:18:1;;;23614:34;;;23664:18;;;23657:34;-1:-1:-1;;;;;41208:10:0;;;23707:19:1;;;23700:44;41233:15:0;23760:19:1;;;23753:35;41004:15:0;;;;;;:31;;41043:9;;23462:19:1;;41004:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;41275:38:0;;;24284:25:1;;;24340:2;24325:18;;24318:34;;;41275:38:0;;-1:-1:-1;24257:18:1;41275:38:0;;;;;;;40893:428;;:::o;15648:391::-;15777:6;15752:21;:31;;15730:110;;;;-1:-1:-1;;;15730:110:0;;24565:2:1;15730:110:0;;;24547:21:1;24604:2;24584:18;;;24577:30;24643:31;24623:18;;;24616:59;24692:18;;15730:110:0;24363:353:1;15730:110:0;15854:12;15872:9;-1:-1:-1;;;;;15872:14:0;15894:6;15872:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15853:52;;;15938:7;15916:115;;;;-1:-1:-1;;;15916:115:0;;25133:2:1;15916:115:0;;;25115:21:1;25172:2;25152:18;;;25145:30;25211:34;25191:18;;;25184:62;25282:28;25262:18;;;25255:56;25328:19;;15916:115:0;24931:422:1;15916:115:0;15719:320;15648:391;;:::o;32762:125::-;32841:4;32830:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;32856:11:0;:23;;32875:4;;32856:11;:15;;:23;;32875:4;;32856:23;:::i;:::-;;;;-1:-1:-1;;;;32762:125:0:o;32895:231::-;32985:4;32969:22;;;;:7;:22;;;;;:33;;32995:7;;32969:22;:33;;32995:7;;32969:33;:::i;:::-;;;;-1:-1:-1;;33037:4:0;33017:26;;;;:11;:26;;;;;;;;33013:65;;;33061:4;33045:22;;;;:7;:22;;;;;:33;;33071:7;;33045:22;:33;;33071:7;;33045:33;:::i;:::-;;;;-1:-1:-1;;33013:65:0;33111:7;33089:11;:18;;;:29;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;433:548::-;545:4;574:2;603;592:9;585:21;635:6;629:13;678:6;673:2;662:9;658:18;651:34;703:1;713:140;727:6;724:1;721:13;713:140;;;822:14;;;818:23;;812:30;788:17;;;807:2;784:26;777:66;742:10;;713:140;;;717:3;902:1;897:2;888:6;877:9;873:22;869:31;862:42;972:2;965;961:7;956:2;948:6;944:15;940:29;929:9;925:45;921:54;913:62;;;;433:548;;;;:::o;986:131::-;-1:-1:-1;;;;;1061:31:1;;1051:42;;1041:70;;1107:1;1104;1097:12;1122:315;1190:6;1198;1251:2;1239:9;1230:7;1226:23;1222:32;1219:52;;;1267:1;1264;1257:12;1219:52;1306:9;1293:23;1325:31;1350:5;1325:31;:::i;:::-;1375:5;1427:2;1412:18;;;;1399:32;;-1:-1:-1;;;1122:315:1:o;1634:247::-;1693:6;1746:2;1734:9;1725:7;1721:23;1717:32;1714:52;;;1762:1;1759;1752:12;1714:52;1801:9;1788:23;1820:31;1845:5;1820:31;:::i;2068:456::-;2145:6;2153;2161;2214:2;2202:9;2193:7;2189:23;2185:32;2182:52;;;2230:1;2227;2220:12;2182:52;2269:9;2256:23;2288:31;2313:5;2288:31;:::i;:::-;2338:5;-1:-1:-1;2395:2:1;2380:18;;2367:32;2408:33;2367:32;2408:33;:::i;:::-;2068:456;;2460:7;;-1:-1:-1;;;2514:2:1;2499:18;;;;2486:32;;2068:456::o;2942:118::-;3028:5;3021:13;3014:21;3007:5;3004:32;2994:60;;3050:1;3047;3040:12;3065:309;3130:6;3138;3191:2;3179:9;3170:7;3166:23;3162:32;3159:52;;;3207:1;3204;3197:12;3159:52;3243:9;3230:23;3220:33;;3303:2;3292:9;3288:18;3275:32;3316:28;3338:5;3316:28;:::i;:::-;3363:5;3353:15;;;3065:309;;;;;:::o;4440:156::-;4506:20;;4566:4;4555:16;;4545:27;;4535:55;;4586:1;4583;4576:12;4535:55;4440:156;;;:::o;4601:464::-;4686:6;4694;4702;4710;4718;4771:3;4759:9;4750:7;4746:23;4742:33;4739:53;;;4788:1;4785;4778:12;4739:53;4811:27;4828:9;4811:27;:::i;:::-;4801:37;;4857:36;4889:2;4878:9;4874:18;4857:36;:::i;:::-;4847:46;;4912:36;4944:2;4933:9;4929:18;4912:36;:::i;:::-;4902:46;;4967:36;4999:2;4988:9;4984:18;4967:36;:::i;:::-;4957:46;;5022:37;5054:3;5043:9;5039:19;5022:37;:::i;:::-;5012:47;;4601:464;;;;;;;;:::o;5070:382::-;5135:6;5143;5196:2;5184:9;5175:7;5171:23;5167:32;5164:52;;;5212:1;5209;5202:12;5164:52;5251:9;5238:23;5270:31;5295:5;5270:31;:::i;:::-;5320:5;-1:-1:-1;5377:2:1;5362:18;;5349:32;5390:30;5349:32;5390:30;:::i;5781:750::-;5873:6;5881;5889;5942:2;5930:9;5921:7;5917:23;5913:32;5910:52;;;5958:1;5955;5948:12;5910:52;5998:9;5985:23;6027:18;6068:2;6060:6;6057:14;6054:34;;;6084:1;6081;6074:12;6054:34;6122:6;6111:9;6107:22;6097:32;;6167:7;6160:4;6156:2;6152:13;6148:27;6138:55;;6189:1;6186;6179:12;6138:55;6229:2;6216:16;6255:2;6247:6;6244:14;6241:34;;;6271:1;6268;6261:12;6241:34;6326:7;6319:4;6309:6;6306:1;6302:14;6298:2;6294:23;6290:34;6287:47;6284:67;;;6347:1;6344;6337:12;6284:67;6378:4;6370:13;;;;-1:-1:-1;6402:6:1;-1:-1:-1;;6443:20:1;;6430:34;6473:28;6430:34;6473:28;:::i;:::-;6520:5;6510:15;;;5781:750;;;;;:::o;6536:241::-;6592:6;6645:2;6633:9;6624:7;6620:23;6616:32;6613:52;;;6661:1;6658;6651:12;6613:52;6700:9;6687:23;6719:28;6741:5;6719:28;:::i;6782:248::-;6850:6;6858;6911:2;6899:9;6890:7;6886:23;6882:32;6879:52;;;6927:1;6924;6917:12;6879:52;-1:-1:-1;;6950:23:1;;;7020:2;7005:18;;;6992:32;;-1:-1:-1;6782:248:1:o;7035:388::-;7103:6;7111;7164:2;7152:9;7143:7;7139:23;7135:32;7132:52;;;7180:1;7177;7170:12;7132:52;7219:9;7206:23;7238:31;7263:5;7238:31;:::i;:::-;7288:5;-1:-1:-1;7345:2:1;7330:18;;7317:32;7358:33;7317:32;7358:33;:::i;7428:356::-;7630:2;7612:21;;;7649:18;;;7642:30;7708:34;7703:2;7688:18;;7681:62;7775:2;7760:18;;7428:356::o;7789:127::-;7850:10;7845:3;7841:20;7838:1;7831:31;7881:4;7878:1;7871:15;7905:4;7902:1;7895:15;7921:422;8010:1;8053:5;8010:1;8067:270;8088:7;8078:8;8075:21;8067:270;;;8147:4;8143:1;8139:6;8135:17;8129:4;8126:27;8123:53;;;8156:18;;:::i;:::-;8206:7;8196:8;8192:22;8189:55;;;8226:16;;;;8189:55;8305:22;;;;8265:15;;;;8067:270;;;8071:3;7921:422;;;;;:::o;8348:806::-;8397:5;8427:8;8417:80;;-1:-1:-1;8468:1:1;8482:5;;8417:80;8516:4;8506:76;;-1:-1:-1;8553:1:1;8567:5;;8506:76;8598:4;8616:1;8611:59;;;;8684:1;8679:130;;;;8591:218;;8611:59;8641:1;8632:10;;8655:5;;;8679:130;8716:3;8706:8;8703:17;8700:43;;;8723:18;;:::i;:::-;-1:-1:-1;;8779:1:1;8765:16;;8794:5;;8591:218;;8893:2;8883:8;8880:16;8874:3;8868:4;8865:13;8861:36;8855:2;8845:8;8842:16;8837:2;8831:4;8828:12;8824:35;8821:77;8818:159;;;-1:-1:-1;8930:19:1;;;8962:5;;8818:159;9009:34;9034:8;9028:4;9009:34;:::i;:::-;9079:6;9075:1;9071:6;9067:19;9058:7;9055:32;9052:58;;;9090:18;;:::i;:::-;9128:20;;8348:806;-1:-1:-1;;;8348:806:1:o;9159:140::-;9217:5;9246:47;9287:4;9277:8;9273:19;9267:4;9246:47;:::i;9304:168::-;9377:9;;;9408;;9425:15;;;9419:22;;9405:37;9395:71;;9446:18;;:::i;10710:217::-;10750:1;10776;10766:132;;10820:10;10815:3;10811:20;10808:1;10801:31;10855:4;10852:1;10845:15;10883:4;10880:1;10873:15;10766:132;-1:-1:-1;10912:9:1;;10710:217::o;11695:127::-;11756:10;11751:3;11747:20;11744:1;11737:31;11787:4;11784:1;11777:15;11811:4;11808:1;11801:15;11827:128;11894:9;;;11915:11;;;11912:37;;;11929:18;;:::i;11960:127::-;12021:10;12016:3;12012:20;12009:1;12002:31;12052:4;12049:1;12042:15;12076:4;12073:1;12066:15;12092:135;12131:3;12152:17;;;12149:43;;12172:18;;:::i;:::-;-1:-1:-1;12219:1:1;12208:13;;12092:135::o;12232:125::-;12297:9;;;12318:10;;;12315:36;;;12331:18;;:::i;13078:184::-;13148:6;13201:2;13189:9;13180:7;13176:23;13172:32;13169:52;;;13217:1;13214;13207:12;13169:52;-1:-1:-1;13240:16:1;;13078:184;-1:-1:-1;13078:184:1:o;13546:245::-;13613:6;13666:2;13654:9;13645:7;13641:23;13637:32;13634:52;;;13682:1;13679;13672:12;13634:52;13714:9;13708:16;13733:28;13755:5;13733:28;:::i;13796:148::-;13884:4;13863:12;;;13877;;;13859:31;;13902:13;;13899:39;;;13918:18;;:::i;13949:398::-;14151:2;14133:21;;;14190:2;14170:18;;;14163:30;14229:34;14224:2;14209:18;;14202:62;-1:-1:-1;;;14295:2:1;14280:18;;14273:32;14337:3;14322:19;;13949:398::o;20808:225::-;20912:4;20891:12;;;20905;;;20887:31;20938:22;;;;20979:24;;;20969:58;;21007:18;;:::i;:::-;20969:58;20808:225;;;;:::o;21938:251::-;22008:6;22061:2;22049:9;22040:7;22036:23;22032:32;22029:52;;;22077:1;22074;22067:12;22029:52;22109:9;22103:16;22128:31;22153:5;22128:31;:::i;22194:980::-;22456:4;22504:3;22493:9;22489:19;22535:6;22524:9;22517:25;22561:2;22599:6;22594:2;22583:9;22579:18;22572:34;22642:3;22637:2;22626:9;22622:18;22615:31;22666:6;22701;22695:13;22732:6;22724;22717:22;22770:3;22759:9;22755:19;22748:26;;22809:2;22801:6;22797:15;22783:29;;22830:1;22840:195;22854:6;22851:1;22848:13;22840:195;;;22919:13;;-1:-1:-1;;;;;22915:39:1;22903:52;;23010:15;;;;22975:12;;;;22951:1;22869:9;22840:195;;;-1:-1:-1;;;;;;;23091:32:1;;;;23086:2;23071:18;;23064:60;-1:-1:-1;;;23155:3:1;23140:19;23133:35;23052:3;22194:980;-1:-1:-1;;;22194:980:1:o;23799:306::-;23887:6;23895;23903;23956:2;23944:9;23935:7;23931:23;23927:32;23924:52;;;23972:1;23969;23962:12;23924:52;24001:9;23995:16;23985:26;;24051:2;24040:9;24036:18;24030:25;24020:35;;24095:2;24084:9;24080:18;24074:25;24064:35;;23799:306;;;;;:::o

Swarm Source

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