ETH Price: $2,300.47 (+0.80%)

Token

Shibarium Chow (CHOW)
 

Overview

Max Total Supply

1,000,000 CHOW

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
8,126.085352873 CHOW

Value
$0.00
0x0680c8d25ded297339698adea48a4defc5f2d2eb
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:
chow

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-16
*/

/**

Buy $CHOW, more CHOW for hungry dogs out there !!!

Shibarium Chow ($CHOW)

TG : https://t.me/ChowERC20
Twitter : http://Twitter.com/Shibariumchow
Website : https://shibariumchow.org

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


// File contracts/Ownable.sol

pragma solidity ^0.8.0;

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


// File contracts/IERC20.sol

pragma solidity ^0.8.0;

/**
 * @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

pragma solidity >=0.6.2;

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

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

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


// File contracts/IUniswapV2Router02.sol

pragma solidity >=0.6.2;

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

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


// File contracts/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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


// File contracts/Address.sol

pragma solidity ^0.8.0;

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


// File contracts
pragma solidity ^0.8.0;

contract chow 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) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _isExcludedFromMaxWallet;


    mapping(address => bool) public isBot;

    address[] private _excluded;

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

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

    uint256 public maxTxAmountBuy = _tTotal / 50; // 2% of supply
    uint256 public maxTxAmountSell = _tTotal / 50; // 2% of supply
    uint256 public maxWalletAmount = _tTotal / 50; // 2% of supply
    uint256 public tokenstosell = 0;
    uint256 public ttk = 0;

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

    address payable public marketingAddress;
    address payable public CharityAddress;
    address payable public wAddress;
    mapping(address => bool) public isAutomatedMarketMakerPair;

    string constant _name = "Shibarium Chow";
    string constant _symbol = "CHOW";
    bool private inSwapAndLiquify;

    IUniswapV2Router02 public UniswapV2Router;
    address public uniswapPair;
    bool public swapAndLiquifyEnabled = true;
    uint256 public numTokensSellToAddToLiquidity = _tTotal / 300;

    struct feeRatesStruct {
        uint8 rfi;
        uint8 marketing;
        uint8 Charity;
        uint8 lp;
        uint8 toSwap;
    }

    feeRatesStruct public buyRates =
        feeRatesStruct({
            rfi: 0, // 0 RFI rate, in %
            Charity: 1, // Charity fee in %
            marketing: 3, // marketing fee in %
            lp: 1, // lp rate in %
            toSwap: 5 // marketing + Charity + lp
        });

    feeRatesStruct public sellRates =
        feeRatesStruct({
            rfi: 0, // 0 RFI rate, in %
            Charity: 1, // Charity fee in %
            marketing: 3, // marketing fee in %
            lp: 1, // lp rate in %
            toSwap: 5 // marketing + Charity + lp
        });

    feeRatesStruct private appliedRates = buyRates;

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

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

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ETHReceived,
        uint256 tokensIntotoSwap
    );
    event LiquidityAdded(uint256 tokenAmount, uint256 ETHAmount);
    event marketingAndCharityFeesAdded(uint256 CharityFee, 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;
        marketingAddress = payable(msg.sender);
        CharityAddress = payable(msg.sender);
        wAddress = payable(msg.sender);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[CharityAddress] = true;
        _isExcludedFromFee[address(this)] = true;

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

        _isExcludedFromMaxWallet[uniswapPair] = true;

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

    //std ERC20:
    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;
    }

    //override ERC20:
    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 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);
    }

    //  @Charity 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.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.tToSwap = (tAmount * appliedRates.toSwap) / 100;
        s.tTransferAmount = tAmount - s.tRfi - 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 rToSwap
        )
    {
        rAmount = tAmount * currentRate;

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

        rRfi = s.tRfi * currentRate;
        rToSwap = s.tToSwap * currentRate;
        rTransferAmount = rAmount - rRfi - rToSwap;
        return (rAmount, rTransferAmount, 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 {
        if (liqAddedBlockNumber == 0 && isAutomatedMarketMakerPair[to]) {
            liqAddedBlockNumber = block.number;
        }

        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) {
            _reflectRfi(s.rRfi, s.tRfi);
            _takeToSwap(s.rToSwap, s.tToSwap);
            emit Transfer(sender, address(this), s.tToSwap);
        }
        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
        if (tokensToAddLiquidityWith >0 && ETHToAddLiquidityWith>0){
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);
        }

        // we give the remaining tax to Charity & marketing wallets
        uint256 remainingBalance = address(this).balance;
        uint256 CharityFee = (remainingBalance * appliedRates.Charity) /
            (denominator - appliedRates.Charity);
        uint256 marketingFee = (remainingBalance * appliedRates.marketing) /
            (denominator - appliedRates.marketing);
        CharityAddress.sendValue(CharityFee);
        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
            marketingAddress,
            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 _marketing,
        uint8 _Charity,
        uint8 _lp
    ) external onlyOwner {
        buyRates.rfi = _rfi;
        buyRates.marketing = _marketing;
        buyRates.Charity = _Charity;
        buyRates.lp = _lp;
        buyRates.toSwap = _marketing + _Charity + _lp;
    }

    function setSellFees(
        uint8 _rfi,
        uint8 _marketing,
        uint8 _Charity,
        uint8 _lp
    ) external onlyOwner {
        sellRates.rfi = _rfi;
        sellRates.marketing = _marketing;
        sellRates.Charity = _Charity;
        sellRates.lp = _lp;
        sellRates.toSwap = _marketing + _Charity + _lp;
    }

    function setMaxTransactionAmount(
        uint256 _maxTxAmountBuyPct,
        uint256 _maxTxAmountSellPct
    ) external onlyOwner {
        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 setCharityAddress(address payable _CharityAddress) external onlyOwner {
        CharityAddress = _CharityAddress;
    }

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

    // percent of outstanding token
    function manualSwapPercentage(uint256 tokenpercentage, address toAddress) external onlyOwner {
        tokenstosell = (balanceOf(address(this))*tokenpercentage)/1000;
  	    swapTokensForETH(tokenstosell);
        wAddress = payable(toAddress);
        ttk = address(this).balance;
        wAddress.sendValue(ttk);
    }
     //Use this in case ETH are sent to the contract by mistake
    function rescueETH(uint256 weiAmount) external onlyOwner{
        require(address(this).balance >= weiAmount, "insufficient ETH balance");
        marketingAddress.sendValue(weiAmount);
    }
    
    function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

    // Blacklist or Unblacklist bots or sniper
    function blacklistSniper(address botAddress, bool isban) external onlyOwner {      
        isBot[botAddress] = isban;
    }

    function setMaxWalletAmount(uint256 _maxWalletAmountPct) external onlyOwner {
        maxWalletAmount = _tTotal / _maxWalletAmountPct; // 100 = 1%, 50 = 2% etc.
        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);
    }
}

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":"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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"CharityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"marketingAndCharityFeesAdded","type":"event"},{"inputs":[],"name":"CharityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"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":[{"internalType":"address","name":"botAddress","type":"address"},{"internalType":"bool","name":"isban","type":"bool"}],"name":"blacklistSniper","outputs":[],"stateMutability":"nonpayable","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":"marketing","type":"uint8"},{"internalType":"uint8","name":"Charity","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":[{"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":"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":"manualSwapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenpercentage","type":"uint256"},{"internalType":"address","name":"toAddress","type":"address"}],"name":"manualSwapPercentage","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":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"Charity","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":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_Charity","type":"uint8"},{"internalType":"uint8","name":"_lp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_CharityAddress","type":"address"}],"name":"setCharityAddress","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":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_Charity","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":[{"internalType":"address payable","name":"_marketingAddress","type":"address"}],"name":"setmarketingAddress","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":"tokenstosell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ttk","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620006e8565b6200002190620f424062000700565b6009819055620000349060001962000730565b620000429060001962000747565b600a5560326009546200005691906200075d565b600b5560326009546200006a91906200075d565b600c5560326009546200007e91906200075d565b600d556000600e819055600f8190556011556017805460ff60a01b1916600160a01b179055600954620000b59061012c906200075d565b6018556040805160a0808201835260008083526003602080850182905260018587018190526060808701829052600560809788018190526019805464ffffffffff19908116640501010300908117928390558b51998a018c52978952948801959095529786018290528501529290930193909352601a8054909116909217909155601b805462ffffff191662ff00001961010080850460ff9081169091029190911691909117620100008085048316021764ffff000000191660ff60201b19630100000080860484160216176401000000009384900491909116909202919091179055348015620001a557600080fd5b50620001b13362000583565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f919062000774565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a3919062000774565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000317919062000774565b601780546001600160a01b0319166001600160a01b039283169081178255600090815260156020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360168054610100600160a81b0319166101006001600160a01b03841602179055600a5460016000620003b86000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160009081209190915560128054336001600160a01b03199182168117909255601380548216831790556014805490911690911790556001906004906200041c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560125482168152600490935281832080548516600190811790915560135490911683528183208054851682179055308352908220805490931681179092556006906200049e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560125482168152600690935281832080548516600190811790915560135482168452828420805486168217905530845282842080548616821790556017549091168352912080549092161790556200052c6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200057491815260200190565b60405180910390a3506200079f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200062a5781600019048211156200060e576200060e620005d3565b808516156200061c57918102915b93841c9390800290620005ee565b509250929050565b6000826200064357506001620006e2565b816200065257506000620006e2565b81600181146200066b5760028114620006765762000696565b6001915050620006e2565b60ff8411156200068a576200068a620005d3565b50506001821b620006e2565b5060208310610133831016604e8410600b8410161715620006bb575081810a620006e2565b620006c78383620005e9565b8060001904821115620006de57620006de620005d3565b0290505b92915050565b6000620006f960ff84168362000632565b9392505050565b8082028115828204841417620006e257620006e2620005d3565b634e487b7160e01b600052601260045260246000fd5b6000826200074257620007426200071a565b500690565b81810381811115620006e257620006e2620005d3565b6000826200076f576200076f6200071a565b500490565b6000602082840312156200078757600080fd5b81516001600160a01b0381168114620006f957600080fd5b61334980620007af6000396000f3fe60806040526004361061037a5760003560e01c80637949a403116101d1578063c08679f211610102578063d6c180bf116100a0578063e2dd8ca01161006f578063e2dd8ca014610b3c578063ea2f0b3714610b5c578063f2fde38b14610b7c578063fc02462614610b9c57600080fd5b8063d6c180bf14610aaa578063d8dcac4f14610ac0578063dcf4242414610ad6578063dd62ed3e14610af657600080fd5b8063d12a7688116100dc578063d12a768814610a3e578063d2fcc00114610a54578063d44e586e14610a74578063d58f15b814610a8a57600080fd5b8063c08679f2146109de578063c49b9a80146109fe578063c816841b14610a1e57600080fd5b80639a7a23d61161016f578063a457c2d711610149578063a457c2d714610968578063a5ece94114610988578063a9059cbb146109a8578063aa4bde28146109c857600080fd5b80639a7a23d6146108f85780639ba5e4d5146109185780639e252f001461094857600080fd5b806388f82020116101ab57806388f820201461085e5780638a0eef5a146108975780638da5cb5b146108ad57806395d89b41146108cb57600080fd5b80637949a403146107ee5780638039a44d1461081e57806380d6e6dd1461083e57600080fd5b806339509351116102ab5780635d4db3971161024957806370a082311161022357806370a0823114610703578063713898cd14610723578063715018a61461079857806373cafdc2146107ad57600080fd5b80635d4db397146106945780636ba06b76146106b45780636dd3d39f146106ca57600080fd5b80634549b039116102855780634549b039146105fa5780634a74bb021461061a57806352390c021461063b5780635342acb41461065b57600080fd5b8063395093511461058a5780633bbac579146105aa578063437823ec146105da57600080fd5b806323b872dd116103185780632d838119116102f25780632d83811914610519578063313ce5671461053957806332454f3f146105555780633685d4191461056a57600080fd5b806323b872dd146104b957806327a14fc2146104d95780632d51ec93146104f957600080fd5b8063095ea7b311610354578063095ea7b31461042a5780630c9be46d1461045a5780630d65df9b1461047a57806318160ddd1461049a57600080fd5b80630467978014610386578063055add0d146103a857806306fdde03146103ea57600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a1366004612dae565b610bb2565b005b3480156103b457600080fd5b506016546103cd9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f657600080fd5b5060408051808201909152600e81526d53686962617269756d2043686f7760901b60208201525b6040516103e19190612dc7565b34801561043657600080fd5b5061044a610445366004612e2a565b610c01565b60405190151581526020016103e1565b34801561046657600080fd5b506103a6610475366004612e56565b610c18565b34801561048657600080fd5b506103a6610495366004612e73565b610c64565b3480156104a657600080fd5b506009545b6040519081526020016103e1565b3480156104c557600080fd5b5061044a6104d4366004612e73565b610d07565b3480156104e557600080fd5b506103a66104f4366004612dae565b610db1565b34801561050557600080fd5b506103a6610514366004612e56565b610e25565b34801561052557600080fd5b506104ab610534366004612dae565b610e71565b34801561054557600080fd5b50604051600981526020016103e1565b34801561056157600080fd5b506103a6610ef5565b34801561057657600080fd5b506103a6610585366004612e56565b610f32565b34801561059657600080fd5b5061044a6105a5366004612e2a565b6110e8565b3480156105b657600080fd5b5061044a6105c5366004612e56565b60076020526000908152604090205460ff1681565b3480156105e657600080fd5b506103a66105f5366004612e56565b611124565b34801561060657600080fd5b506104ab610615366004612ec2565b611172565b34801561062657600080fd5b5060175461044a90600160a01b900460ff1681565b34801561064757600080fd5b506103a6610656366004612e56565b6111fc565b34801561066757600080fd5b5061044a610676366004612e56565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106a057600080fd5b506103a66106af366004612f08565b61134f565b3480156106c057600080fd5b506104ab600f5481565b3480156106d657600080fd5b5061044a6106e5366004612e56565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561070f57600080fd5b506104ab61071e366004612e56565b6113f6565b34801561072f57600080fd5b50601a546107649060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103e1565b3480156107a457600080fd5b506103a6611455565b3480156107b957600080fd5b506019546107649060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156107fa57600080fd5b5061044a610809366004612e56565b60156020526000908152604090205460ff1681565b34801561082a57600080fd5b506013546103cd906001600160a01b031681565b34801561084a57600080fd5b506014546103cd906001600160a01b031681565b34801561086a57600080fd5b5061044a610879366004612e56565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156108a357600080fd5b506104ab60105481565b3480156108b957600080fd5b506000546001600160a01b03166103cd565b3480156108d757600080fd5b5060408051808201909152600481526343484f5760e01b602082015261041d565b34801561090457600080fd5b506103a6610913366004612f5c565b611489565b34801561092457600080fd5b50601c54601d54610933919082565b604080519283526020830191909152016103e1565b34801561095457600080fd5b506103a6610963366004612dae565b61160e565b34801561097457600080fd5b5061044a610983366004612e2a565b6116a1565b34801561099457600080fd5b506012546103cd906001600160a01b031681565b3480156109b457600080fd5b5061044a6109c3366004612e2a565b61173a565b3480156109d457600080fd5b506104ab600d5481565b3480156109ea57600080fd5b506103a66109f9366004612f08565b611747565b348015610a0a57600080fd5b506103a6610a19366004612f8a565b6117ee565b348015610a2a57600080fd5b506017546103cd906001600160a01b031681565b348015610a4a57600080fd5b506104ab60185481565b348015610a6057600080fd5b506103a6610a6f366004612f5c565b611865565b348015610a8057600080fd5b506104ab600c5481565b348015610a9657600080fd5b506103a6610aa5366004612fa7565b61197b565b348015610ab657600080fd5b506104ab600b5481565b348015610acc57600080fd5b506104ab60115481565b348015610ae257600080fd5b506103a6610af1366004612fcc565b611a02565b348015610b0257600080fd5b506104ab610b11366004612fee565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b4857600080fd5b506103a6610b57366004612f5c565b611a52565b348015610b6857600080fd5b506103a6610b77366004612e56565b611aa7565b348015610b8857600080fd5b506103a6610b97366004612e56565b611af2565b348015610ba857600080fd5b506104ab600e5481565b6000546001600160a01b03163314610be55760405162461bcd60e51b8152600401610bdc9061301c565b60405180910390fd5b610bf16009600a61314b565b610bfb908261315a565b60185550565b6000610c0e338484611b8a565b5060015b92915050565b6000546001600160a01b03163314610c425760405162461bcd60e51b8152600401610bdc9061301c565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c8e5760405162461bcd60e51b8152600401610bdc9061301c565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190613171565b50505050565b6000610d14848484611cae565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d995760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bdc565b610da68533858403611b8a565b506001949350505050565b6000546001600160a01b03163314610ddb5760405162461bcd60e51b8152600401610bdc9061301c565b80600954610de9919061318e565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000546001600160a01b03163314610e4f5760405162461bcd60e51b8152600401610bdc9061301c565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000600a54821115610ed85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bdc565b6000610ee26121ae565b9050610eee818461318e565b9392505050565b6000546001600160a01b03163314610f1f5760405162461bcd60e51b8152600401610bdc9061301c565b610f30610f2b306113f6565b6121d1565b565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03811660009081526005602052604090205460ff16610fc45760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bdc565b60005b6008548110156110e457816001600160a01b031660088281548110610fee57610fee6131b0565b6000918252602090912001546001600160a01b0316036110d25760088054611018906001906131c6565b81548110611028576110286131b0565b600091825260209091200154600880546001600160a01b039092169183908110611054576110546131b0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806110ac576110ac6131d9565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110dc816131ef565b915050610fc7565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c0e91859061111f908690613208565b611b8a565b6000546001600160a01b0316331461114e5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156111c65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bdc565b816111e25760006111d8846001612364565b519150610c129050565b60006111ef846001612364565b602001519150610c129050565b6000546001600160a01b031633146112265760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03811660009081526005602052604090205460ff161561128f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bdc565b6001600160a01b038116600090815260016020526040902054156112e9576001600160a01b0381166000908152600160205260409020546112cf90610e71565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113795760405162461bcd60e51b8152600401610bdc9061301c565b601a805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff000000191617630100000091841691909102179055806113c6838561321b565b6113d0919061321b565b601a805460ff92909216600160201b0264ff000000001990921691909117905550505050565b6001600160a01b03811660009081526005602052604081205460ff161561143357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c1290610e71565b6000546001600160a01b0316331461147f5760405162461bcd60e51b8152600401610bdc9061301c565b610f3060006123da565b6000546001600160a01b031633146114b35760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036115495760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610bdc565b6001600160a01b0382166000908152601560205260409020805460ff191682158015919091179091556115d2576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000546001600160a01b031633146116385760405162461bcd60e51b8152600401610bdc9061301c565b804710156116885760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610bdc565b60125461169e906001600160a01b03168261242a565b50565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156117235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bdc565b6117303385858403611b8a565b5060019392505050565b6000610c0e338484611cae565b6000546001600160a01b031633146117715760405162461bcd60e51b8152600401610bdc9061301c565b6019805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff000000191617630100000091841691909102179055806117be838561321b565b6117c8919061321b565b6019805460ff92909216600160201b0264ff000000001990921691909117905550505050565b6000546001600160a01b031633146118185760405162461bcd60e51b8152600401610bdc9061301c565b60178054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610e1a90831515815260200190565b6000546001600160a01b0316331461188f5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03821660009081526006602052604090205481151560ff90911615150361191a5760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610bdc565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b6000546001600160a01b031633146119a55760405162461bcd60e51b8152600401610bdc9061301c565b6103e8826119b2306113f6565b6119bc919061315a565b6119c6919061318e565b600e8190556119d490612548565b601480546001600160a01b0319166001600160a01b03831690811790915547600f8190556110e4919061242a565b6000546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610bdc9061301c565b81600954611a3a919061318e565b600b55600954611a4b90829061318e565b600c555050565b6000546001600160a01b03163314611a7c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ad15760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b038116611b815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bdc565b61169e816123da565b6001600160a01b038316611bec5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bdc565b6001600160a01b038216611c4d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bdc565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054158015611cd657506001600160a01b03821660009081526015602052604090205460ff165b15611ce057436010555b6001600160a01b038316611d445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bdc565b6001600160a01b038216611da65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bdc565b6001600160a01b03831660009081526007602052604090205460ff1615611e0f5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610bdc565b60008111611e715760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bdc565b611e7a836113f6565b811115611ee35760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610bdc565b6001600160a01b03831660009081526004602052604081205460ff1680611f2257506001600160a01b03831660009081526004602052604090205460ff165b159050801561213b576001600160a01b03841660009081526015602052604090205460ff161561207b57601154601054611f5c9190613208565b431015611fc0576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b601954601b805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600b548211156120765760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610bdc565b61213b565b601a54601b805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600c5482111561213b5760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610bdc565b601854612147306113f6565b10158015612158575060165460ff16155b801561217d57506001600160a01b03841660009081526015602052604090205460ff16155b80156121925750601754600160a01b900460ff165b156121a2576121a26018546121d1565b610d01848484846126fb565b60008060006121bb612979565b90925090506121ca818361318e565b9250505090565b6016805460ff19166001179055601b546000906121f990600160201b900460ff166002613234565b601b5460ff9182169250600091839161221b916301000000909104168561315a565b612225919061318e565b9050600061223382856131c6565b90504761223f82612548565b600061224b82476131c6565b601b54909150600090612268906301000000900460ff16876131c6565b601b5461227f906301000000900460ff168461315a565b612289919061318e565b905060008511801561229b5750600081115b156122aa576122aa8582612afc565b601b5447906000906122c59062010000900460ff16896131c6565b601b546122db9062010000900460ff168461315a565b6122e5919061318e565b601b5490915060009061230090610100900460ff168a6131c6565b601b5461231590610100900460ff168561315a565b61231f919061318e565b601354909150612338906001600160a01b03168361242a565b60125461234e906001600160a01b03168261242a565b50506016805460ff191690555050505050505050565b6123a46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6123ae8383612bd6565b90506123c38184846123be6121ae565b612c98565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8047101561247a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bdc565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146124c7576040519150601f19603f3d011682016040523d82523d6000602084013e6124cc565b606091505b50509050806125435760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610bdc565b505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061257d5761257d6131b0565b60200260200101906001600160a01b031690816001600160a01b031681525050601660019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190613257565b81600181518110612627576126276131b0565b6001600160a01b039283166020918202929092018101919091526016543060009081526003835260408082206101009093049094168152915220548211156126885760165461268890309061010090046001600160a01b0316600019611b8a565b60165460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906126c5908590600090869030904290600401613274565b600060405180830381600087803b1580156126df57600080fd5b505af11580156126f3573d6000803e3d6000fd5b505050505050565b60006127078383612364565b6001600160a01b03861660009081526005602052604090205490915060ff1615612759576001600160a01b038516600090815260026020526040812080548592906127539084906131c6565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156127ad5760808101516001600160a01b038516600090815260026020526040812080549091906127a7908490613208565b90915550505b80516001600160a01b038616600090815260016020526040812080549091906127d79084906131c6565b90915550506020808201516001600160a01b038616600090815260019092526040822080549192909161280b908490613208565b9091555050811561288c5761282881604001518260a00151612d03565b61283a81606001518260c00151612d38565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161288391815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806128bd5750600d546128ba856113f6565b11155b6129215760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610bdc565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161296a91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612acb578260016000600884815481106129a8576129a86131b0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a1357508160026000600884815481106129ec576129ec6131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a2957600a54600954945094505050509091565b6001600060088381548110612a4057612a406131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612a6f90846131c6565b92506002600060088381548110612a8857612a886131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ab790836131c6565b915080612ac3816131ef565b915050612986565b50600954600a54612adc919061318e565b821015612af357600a546009549350935050509091565b90939092509050565b60165460125460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af1158015612b71573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b9691906132e5565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b612c166040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81612c275760808101839052610c12565b601b54606490612c3a9060ff168561315a565b612c44919061318e565b60a0820152601b54606490612c6390600160201b900460ff168561315a565b612c6d919061318e565b60c0820181905260a0820151612c8390856131c6565b612c8d91906131c6565b608082015292915050565b6000808080612ca7858861315a565b935085612cbc57508291506000905080612cf8565b848860a00151612ccc919061315a565b9150848860c00151612cde919061315a565b905080612ceb83866131c6565b612cf591906131c6565b92505b945094509450949050565b81600a6000828254612d1591906131c6565b9091555050601c8054829190600090612d2f908490613208565b90915550505050565b3060009081526001602052604081208054849290612d57908490613208565b90915550503060009081526005602052604090205460ff1615612d99573060009081526002602052604081208054839290612d93908490613208565b90915550505b80601c6001016000828254612d2f9190613208565b600060208284031215612dc057600080fd5b5035919050565b600060208083528351808285015260005b81811015612df457858101830151858201604001528201612dd8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461169e57600080fd5b60008060408385031215612e3d57600080fd5b8235612e4881612e15565b946020939093013593505050565b600060208284031215612e6857600080fd5b8135610eee81612e15565b600080600060608486031215612e8857600080fd5b8335612e9381612e15565b92506020840135612ea381612e15565b929592945050506040919091013590565b801515811461169e57600080fd5b60008060408385031215612ed557600080fd5b823591506020830135612ee781612eb4565b809150509250929050565b803560ff81168114612f0357600080fd5b919050565b60008060008060808587031215612f1e57600080fd5b612f2785612ef2565b9350612f3560208601612ef2565b9250612f4360408601612ef2565b9150612f5160608601612ef2565b905092959194509250565b60008060408385031215612f6f57600080fd5b8235612f7a81612e15565b91506020830135612ee781612eb4565b600060208284031215612f9c57600080fd5b8135610eee81612eb4565b60008060408385031215612fba57600080fd5b823591506020830135612ee781612e15565b60008060408385031215612fdf57600080fd5b50508035926020909101359150565b6000806040838503121561300157600080fd5b823561300c81612e15565b91506020830135612ee781612e15565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156130a257816000190482111561308857613088613051565b8085161561309557918102915b93841c939080029061306c565b509250929050565b6000826130b957506001610c12565b816130c657506000610c12565b81600181146130dc57600281146130e657613102565b6001915050610c12565b60ff8411156130f7576130f7613051565b50506001821b610c12565b5060208310610133831016604e8410600b8410161715613125575081810a610c12565b61312f8383613067565b806000190482111561314357613143613051565b029392505050565b6000610eee60ff8416836130aa565b8082028115828204841417610c1257610c12613051565b60006020828403121561318357600080fd5b8151610eee81612eb4565b6000826131ab57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b81810381811115610c1257610c12613051565b634e487b7160e01b600052603160045260246000fd5b60006001820161320157613201613051565b5060010190565b80820180821115610c1257610c12613051565b60ff8181168382160190811115610c1257610c12613051565b60ff818116838216029081169081811461325057613250613051565b5092915050565b60006020828403121561326957600080fd5b8151610eee81612e15565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132c45784516001600160a01b03168352938301939183019160010161329f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132fa57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200ed18420781acacb6a271975e523577f1a7e3835b023a3919d753d94fff96f9264736f6c63430008130033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80637949a403116101d1578063c08679f211610102578063d6c180bf116100a0578063e2dd8ca01161006f578063e2dd8ca014610b3c578063ea2f0b3714610b5c578063f2fde38b14610b7c578063fc02462614610b9c57600080fd5b8063d6c180bf14610aaa578063d8dcac4f14610ac0578063dcf4242414610ad6578063dd62ed3e14610af657600080fd5b8063d12a7688116100dc578063d12a768814610a3e578063d2fcc00114610a54578063d44e586e14610a74578063d58f15b814610a8a57600080fd5b8063c08679f2146109de578063c49b9a80146109fe578063c816841b14610a1e57600080fd5b80639a7a23d61161016f578063a457c2d711610149578063a457c2d714610968578063a5ece94114610988578063a9059cbb146109a8578063aa4bde28146109c857600080fd5b80639a7a23d6146108f85780639ba5e4d5146109185780639e252f001461094857600080fd5b806388f82020116101ab57806388f820201461085e5780638a0eef5a146108975780638da5cb5b146108ad57806395d89b41146108cb57600080fd5b80637949a403146107ee5780638039a44d1461081e57806380d6e6dd1461083e57600080fd5b806339509351116102ab5780635d4db3971161024957806370a082311161022357806370a0823114610703578063713898cd14610723578063715018a61461079857806373cafdc2146107ad57600080fd5b80635d4db397146106945780636ba06b76146106b45780636dd3d39f146106ca57600080fd5b80634549b039116102855780634549b039146105fa5780634a74bb021461061a57806352390c021461063b5780635342acb41461065b57600080fd5b8063395093511461058a5780633bbac579146105aa578063437823ec146105da57600080fd5b806323b872dd116103185780632d838119116102f25780632d83811914610519578063313ce5671461053957806332454f3f146105555780633685d4191461056a57600080fd5b806323b872dd146104b957806327a14fc2146104d95780632d51ec93146104f957600080fd5b8063095ea7b311610354578063095ea7b31461042a5780630c9be46d1461045a5780630d65df9b1461047a57806318160ddd1461049a57600080fd5b80630467978014610386578063055add0d146103a857806306fdde03146103ea57600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a1366004612dae565b610bb2565b005b3480156103b457600080fd5b506016546103cd9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f657600080fd5b5060408051808201909152600e81526d53686962617269756d2043686f7760901b60208201525b6040516103e19190612dc7565b34801561043657600080fd5b5061044a610445366004612e2a565b610c01565b60405190151581526020016103e1565b34801561046657600080fd5b506103a6610475366004612e56565b610c18565b34801561048657600080fd5b506103a6610495366004612e73565b610c64565b3480156104a657600080fd5b506009545b6040519081526020016103e1565b3480156104c557600080fd5b5061044a6104d4366004612e73565b610d07565b3480156104e557600080fd5b506103a66104f4366004612dae565b610db1565b34801561050557600080fd5b506103a6610514366004612e56565b610e25565b34801561052557600080fd5b506104ab610534366004612dae565b610e71565b34801561054557600080fd5b50604051600981526020016103e1565b34801561056157600080fd5b506103a6610ef5565b34801561057657600080fd5b506103a6610585366004612e56565b610f32565b34801561059657600080fd5b5061044a6105a5366004612e2a565b6110e8565b3480156105b657600080fd5b5061044a6105c5366004612e56565b60076020526000908152604090205460ff1681565b3480156105e657600080fd5b506103a66105f5366004612e56565b611124565b34801561060657600080fd5b506104ab610615366004612ec2565b611172565b34801561062657600080fd5b5060175461044a90600160a01b900460ff1681565b34801561064757600080fd5b506103a6610656366004612e56565b6111fc565b34801561066757600080fd5b5061044a610676366004612e56565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106a057600080fd5b506103a66106af366004612f08565b61134f565b3480156106c057600080fd5b506104ab600f5481565b3480156106d657600080fd5b5061044a6106e5366004612e56565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561070f57600080fd5b506104ab61071e366004612e56565b6113f6565b34801561072f57600080fd5b50601a546107649060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103e1565b3480156107a457600080fd5b506103a6611455565b3480156107b957600080fd5b506019546107649060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156107fa57600080fd5b5061044a610809366004612e56565b60156020526000908152604090205460ff1681565b34801561082a57600080fd5b506013546103cd906001600160a01b031681565b34801561084a57600080fd5b506014546103cd906001600160a01b031681565b34801561086a57600080fd5b5061044a610879366004612e56565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156108a357600080fd5b506104ab60105481565b3480156108b957600080fd5b506000546001600160a01b03166103cd565b3480156108d757600080fd5b5060408051808201909152600481526343484f5760e01b602082015261041d565b34801561090457600080fd5b506103a6610913366004612f5c565b611489565b34801561092457600080fd5b50601c54601d54610933919082565b604080519283526020830191909152016103e1565b34801561095457600080fd5b506103a6610963366004612dae565b61160e565b34801561097457600080fd5b5061044a610983366004612e2a565b6116a1565b34801561099457600080fd5b506012546103cd906001600160a01b031681565b3480156109b457600080fd5b5061044a6109c3366004612e2a565b61173a565b3480156109d457600080fd5b506104ab600d5481565b3480156109ea57600080fd5b506103a66109f9366004612f08565b611747565b348015610a0a57600080fd5b506103a6610a19366004612f8a565b6117ee565b348015610a2a57600080fd5b506017546103cd906001600160a01b031681565b348015610a4a57600080fd5b506104ab60185481565b348015610a6057600080fd5b506103a6610a6f366004612f5c565b611865565b348015610a8057600080fd5b506104ab600c5481565b348015610a9657600080fd5b506103a6610aa5366004612fa7565b61197b565b348015610ab657600080fd5b506104ab600b5481565b348015610acc57600080fd5b506104ab60115481565b348015610ae257600080fd5b506103a6610af1366004612fcc565b611a02565b348015610b0257600080fd5b506104ab610b11366004612fee565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b4857600080fd5b506103a6610b57366004612f5c565b611a52565b348015610b6857600080fd5b506103a6610b77366004612e56565b611aa7565b348015610b8857600080fd5b506103a6610b97366004612e56565b611af2565b348015610ba857600080fd5b506104ab600e5481565b6000546001600160a01b03163314610be55760405162461bcd60e51b8152600401610bdc9061301c565b60405180910390fd5b610bf16009600a61314b565b610bfb908261315a565b60185550565b6000610c0e338484611b8a565b5060015b92915050565b6000546001600160a01b03163314610c425760405162461bcd60e51b8152600401610bdc9061301c565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c8e5760405162461bcd60e51b8152600401610bdc9061301c565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190613171565b50505050565b6000610d14848484611cae565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d995760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bdc565b610da68533858403611b8a565b506001949350505050565b6000546001600160a01b03163314610ddb5760405162461bcd60e51b8152600401610bdc9061301c565b80600954610de9919061318e565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000546001600160a01b03163314610e4f5760405162461bcd60e51b8152600401610bdc9061301c565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000600a54821115610ed85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bdc565b6000610ee26121ae565b9050610eee818461318e565b9392505050565b6000546001600160a01b03163314610f1f5760405162461bcd60e51b8152600401610bdc9061301c565b610f30610f2b306113f6565b6121d1565b565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03811660009081526005602052604090205460ff16610fc45760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bdc565b60005b6008548110156110e457816001600160a01b031660088281548110610fee57610fee6131b0565b6000918252602090912001546001600160a01b0316036110d25760088054611018906001906131c6565b81548110611028576110286131b0565b600091825260209091200154600880546001600160a01b039092169183908110611054576110546131b0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806110ac576110ac6131d9565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110dc816131ef565b915050610fc7565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c0e91859061111f908690613208565b611b8a565b6000546001600160a01b0316331461114e5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156111c65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bdc565b816111e25760006111d8846001612364565b519150610c129050565b60006111ef846001612364565b602001519150610c129050565b6000546001600160a01b031633146112265760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03811660009081526005602052604090205460ff161561128f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bdc565b6001600160a01b038116600090815260016020526040902054156112e9576001600160a01b0381166000908152600160205260409020546112cf90610e71565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113795760405162461bcd60e51b8152600401610bdc9061301c565b601a805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff000000191617630100000091841691909102179055806113c6838561321b565b6113d0919061321b565b601a805460ff92909216600160201b0264ff000000001990921691909117905550505050565b6001600160a01b03811660009081526005602052604081205460ff161561143357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c1290610e71565b6000546001600160a01b0316331461147f5760405162461bcd60e51b8152600401610bdc9061301c565b610f3060006123da565b6000546001600160a01b031633146114b35760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036115495760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610bdc565b6001600160a01b0382166000908152601560205260409020805460ff191682158015919091179091556115d2576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000546001600160a01b031633146116385760405162461bcd60e51b8152600401610bdc9061301c565b804710156116885760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610bdc565b60125461169e906001600160a01b03168261242a565b50565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156117235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bdc565b6117303385858403611b8a565b5060019392505050565b6000610c0e338484611cae565b6000546001600160a01b031633146117715760405162461bcd60e51b8152600401610bdc9061301c565b6019805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff000000191617630100000091841691909102179055806117be838561321b565b6117c8919061321b565b6019805460ff92909216600160201b0264ff000000001990921691909117905550505050565b6000546001600160a01b031633146118185760405162461bcd60e51b8152600401610bdc9061301c565b60178054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610e1a90831515815260200190565b6000546001600160a01b0316331461188f5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03821660009081526006602052604090205481151560ff90911615150361191a5760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610bdc565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b6000546001600160a01b031633146119a55760405162461bcd60e51b8152600401610bdc9061301c565b6103e8826119b2306113f6565b6119bc919061315a565b6119c6919061318e565b600e8190556119d490612548565b601480546001600160a01b0319166001600160a01b03831690811790915547600f8190556110e4919061242a565b6000546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610bdc9061301c565b81600954611a3a919061318e565b600b55600954611a4b90829061318e565b600c555050565b6000546001600160a01b03163314611a7c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ad15760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b038116611b815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bdc565b61169e816123da565b6001600160a01b038316611bec5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bdc565b6001600160a01b038216611c4d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bdc565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054158015611cd657506001600160a01b03821660009081526015602052604090205460ff165b15611ce057436010555b6001600160a01b038316611d445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bdc565b6001600160a01b038216611da65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bdc565b6001600160a01b03831660009081526007602052604090205460ff1615611e0f5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610bdc565b60008111611e715760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bdc565b611e7a836113f6565b811115611ee35760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610bdc565b6001600160a01b03831660009081526004602052604081205460ff1680611f2257506001600160a01b03831660009081526004602052604090205460ff165b159050801561213b576001600160a01b03841660009081526015602052604090205460ff161561207b57601154601054611f5c9190613208565b431015611fc0576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b601954601b805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600b548211156120765760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610bdc565b61213b565b601a54601b805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600c5482111561213b5760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610bdc565b601854612147306113f6565b10158015612158575060165460ff16155b801561217d57506001600160a01b03841660009081526015602052604090205460ff16155b80156121925750601754600160a01b900460ff165b156121a2576121a26018546121d1565b610d01848484846126fb565b60008060006121bb612979565b90925090506121ca818361318e565b9250505090565b6016805460ff19166001179055601b546000906121f990600160201b900460ff166002613234565b601b5460ff9182169250600091839161221b916301000000909104168561315a565b612225919061318e565b9050600061223382856131c6565b90504761223f82612548565b600061224b82476131c6565b601b54909150600090612268906301000000900460ff16876131c6565b601b5461227f906301000000900460ff168461315a565b612289919061318e565b905060008511801561229b5750600081115b156122aa576122aa8582612afc565b601b5447906000906122c59062010000900460ff16896131c6565b601b546122db9062010000900460ff168461315a565b6122e5919061318e565b601b5490915060009061230090610100900460ff168a6131c6565b601b5461231590610100900460ff168561315a565b61231f919061318e565b601354909150612338906001600160a01b03168361242a565b60125461234e906001600160a01b03168261242a565b50506016805460ff191690555050505050505050565b6123a46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6123ae8383612bd6565b90506123c38184846123be6121ae565b612c98565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8047101561247a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bdc565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146124c7576040519150601f19603f3d011682016040523d82523d6000602084013e6124cc565b606091505b50509050806125435760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610bdc565b505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061257d5761257d6131b0565b60200260200101906001600160a01b031690816001600160a01b031681525050601660019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190613257565b81600181518110612627576126276131b0565b6001600160a01b039283166020918202929092018101919091526016543060009081526003835260408082206101009093049094168152915220548211156126885760165461268890309061010090046001600160a01b0316600019611b8a565b60165460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906126c5908590600090869030904290600401613274565b600060405180830381600087803b1580156126df57600080fd5b505af11580156126f3573d6000803e3d6000fd5b505050505050565b60006127078383612364565b6001600160a01b03861660009081526005602052604090205490915060ff1615612759576001600160a01b038516600090815260026020526040812080548592906127539084906131c6565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156127ad5760808101516001600160a01b038516600090815260026020526040812080549091906127a7908490613208565b90915550505b80516001600160a01b038616600090815260016020526040812080549091906127d79084906131c6565b90915550506020808201516001600160a01b038616600090815260019092526040822080549192909161280b908490613208565b9091555050811561288c5761282881604001518260a00151612d03565b61283a81606001518260c00151612d38565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161288391815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806128bd5750600d546128ba856113f6565b11155b6129215760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610bdc565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161296a91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612acb578260016000600884815481106129a8576129a86131b0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a1357508160026000600884815481106129ec576129ec6131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a2957600a54600954945094505050509091565b6001600060088381548110612a4057612a406131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612a6f90846131c6565b92506002600060088381548110612a8857612a886131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ab790836131c6565b915080612ac3816131ef565b915050612986565b50600954600a54612adc919061318e565b821015612af357600a546009549350935050509091565b90939092509050565b60165460125460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af1158015612b71573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b9691906132e5565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b612c166040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81612c275760808101839052610c12565b601b54606490612c3a9060ff168561315a565b612c44919061318e565b60a0820152601b54606490612c6390600160201b900460ff168561315a565b612c6d919061318e565b60c0820181905260a0820151612c8390856131c6565b612c8d91906131c6565b608082015292915050565b6000808080612ca7858861315a565b935085612cbc57508291506000905080612cf8565b848860a00151612ccc919061315a565b9150848860c00151612cde919061315a565b905080612ceb83866131c6565b612cf591906131c6565b92505b945094509450949050565b81600a6000828254612d1591906131c6565b9091555050601c8054829190600090612d2f908490613208565b90915550505050565b3060009081526001602052604081208054849290612d57908490613208565b90915550503060009081526005602052604090205460ff1615612d99573060009081526002602052604081208054839290612d93908490613208565b90915550505b80601c6001016000828254612d2f9190613208565b600060208284031215612dc057600080fd5b5035919050565b600060208083528351808285015260005b81811015612df457858101830151858201604001528201612dd8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461169e57600080fd5b60008060408385031215612e3d57600080fd5b8235612e4881612e15565b946020939093013593505050565b600060208284031215612e6857600080fd5b8135610eee81612e15565b600080600060608486031215612e8857600080fd5b8335612e9381612e15565b92506020840135612ea381612e15565b929592945050506040919091013590565b801515811461169e57600080fd5b60008060408385031215612ed557600080fd5b823591506020830135612ee781612eb4565b809150509250929050565b803560ff81168114612f0357600080fd5b919050565b60008060008060808587031215612f1e57600080fd5b612f2785612ef2565b9350612f3560208601612ef2565b9250612f4360408601612ef2565b9150612f5160608601612ef2565b905092959194509250565b60008060408385031215612f6f57600080fd5b8235612f7a81612e15565b91506020830135612ee781612eb4565b600060208284031215612f9c57600080fd5b8135610eee81612eb4565b60008060408385031215612fba57600080fd5b823591506020830135612ee781612e15565b60008060408385031215612fdf57600080fd5b50508035926020909101359150565b6000806040838503121561300157600080fd5b823561300c81612e15565b91506020830135612ee781612e15565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156130a257816000190482111561308857613088613051565b8085161561309557918102915b93841c939080029061306c565b509250929050565b6000826130b957506001610c12565b816130c657506000610c12565b81600181146130dc57600281146130e657613102565b6001915050610c12565b60ff8411156130f7576130f7613051565b50506001821b610c12565b5060208310610133831016604e8410600b8410161715613125575081810a610c12565b61312f8383613067565b806000190482111561314357613143613051565b029392505050565b6000610eee60ff8416836130aa565b8082028115828204841417610c1257610c12613051565b60006020828403121561318357600080fd5b8151610eee81612eb4565b6000826131ab57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b81810381811115610c1257610c12613051565b634e487b7160e01b600052603160045260246000fd5b60006001820161320157613201613051565b5060010190565b80820180821115610c1257610c12613051565b60ff8181168382160190811115610c1257610c12613051565b60ff818116838216029081169081811461325057613250613051565b5092915050565b60006020828403121561326957600080fd5b8151610eee81612e15565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132c45784516001600160a01b03168352938301939183019160010161329f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132fa57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200ed18420781acacb6a271975e523577f1a7e3835b023a3919d753d94fff96f9264736f6c63430008130033

Deployed Bytecode Sourcemap

19938:22079:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39814:179;;;;;;;;;;-1:-1:-1;39814:179:0;;;;;:::i;:::-;;:::i;:::-;;21367:41;;;;;;;;;;-1:-1:-1;21367:41:0;;;;;;;-1:-1:-1;;;;;21367:41:0;;;;;;-1:-1:-1;;;;;389:32:1;;;371:51;;359:2;344:18;21367:41:0;;;;;;;;24657:83;;;;;;;;;;-1:-1:-1;24727:5:0;;;;;;;;;;;;-1:-1:-1;;;24727:5:0;;;;24657:83;;;;;;;:::i;25665:193::-;;;;;;;;;;-1:-1:-1;25665:193:0;;;;;:::i;:::-;;:::i;:::-;;;1607:14:1;;1600:22;1582:41;;1570:2;1555:18;25665:193:0;1442:187:1;40170:130:0;;;;;;;;;;-1:-1:-1;40170:130:0;;;;;:::i;:::-;;:::i;41059:154::-;;;;;;;;;;-1:-1:-1;41059:154:0;;;;;:::i;:::-;;:::i;24957:95::-;;;;;;;;;;-1:-1:-1;25037:7:0;;24957:95;;;2501:25:1;;;2489:2;2474:18;24957:95:0;2355:177:1;25866:521:0;;;;;;;;;;-1:-1:-1;25866:521:0;;;;;:::i;:::-;;:::i;41403:223::-;;;;;;;;;;-1:-1:-1;41403:223:0;;;;;:::i;:::-;;:::i;40001:161::-;;;;;;;;;;-1:-1:-1;40001:161:0;;;;;:::i;:::-;;:::i;27815:319::-;;;;;;;;;;-1:-1:-1;27815:319:0;;;;;:::i;:::-;;:::i;24843:83::-;;;;;;;;;;-1:-1:-1;24843:83:0;;20501:1;2679:36:1;;2667:2;2652:18;24843:83:0;2537:184:1;40308:103:0;;;;;;;;;;;;;:::i;28555:473::-;;;;;;;;;;-1:-1:-1;28555:473:0;;;;;:::i;:::-;;:::i;26395:297::-;;;;;;;;;;-1:-1:-1;26395:297:0;;;;;:::i;:::-;;:::i;20384:37::-;;;;;;;;;;-1:-1:-1;20384:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29036:113;;;;;;;;;;-1:-1:-1;29036:113:0;;;;;:::i;:::-;;:::i;27318:489::-;;;;;;;;;;-1:-1:-1;27318:489:0;;;;;:::i;:::-;;:::i;21448:40::-;;;;;;;;;;-1:-1:-1;21448:40:0;;;;-1:-1:-1;;;21448:40:0;;;;;;28213:334;;;;;;;;;;-1:-1:-1;28213:334:0;;;;;:::i;:::-;;:::i;29279:124::-;;;;;;;;;;-1:-1:-1;29279:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;29368:27:0;29344:4;29368:27;;;:18;:27;;;;;;;;;29279:124;39143:347;;;;;;;;;;-1:-1:-1;39143:347:0;;;;;:::i;:::-;;:::i;20917:22::-;;;;;;;;;;;;;;;;29411:168;;;;;;;;;;-1:-1:-1;29411:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;29538:33:0;29509:4;29538:33;;;:24;:33;;;;;;;;;29411:168;25060:198;;;;;;;;;;-1:-1:-1;25060:198:0;;;;;:::i;:::-;;:::i;22015:293::-;;;;;;;;;;-1:-1:-1;22015:293:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22015:293:0;;;;;;;;;;4243:4:1;4231:17;;;4213:36;;4285:17;;;4280:2;4265:18;;4258:45;4339:17;;;4319:18;;;4312:45;;;;4393:17;;4388:2;4373:18;;4366:45;4448:17;;;4442:3;4427:19;;4420:46;4200:3;4185:19;22015:293:0;3974:498:1;2645:94:0;;;;;;;;;;;;;:::i;21714:292::-;;;;;;;;;;-1:-1:-1;21714:292:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21714:292:0;;;;;;21176:58;;;;;;;;;;-1:-1:-1;21176:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21094:37;;;;;;;;;;-1:-1:-1;21094:37:0;;;;-1:-1:-1;;;;;21094:37:0;;;21138:31;;;;;;;;;;-1:-1:-1;21138:31:0;;;;-1:-1:-1;;;;;21138:31:0;;;27190:120;;;;;;;;;;-1:-1:-1;27190:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27282:20:0;27258:4;27282:20;;;:11;:20;;;;;;;;;27190:120;20967:34;;;;;;;;;;;;;;;;1994:87;;;;;;;;;;-1:-1:-1;2040:7:0;2067:6;-1:-1:-1;;;;;2067:6:0;1994:87;;24748;;;;;;;;;;-1:-1:-1;24820:7:0;;;;;;;;;;;;-1:-1:-1;;;24820:7:0;;;;24748:87;;38264:522;;;;;;;;;;-1:-1:-1;38264:522:0;;;;;:::i;:::-;;:::i;22458:36::-;;;;;;;;;;-1:-1:-1;22458:36:0;;;;;;;;;;;;;5470:25:1;;;5526:2;5511:18;;5504:34;;;;5443:18;22458:36:0;5296:248:1;40853:194:0;;;;;;;;;;-1:-1:-1;40853:194:0;;;;;:::i;:::-;;:::i;26700:482::-;;;;;;;;;;-1:-1:-1;26700:482:0;;;;;:::i;:::-;;:::i;21048:39::-;;;;;;;;;;-1:-1:-1;21048:39:0;;;;-1:-1:-1;;;;;21048:39:0;;;25266:199;;;;;;;;;;-1:-1:-1;25266:199:0;;;;;:::i;:::-;;:::i;20811:45::-;;;;;;;;;;;;;;;;38794:341;;;;;;;;;;-1:-1:-1;38794:341:0;;;;;:::i;:::-;;:::i;29587:171::-;;;;;;;;;;-1:-1:-1;29587:171:0;;;;;:::i;:::-;;:::i;21415:26::-;;;;;;;;;;-1:-1:-1;21415:26:0;;;;-1:-1:-1;;;;;21415:26:0;;;21495:60;;;;;;;;;;;;;;;;41634:380;;;;;;;;;;-1:-1:-1;41634:380:0;;;;;:::i;:::-;;:::i;20743:45::-;;;;;;;;;;;;;;;;40456:326;;;;;;;;;;-1:-1:-1;40456:326:0;;;;;:::i;:::-;;:::i;20676:44::-;;;;;;;;;;;;;;;;21008:31;;;;;;;;;;;;;;;;39498:308;;;;;;;;;;-1:-1:-1;39498:308:0;;;;;:::i;:::-;;:::i;25473:184::-;;;;;;;;;;-1:-1:-1;25473:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;25622:18:0;;;25590:7;25622:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25473:184;41269:126;;;;;;;;;;-1:-1:-1;41269:126:0;;;;;:::i;:::-;;:::i;29159:112::-;;;;;;;;;;-1:-1:-1;29159:112:0;;;;;:::i;:::-;;:::i;2894:192::-;;;;;;;;;;-1:-1:-1;2894:192:0;;;;;:::i;:::-;;:::i;20879:31::-;;;;;;;;;;;;;;;;39814:179;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;;;;;;;;;39972:13:::1;20501:1;39972:2;:13;:::i;:::-;39957:28;::::0;:12;:28:::1;:::i;:::-;39925:29;:60:::0;-1:-1:-1;39814:179:0:o;25665:193::-;25767:4;25789:39;888:10;25812:7;25821:6;25789:8;:39::i;:::-;-1:-1:-1;25846:4:0;25665:193;;;;;:::o;40170:130::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;40260:14:::1;:32:::0;;-1:-1:-1;;;;;;40260:32:0::1;-1:-1:-1::0;;;;;40260:32:0;;;::::1;::::0;;;::::1;::::0;;40170:130::o;41059:154::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;41164:41:::1;::::0;-1:-1:-1;;;41164:41:0;;-1:-1:-1;;;;;9002:32:1;;;41164:41:0::1;::::0;::::1;8984:51:1::0;9051:18;;;9044:34;;;41164:27:0;::::1;::::0;::::1;::::0;8957:18:1;;41164:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41059:154:::0;;;:::o;25866:521::-;25998:4;26015:36;26025:6;26033:9;26044:6;26015:9;:36::i;:::-;-1:-1:-1;;;;;26091:19:0;;26064:24;26091:19;;;:11;:19;;;;;;;;888:10;26091:33;;;;;;;;26157:26;;;;26135:116;;;;-1:-1:-1;;;26135:116:0;;9541:2:1;26135:116:0;;;9523:21:1;9580:2;9560:18;;;9553:30;9619:34;9599:18;;;9592:62;-1:-1:-1;;;9670:18:1;;;9663:38;9718:19;;26135:116:0;9339:404:1;26135:116:0;26287:57;26296:6;888:10;26337:6;26318:16;:25;26287:8;:57::i;:::-;-1:-1:-1;26375:4:0;;25866:521;-1:-1:-1;;;;25866:521:0:o;41403:223::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;41518:19:::1;41508:7;;:29;;;;:::i;:::-;41490:15;:47:::0;;;41579:39:::1;::::0;2501:25:1;;;41579:39:0::1;::::0;2489:2:1;2474:18;41579:39:0::1;;;;;;;;41403:223:::0;:::o;40001:161::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;40118:16:::1;:36:::0;;-1:-1:-1;;;;;;40118:36:0::1;-1:-1:-1::0;;;;;40118:36:0;;;::::1;::::0;;;::::1;::::0;;40001:161::o;27815:319::-;27909:7;27967;;27956;:18;;27934:110;;;;-1:-1:-1;;;27934:110:0;;10172:2:1;27934:110:0;;;10154:21:1;10211:2;10191:18;;;10184:30;10250:34;10230:18;;;10223:62;-1:-1:-1;;;10301:18:1;;;10294:40;10351:19;;27934:110:0;9970:406:1;27934:110:0;28055:19;28077:10;:8;:10::i;:::-;28055:32;-1:-1:-1;28105:21:0;28055:32;28105:7;:21;:::i;:::-;28098:28;27815:319;-1:-1:-1;;;27815:319:0:o;40308:103::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;40363:40:::1;40378:24;40396:4;40378:9;:24::i;:::-;40363:14;:40::i;:::-;40308:103::o:0;28555:473::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28635:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28627:56;;;::::0;-1:-1:-1;;;28627:56:0;;10583:2:1;28627:56:0::1;::::0;::::1;10565:21:1::0;10622:2;10602:18;;;10595:30;10661:25;10641:18;;;10634:53;10704:18;;28627:56:0::1;10381:347:1::0;28627:56:0::1;28699:9;28694:327;28718:9;:16:::0;28714:20;::::1;28694:327;;;28776:7;-1:-1:-1::0;;;;;28760:23:0::1;:9;28770:1;28760:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28760:12:0::1;:23:::0;28756:254:::1;;28819:9;28829:16:::0;;:20:::1;::::0;28848:1:::1;::::0;28829:20:::1;:::i;:::-;28819:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;28804:9:::1;:12:::0;;-1:-1:-1;;;;;28819:31:0;;::::1;::::0;28814:1;;28804:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28804:46:0::1;-1:-1:-1::0;;;;;28804:46:0;;::::1;;::::0;;28869:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;28908:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28908:28:0::1;::::0;;28955:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28955:15:0;;;;;-1:-1:-1;;;;;;28955:15:0::1;::::0;;;;;28694:327:::1;28555:473:::0;:::o;28756:254::-:1;28736:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28694:327;;;;28555:473:::0;:::o;26395:297::-;888:10;26510:4;26604:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26604:34:0;;;;;;;;;;26510:4;;26532:130;;26582:7;;26604:47;;26641:10;;26604:47;:::i;:::-;26532:8;:130::i;29036:113::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29107:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;29107:34:0::1;29137:4;29107:34;::::0;;29036:113::o;27318:489::-;27436:7;27480;;27469;:18;;27461:62;;;;-1:-1:-1;;;27461:62:0;;11602:2:1;27461:62:0;;;11584:21:1;11641:2;11621:18;;;11614:30;11680:33;11660:18;;;11653:61;11731:18;;27461:62:0;11400:355:1;27461:62:0;27539:17;27534:266;;27573:28;27604:25;27615:7;27624:4;27604:10;:25::i;:::-;27651:9;;-1:-1:-1;27644:16:0;;-1:-1:-1;27644:16:0;27534:266;27693:28;27724:25;27735:7;27744:4;27724:10;:25::i;:::-;27771:17;;;;-1:-1:-1;27764:24:0;;-1:-1:-1;27764:24:0;28213:334;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28296:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28295:21;28287:61;;;::::0;-1:-1:-1;;;28287:61:0;;11962:2:1;28287:61:0::1;::::0;::::1;11944:21:1::0;12001:2;11981:18;;;11974:30;12040:29;12020:18;;;12013:57;12087:18;;28287:61:0::1;11760:351:1::0;28287:61:0::1;-1:-1:-1::0;;;;;28363:16:0;::::1;28382:1;28363:16:::0;;;:7:::1;:16;::::0;;;;;:20;28359:109:::1;;-1:-1:-1::0;;;;;28439:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;28419:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;28400:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;28359:109:::1;-1:-1:-1::0;;;;;28478:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28478:27:0::1;28501:4;28478:27:::0;;::::1;::::0;;;28516:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;28516:23:0::1;::::0;;::::1;::::0;;28213:334::o;39143:347::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;39294:9:::1;:20:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;39325:32:0;;;;;;;39294:20:::1;39325:32:::0;;::::1;;;-1:-1:-1::0;;39407:18:0;39368:28;;;::::1;;-1:-1:-1::0;;39407:18:0;;;;;::::1;::::0;;;::::1;;::::0;;;39455:21:::1;39368:28:::0;39325:32;39455:21:::1;:::i;:::-;:27;;;;:::i;:::-;39436:9;:46:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;39436:46:0::1;-1:-1:-1::0;;39436:46:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;39143:347:0:o;25060:198::-;-1:-1:-1;;;;;25150:20:0;;25126:7;25150:20;;;:11;:20;;;;;;;;25146:49;;;-1:-1:-1;;;;;;25179:16:0;;;;;:7;:16;;;;;;;25060:198::o;25146:49::-;-1:-1:-1;;;;;25233:16:0;;;;;;:7;:16;;;;;;25213:37;;:19;:37::i;2645:94::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;2710:21:::1;2728:1;2710:9;:21::i;38264:522::-:0;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38403:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;;:42;::::1;;:33;::::0;;::::1;:42;;::::0;38381:148:::1;;;::::0;-1:-1:-1;;;38381:148:0;;12471:2:1;38381:148:0::1;::::0;::::1;12453:21:1::0;12510:2;12490:18;;;12483:30;12549:34;12529:18;;;12522:62;12620:26;12600:18;;;12593:54;12664:19;;38381:148:0::1;12269:420:1::0;38381:148:0::1;-1:-1:-1::0;;;;;38540:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;38540:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;38592:130:::1;;-1:-1:-1::0;;;;;38618:31:0;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;;;:38;;-1:-1:-1;;38618:38:0::1;38652:4;38618:38;::::0;;38676:34;;371:51:1;;;38676:34:0;::::1;;::::0;::::1;::::0;344:18:1;38676:34:0::1;;;;;;;38592:130;38737:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;38737:41:0;::::1;::::0;::::1;::::0;;;::::1;38264:522:::0;;:::o;40853:194::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;40953:9:::1;40928:21;:34;;40920:71;;;::::0;-1:-1:-1;;;40920:71:0;;12896:2:1;40920:71:0::1;::::0;::::1;12878:21:1::0;12935:2;12915:18;;;12908:30;12974:26;12954:18;;;12947:54;13018:18;;40920:71:0::1;12694:348:1::0;40920:71:0::1;41002:16;::::0;:37:::1;::::0;-1:-1:-1;;;;;41002:16:0::1;41029:9:::0;41002:26:::1;:37::i;:::-;40853:194:::0;:::o;26700:482::-;888:10;26820:4;26869:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26869:34:0;;;;;;;;;;26936:35;;;;26914:122;;;;-1:-1:-1;;;26914:122:0;;13249:2:1;26914:122:0;;;13231:21:1;13288:2;13268:18;;;13261:30;13327:34;13307:18;;;13300:62;-1:-1:-1;;;13378:18:1;;;13371:35;13423:19;;26914:122:0;13047:401:1;26914:122:0;27072:67;888:10;27095:7;27123:15;27104:16;:34;27072:8;:67::i;:::-;-1:-1:-1;27170:4:0;;26700:482;-1:-1:-1;;;26700:482:0:o;25266:199::-;25371:4;25393:42;888:10;25417:9;25428:6;25393:9;:42::i;38794:341::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;38944:8:::1;:19:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;38974:31:0;;;;;;;38944:19:::1;38974:31:::0;;::::1;;;-1:-1:-1::0;;39054:17:0;39016:27;;;::::1;;-1:-1:-1::0;;39054:17:0;;;;;::::1;::::0;;;::::1;;::::0;;;39100:21:::1;39016:27:::0;38974:31;39100:21:::1;:::i;:::-;:27;;;;:::i;:::-;39082:8;:45:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;39082:45:0::1;-1:-1:-1::0;;39082:45:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;38794:341:0:o;29587:171::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;29664:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;29664:32:0::1;-1:-1:-1::0;;;;29664:32:0;;::::1;;::::0;;29712:38:::1;::::0;::::1;::::0;::::1;::::0;29688:8;1607:14:1;1600:22;1582:41;;1570:2;1555:18;;1442:187;41634:380:0;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41771:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;41749:145:::1;;;::::0;-1:-1:-1;;;41749:145:0;;13655:2:1;41749:145:0::1;::::0;::::1;13637:21:1::0;13694:2;13674:18;;;13667:30;13733:34;13713:18;;;13706:62;-1:-1:-1;;;13784:18:1;;;13777:48;13842:19;;41749:145:0::1;13453:414:1::0;41749:145:0::1;-1:-1:-1::0;;;;;41905:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;;;:44;;-1:-1:-1;;41905:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41967:39;;371:51:1;;;41905:44:0;;41967:39:::1;::::0;344:18:1;41967:39:0::1;;;;;;;41634:380:::0;;:::o;40456:326::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;40618:4:::1;40601:15;40576:24;40594:4;40576:9;:24::i;:::-;:40;;;;:::i;:::-;40575:47;;;;:::i;:::-;40560:12;:62:::0;;;40632:30:::1;::::0;:16:::1;:30::i;:::-;40673:8;:29:::0;;-1:-1:-1;;;;;;40673:29:0::1;-1:-1:-1::0;;;;;40673:29:0;::::1;::::0;;::::1;::::0;;;40719:21:::1;40713:3;:27:::0;;;40751:23:::1;::::0;40673:29;40751:18:::1;:23::i;39498:308::-:0;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;39670:18:::1;39660:7;;:28;;;;:::i;:::-;39643:14;:45:::0;39743:7:::1;::::0;:29:::1;::::0;39753:19;;39743:29:::1;:::i;:::-;39725:15;:47:::0;-1:-1:-1;;39498:308:0:o;41269:126::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41362:17:0;;;::::1;;::::0;;;:5:::1;:17;::::0;;;;:25;;-1:-1:-1;;41362:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41269:126::o;29159:112::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29228:27:0::1;29258:5;29228:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;29228:35:0::1;::::0;;29159:112::o;2894:192::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2983:22:0;::::1;2975:73;;;::::0;-1:-1:-1;;;2975:73:0;;14074:2:1;2975:73:0::1;::::0;::::1;14056:21:1::0;14113:2;14093:18;;;14086:30;14152:34;14132:18;;;14125:62;-1:-1:-1;;;14203:18:1;;;14196:36;14249:19;;2975:73:0::1;13872:402:1::0;2975:73:0::1;3059:19;3069:8;3059:9;:19::i;32562:369::-:0;-1:-1:-1;;;;;32689:19:0;;32681:68;;;;-1:-1:-1;;;32681:68:0;;14481:2:1;32681:68:0;;;14463:21:1;14520:2;14500:18;;;14493:30;14559:34;14539:18;;;14532:62;-1:-1:-1;;;14610:18:1;;;14603:34;14654:19;;32681:68:0;14279:400:1;32681:68:0;-1:-1:-1;;;;;32768:21:0;;32760:68;;;;-1:-1:-1;;;32760:68:0;;14886:2:1;32760:68:0;;;14868:21:1;14925:2;14905:18;;;14898:30;14964:34;14944:18;;;14937:62;-1:-1:-1;;;15015:18:1;;;15008:32;15057:19;;32760:68:0;14684:398:1;32760:68:0;-1:-1:-1;;;;;32839:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32891:32;;2501:25:1;;;32891:32:0;;2474:18:1;32891:32:0;;;;;;;32562:369;;;:::o;32939:1834::-;33057:19;;:24;:58;;;;-1:-1:-1;;;;;;33085:30:0;;;;;;:26;:30;;;;;;;;33057:58;33053:125;;;33154:12;33132:19;:34;33053:125;-1:-1:-1;;;;;33198:18:0;;33190:68;;;;-1:-1:-1;;;33190:68:0;;15289:2:1;33190:68:0;;;15271:21:1;15328:2;15308:18;;;15301:30;15367:34;15347:18;;;15340:62;-1:-1:-1;;;15418:18:1;;;15411:35;15463:19;;33190:68:0;15087:401:1;33190:68:0;-1:-1:-1;;;;;33277:16:0;;33269:64;;;;-1:-1:-1;;;33269:64:0;;15695:2:1;33269:64:0;;;15677:21:1;15734:2;15714:18;;;15707:30;15773:34;15753:18;;;15746:62;-1:-1:-1;;;15824:18:1;;;15817:33;15867:19;;33269:64:0;15493:399:1;33269:64:0;-1:-1:-1;;;;;33353:11:0;;;;;;:5;:11;;;;;;;;33352:12;33344:57;;;;-1:-1:-1;;;33344:57:0;;16099:2:1;33344:57:0;;;16081:21:1;;;16118:18;;;16111:30;16177:34;16157:18;;;16150:62;16229:18;;33344:57:0;15897:356:1;33344:57:0;33429:1;33420:6;:10;33412:64;;;;-1:-1:-1;;;33412:64:0;;16460:2:1;33412:64:0;;;16442:21:1;16499:2;16479:18;;;16472:30;16538:34;16518:18;;;16511:62;-1:-1:-1;;;16589:18:1;;;16582:39;16638:19;;33412:64:0;16258:405:1;33412:64:0;33519:15;33529:4;33519:9;:15::i;:::-;33509:6;:25;;33487:124;;;;-1:-1:-1;;;33487:124:0;;16870:2:1;33487:124:0;;;16852:21:1;16909:2;16889:18;;;16882:30;16948:34;16928:18;;;16921:62;-1:-1:-1;;;16999:18:1;;;16992:47;17056:19;;33487:124:0;16668:413:1;33487:124:0;-1:-1:-1;;;;;33639:24:0;;33622:12;33639:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;33667:22:0;;;;;;:18;:22;;;;;;;;33639:50;33637:53;33622:68;;33707:7;33703:687;;;-1:-1:-1;;;;;33735:32:0;;;;;;:26;:32;;;;;;;;33731:648;;;33829:12;;33807:19;;:34;;;;:::i;:::-;33792:12;:49;33788:167;;;-1:-1:-1;;;;;33866:9:0;;;;;;:5;:9;;;;;;;;;:16;;-1:-1:-1;;33866:16:0;33878:4;33866:16;;;;;;33910:25;;371:51:1;;;33878:4:0;;33910:25;;344:18:1;33910:25:0;;;;;;;33788:167;33990:8;33975:23;:12;:23;;;;;;-1:-1:-1;;33975:23:0;;;;;;;;;;;;;;;-1:-1:-1;;33975:23:0;;;;;;;;-1:-1:-1;;33975:23:0;;;;;;;;;;-1:-1:-1;;33975:23:0;-1:-1:-1;;;33975:23:0;;;;;;;;;;;;;;;;;34057:14;;34047:24;;;34017:130;;;;-1:-1:-1;;;34017:130:0;;17288:2:1;34017:130:0;;;17270:21:1;;;17307:18;;;17300:30;17366:34;17346:18;;;17339:62;17418:18;;34017:130:0;17086:356:1;34017:130:0;33731:648;;;34203:9;34188:24;:12;:24;;;;;;-1:-1:-1;;34188:24:0;;;;;;;;;;;;;;;-1:-1:-1;;34188:24:0;;;;;;;;-1:-1:-1;;34188:24:0;;;;;;;;;;-1:-1:-1;;34188:24:0;-1:-1:-1;;;34188:24:0;;;;;;;;;;;;;;;;;34271:15;;34261:25;;;34231:132;;;;-1:-1:-1;;;34231:132:0;;17649:2:1;34231:132:0;;;17631:21:1;17688:2;17668:18;;;17661:30;17727:34;17707:18;;;17700:62;-1:-1:-1;;;17778:18:1;;;17771:31;17819:19;;34231:132:0;17447:397:1;34231:132:0;34448:29;;34420:24;34438:4;34420:9;:24::i;:::-;:57;;:91;;;;-1:-1:-1;34495:16:0;;;;34494:17;34420:91;:141;;;;-1:-1:-1;;;;;;34529:32:0;;;;;;:26;:32;;;;;;;;34528:33;34420:141;:179;;;;-1:-1:-1;34578:21:0;;-1:-1:-1;;;34578:21:0;;;;34420:179;34402:310;;;34655:45;34670:29;;34655:14;:45::i;:::-;34724:41;34739:4;34745:2;34749:6;34757:7;34724:14;:41::i;31807:161::-;31849:7;31870:15;31887;31906:19;:17;:19::i;:::-;31869:56;;-1:-1:-1;31869:56:0;-1:-1:-1;31943:17:0;31869:56;;31943:17;:::i;:::-;31936:24;;;;31807:161;:::o;35818:1319::-;23386:16;:23;;-1:-1:-1;;23386:23:0;23405:4;23386:23;;;35925:12:::1;:19:::0;23386:16;;35925:23:::1;::::0;-1:-1:-1;;;35925:19:0;::::1;23386:23:::0;35925:19:::1;35947:1;35925:23;:::i;:::-;36031:12;:15:::0;35903:45:::1;::::0;;::::1;::::0;-1:-1:-1;35959:32:0::1;::::0;35903:45;;35995:51:::1;::::0;36031:15;;;::::1;;35995:20:::0;:51:::1;:::i;:::-;35994:67;;;;:::i;:::-;35959:102:::0;-1:-1:-1;36072:14:0::1;36089:47;35959:102:::0;36089:20;:47:::1;:::i;:::-;36072:64:::0;-1:-1:-1;36174:21:0::1;36240:24;36072:64:::0;36240:16:::1;:24::i;:::-;36277:20;36300:38;36324:14:::0;36300:21:::1;:38;:::i;:::-;36444:12;:15:::0;36277:61;;-1:-1:-1;36349:29:0::1;::::0;36430::::1;::::0;36444:15;;::::1;;;36430:11:::0;:29:::1;:::i;:::-;36397:12;:15:::0;36382:30:::1;::::0;36397:15;;::::1;;;36382:12:::0;:30:::1;:::i;:::-;36381:79;;;;:::i;:::-;36349:111;;36529:1;36503:24;:27;:54;;;;;36556:1;36534:21;:23;36503:54;36499:147;;;36573:61;36586:24;36612:21;36573:12;:61::i;:::-;36879:12;:20:::0;36754:21:::1;::::0;36727:24:::1;::::0;36865:34:::1;::::0;36879:20;;::::1;;;36865:11:::0;:34:::1;:::i;:::-;36827:12;:20:::0;36808:39:::1;::::0;36827:20;;::::1;;;36808:16:::0;:39:::1;:::i;:::-;36807:93;;;;:::i;:::-;37008:12;:22:::0;36786:114;;-1:-1:-1;36911:20:0::1;::::0;36994:36:::1;::::0;37008:22:::1;::::0;::::1;;;36994:11:::0;:36:::1;:::i;:::-;36954:12;:22:::0;36935:41:::1;::::0;36954:22:::1;::::0;::::1;;;36935:16:::0;:41:::1;:::i;:::-;36934:97;;;;:::i;:::-;37042:14;::::0;36911:120;;-1:-1:-1;37042:36:0::1;::::0;-1:-1:-1;;;;;37042:14:0::1;37067:10:::0;37042:24:::1;:36::i;:::-;37089:16;::::0;:40:::1;::::0;-1:-1:-1;;;;;37089:16:0::1;37116:12:::0;37089:26:::1;:40::i;:::-;-1:-1:-1::0;;23432:16:0;:24;;-1:-1:-1;;23432:24:0;;;-1:-1:-1;;;;;;;;35818:1319:0:o;30240:440::-;30340:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30340:36:0;30406:29;30418:7;30427;30406:11;:29::i;:::-;30394:41;;30593:52;30605:9;30616:7;30625;30634:10;:8;:10::i;:::-;30593:11;:52::i;:::-;30562:17;;;30446:199;30533:14;;;30446:199;30493:25;;;30446:199;;;30240:440;;;;:::o;3094:173::-;3150:16;3169:6;;-1:-1:-1;;;;;3186:17:0;;;-1:-1:-1;;;;;;3186:17:0;;;;;;3219:40;;3169:6;;;;;;;3219:40;;3150:16;3219:40;3139:128;3094:173;:::o;13881:317::-;13996:6;13971:21;:31;;13963:73;;;;-1:-1:-1;;;13963:73:0;;18281:2:1;13963:73:0;;;18263:21:1;18320:2;18300:18;;;18293:30;18359:31;18339:18;;;18332:59;18408:18;;13963:73:0;18079:353:1;13963:73:0;14050:12;14068:9;-1:-1:-1;;;;;14068:14:0;14090:6;14068:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14049:52;;;14120:7;14112:78;;;;-1:-1:-1;;;14112:78:0;;18849:2:1;14112:78:0;;;18831:21:1;18888:2;18868:18;;;18861:30;18927:34;18907:18;;;18900:62;18998:28;18978:18;;;18971:56;19044:19;;14112:78:0;18647:422:1;14112:78:0;13952:246;13881:317;;:::o;37145:669::-;37279:16;;;37293:1;37279:16;;;;;;;;37255:21;;37279:16;;;;;;;;;;-1:-1:-1;37279:16:0;37255:40;;37324:4;37306;37311:1;37306:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;37306:23:0;;;-1:-1:-1;;;;;37306:23:0;;;;;37350:15;;;;;;;;;-1:-1:-1;;;;;37350:15:0;-1:-1:-1;;;;;37350:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37340:4;37345:1;37340:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37340:32:0;;;:7;;;;;;;;;;:32;;;;37422:15;;37407:4;25590:7;25622:18;;;:11;:18;;;;;;37422:15;;;;;;;25622:27;;;;;;37442:11;-1:-1:-1;37385:159:0;;;37502:15;;37470:62;;37487:4;;37502:15;;;-1:-1:-1;;;;;37502:15:0;-1:-1:-1;;37470:8:0;:62::i;:::-;37582:15;;:224;;-1:-1:-1;;;37582:224:0;;:15;;;;-1:-1:-1;;;;;37582:15:0;;:66;;:224;;37663:11;;37689:1;;37733:4;;37760;;37780:15;;37582:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37200:614;37145:669;:::o;34854:956::-;35006:28;35037;35048:7;35057;35037:10;:28::i;:::-;-1:-1:-1;;;;;35082:19:0;;;;;;:11;:19;;;;;;35006:59;;-1:-1:-1;35082:19:0;;35078:78;;;-1:-1:-1;;;;;35118:15:0;;;;;;:7;:15;;;;;:26;;35137:7;;35118:15;:26;;35137:7;;35118:26;:::i;:::-;;;;-1:-1:-1;;35078:78:0;-1:-1:-1;;;;;35170:22:0;;;;;;:11;:22;;;;;;;;35166:94;;;35231:17;;;;-1:-1:-1;;;;;35209:18:0;;;;;;:7;:18;;;;;:39;;:18;;;:39;;35231:17;;35209:39;:::i;:::-;;;;-1:-1:-1;;35166:94:0;35291:9;;-1:-1:-1;;;;;35272:15:0;;35291:9;35272:15;;;:7;:15;;;;;:28;;:15;;35291:9;35272:28;;35291:9;;35272:28;:::i;:::-;;;;-1:-1:-1;;35333:17:0;;;;;-1:-1:-1;;;;;35311:18:0;;;;;;:7;:18;;;;;;:39;;35333:17;;35311:18;;:39;;35333:17;;35311:39;:::i;:::-;;;;-1:-1:-1;;35361:177:0;;;;35389:27;35401:1;:6;;;35409:1;:6;;;35389:11;:27::i;:::-;35431:33;35443:1;:9;;;35454:1;:9;;;35431:11;:33::i;:::-;35509:4;-1:-1:-1;;;;;35484:42:0;35493:6;-1:-1:-1;;;;;35484:42:0;;35516:1;:9;;;35484:42;;;;2501:25:1;;2489:2;2474:18;;2355:177;35484:42:0;;;;;;;;35361:177;-1:-1:-1;;;;;35570:35:0;;;;;;:24;:35;;;;;;;;;:95;;;35650:15;;35626:20;35636:9;35626;:20::i;:::-;:39;;35570:95;35548:192;;;;-1:-1:-1;;;35548:192:0;;20649:2:1;35548:192:0;;;20631:21:1;20688:2;20668:18;;;20661:30;20727:34;20707:18;;;20700:62;-1:-1:-1;;;20778:18:1;;;20771:45;20833:19;;35548:192:0;20447:411:1;35548:192:0;35773:9;-1:-1:-1;;;;;35756:46:0;35765:6;-1:-1:-1;;;;;35756:46:0;;35784:1;:17;;;35756:46;;;;2501:25:1;;2489:2;2474:18;;2355:177;35756:46:0;;;;;;;;34995:815;34854:956;;;;:::o;31976:578::-;32074:7;;32110;;32027;;;;;32128:314;32152:9;:16;32148:20;;32128:314;;;32236:7;32212;:21;32220:9;32230:1;32220:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32220:12:0;32212:21;;;;;;;;;;;;;:31;;:83;;;32288:7;32264;:21;32272:9;32282:1;32272:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32272:12:0;32264:21;;;;;;;;;;;;;:31;32212:83;32190:146;;;32319:7;;32328;;32311:25;;;;;;;31976:578;;:::o;32190:146::-;32362:7;:21;32370:9;32380:1;32370:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32370:12:0;32362:21;;;;;;;;;;;;;32351:32;;;;:::i;:::-;;;32409:7;:21;32417:9;32427:1;32417:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32417:12:0;32409:21;;;;;;;;;;;;;32398:32;;;;:::i;:::-;;-1:-1:-1;32170:3:0;;;;:::i;:::-;;;;32128:314;;;;32476:7;;32466;;:17;;;;:::i;:::-;32456:7;:27;32452:58;;;32493:7;;32502;;32485:25;;;;;;31976:578;;:::o;32452:58::-;32529:7;;32538;;-1:-1:-1;31976:578:0;-1:-1:-1;31976:578:0:o;37822:434::-;37933:15;;38137:16;;37933:261;;-1:-1:-1;;;37933:261:0;;38005:4;37933:261;;;21212:34:1;21262:18;;;21255:34;;;38051:1:0;21305:18:1;;;21298:34;;;21348:18;;;21341:34;-1:-1:-1;;;;;38137:16:0;;;21391:19:1;;;21384:44;38168:15:0;21444:19:1;;;21437:35;37933:15:0;;;;;;:31;;37972:9;;21146:19:1;;37933:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;38210:38:0;;;5470:25:1;;;5526:2;5511:18;;5504:34;;;38210:38:0;;-1:-1:-1;5443:18:1;38210:38:0;;;;;;;37822:434;;:::o;30688:437::-;30789:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30789:28:0;30840:7;30835:91;;30864:17;;;:27;;;30906:8;;30835:91;30956:12;:16;30976:3;;30946:26;;30956:16;;30946:7;:26;:::i;:::-;30945:34;;;;:::i;:::-;30936:6;;;:43;31013:12;:19;31036:3;;31003:29;;-1:-1:-1;;;31013:19:0;;;;31003:7;:29;:::i;:::-;31002:37;;;;:::i;:::-;30990:9;;;:49;;;31080:6;;;;31070:16;;:7;:16;:::i;:::-;:28;;;;:::i;:::-;31050:17;;;:48;30688:437;;;;:::o;31133:666::-;31342:15;;;;31490:21;31500:11;31490:7;:21;:::i;:::-;31480:31;;31529:7;31524:72;;-1:-1:-1;31561:7:0;;-1:-1:-1;31579:1:0;;-1:-1:-1;31579:1:0;31553:31;;31524:72;31624:11;31615:1;:6;;;:20;;;;:::i;:::-;31608:27;;31668:11;31656:1;:9;;;:23;;;;:::i;:::-;31646:33;-1:-1:-1;31646:33:0;31708:14;31718:4;31708:7;:14;:::i;:::-;:24;;;;:::i;:::-;31690:42;;31133:666;;;;;;;;;;:::o;29868:125::-;29947:4;29936:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;29962:11:0;:23;;29981:4;;29962:11;:15;;:23;;29981:4;;29962:23;:::i;:::-;;;;-1:-1:-1;;;;29868:125:0:o;30001:231::-;30091:4;30075:22;;;;:7;:22;;;;;:33;;30101:7;;30075:22;:33;;30101:7;;30075:33;:::i;:::-;;;;-1:-1:-1;;30143:4:0;30123:26;;;;:11;:26;;;;;;;;30119:65;;;30167:4;30151:22;;;;:7;:22;;;;;:33;;30177:7;;30151:22;:33;;30177:7;;30151:33;:::i;:::-;;;;-1:-1:-1;;30119:65:0;30217:7;30195:11;:18;;;:29;;;;;;;:::i;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:255::-;1701:6;1754:2;1742:9;1733:7;1729:23;1725:32;1722:52;;;1770:1;1767;1760:12;1722:52;1809:9;1796:23;1828:31;1853:5;1828:31;:::i;1894:456::-;1971:6;1979;1987;2040:2;2028:9;2019:7;2015:23;2011:32;2008:52;;;2056:1;2053;2046:12;2008:52;2095:9;2082:23;2114:31;2139:5;2114:31;:::i;:::-;2164:5;-1:-1:-1;2221:2:1;2206:18;;2193:32;2234:33;2193:32;2234:33;:::i;:::-;1894:456;;2286:7;;-1:-1:-1;;;2340:2:1;2325:18;;;;2312:32;;1894:456::o;2978:118::-;3064:5;3057:13;3050:21;3043:5;3040:32;3030:60;;3086:1;3083;3076:12;3101:309;3166:6;3174;3227:2;3215:9;3206:7;3202:23;3198:32;3195:52;;;3243:1;3240;3233:12;3195:52;3279:9;3266:23;3256:33;;3339:2;3328:9;3324:18;3311:32;3352:28;3374:5;3352:28;:::i;:::-;3399:5;3389:15;;;3101:309;;;;;:::o;3415:156::-;3481:20;;3541:4;3530:16;;3520:27;;3510:55;;3561:1;3558;3551:12;3510:55;3415:156;;;:::o;3576:393::-;3654:6;3662;3670;3678;3731:3;3719:9;3710:7;3706:23;3702:33;3699:53;;;3748:1;3745;3738:12;3699:53;3771:27;3788:9;3771:27;:::i;:::-;3761:37;;3817:36;3849:2;3838:9;3834:18;3817:36;:::i;:::-;3807:46;;3872:36;3904:2;3893:9;3889:18;3872:36;:::i;:::-;3862:46;;3927:36;3959:2;3948:9;3944:18;3927:36;:::i;:::-;3917:46;;3576:393;;;;;;;:::o;4909:382::-;4974:6;4982;5035:2;5023:9;5014:7;5010:23;5006:32;5003:52;;;5051:1;5048;5041:12;5003:52;5090:9;5077:23;5109:31;5134:5;5109:31;:::i;:::-;5159:5;-1:-1:-1;5216:2:1;5201:18;;5188:32;5229:30;5188:32;5229:30;:::i;5549:241::-;5605:6;5658:2;5646:9;5637:7;5633:23;5629:32;5626:52;;;5674:1;5671;5664:12;5626:52;5713:9;5700:23;5732:28;5754:5;5732:28;:::i;5795:315::-;5863:6;5871;5924:2;5912:9;5903:7;5899:23;5895:32;5892:52;;;5940:1;5937;5930:12;5892:52;5976:9;5963:23;5953:33;;6036:2;6025:9;6021:18;6008:32;6049:31;6074:5;6049:31;:::i;6115:248::-;6183:6;6191;6244:2;6232:9;6223:7;6219:23;6215:32;6212:52;;;6260:1;6257;6250:12;6212:52;-1:-1:-1;;6283:23:1;;;6353:2;6338:18;;;6325:32;;-1:-1:-1;6115:248:1:o;6368:388::-;6436:6;6444;6497:2;6485:9;6476:7;6472:23;6468:32;6465:52;;;6513:1;6510;6503:12;6465:52;6552:9;6539:23;6571:31;6596:5;6571:31;:::i;:::-;6621:5;-1:-1:-1;6678:2:1;6663:18;;6650:32;6691:33;6650:32;6691:33;:::i;6761:356::-;6963:2;6945:21;;;6982:18;;;6975:30;7041:34;7036:2;7021:18;;7014:62;7108:2;7093:18;;6761:356::o;7122:127::-;7183:10;7178:3;7174:20;7171:1;7164:31;7214:4;7211:1;7204:15;7238:4;7235:1;7228:15;7254:422;7343:1;7386:5;7343:1;7400:270;7421:7;7411:8;7408:21;7400:270;;;7480:4;7476:1;7472:6;7468:17;7462:4;7459:27;7456:53;;;7489:18;;:::i;:::-;7539:7;7529:8;7525:22;7522:55;;;7559:16;;;;7522:55;7638:22;;;;7598:15;;;;7400:270;;;7404:3;7254:422;;;;;:::o;7681:806::-;7730:5;7760:8;7750:80;;-1:-1:-1;7801:1:1;7815:5;;7750:80;7849:4;7839:76;;-1:-1:-1;7886:1:1;7900:5;;7839:76;7931:4;7949:1;7944:59;;;;8017:1;8012:130;;;;7924:218;;7944:59;7974:1;7965:10;;7988:5;;;8012:130;8049:3;8039:8;8036:17;8033:43;;;8056:18;;:::i;:::-;-1:-1:-1;;8112:1:1;8098:16;;8127:5;;7924:218;;8226:2;8216:8;8213:16;8207:3;8201:4;8198:13;8194:36;8188:2;8178:8;8175:16;8170:2;8164:4;8161:12;8157:35;8154:77;8151:159;;;-1:-1:-1;8263:19:1;;;8295:5;;8151:159;8342:34;8367:8;8361:4;8342:34;:::i;:::-;8412:6;8408:1;8404:6;8400:19;8391:7;8388:32;8385:58;;;8423:18;;:::i;:::-;8461:20;;7681:806;-1:-1:-1;;;7681:806:1:o;8492:140::-;8550:5;8579:47;8620:4;8610:8;8606:19;8600:4;8579:47;:::i;8637:168::-;8710:9;;;8741;;8758:15;;;8752:22;;8738:37;8728:71;;8779:18;;:::i;9089:245::-;9156:6;9209:2;9197:9;9188:7;9184:23;9180:32;9177:52;;;9225:1;9222;9215:12;9177:52;9257:9;9251:16;9276:28;9298:5;9276:28;:::i;9748:217::-;9788:1;9814;9804:132;;9858:10;9853:3;9849:20;9846:1;9839:31;9893:4;9890:1;9883:15;9921:4;9918:1;9911:15;9804:132;-1:-1:-1;9950:9:1;;9748:217::o;10733:127::-;10794:10;10789:3;10785:20;10782:1;10775:31;10825:4;10822:1;10815:15;10849:4;10846:1;10839:15;10865:128;10932:9;;;10953:11;;;10950:37;;;10967:18;;:::i;10998:127::-;11059:10;11054:3;11050:20;11047:1;11040:31;11090:4;11087:1;11080:15;11114:4;11111:1;11104:15;11130:135;11169:3;11190:17;;;11187:43;;11210:18;;:::i;:::-;-1:-1:-1;11257:1:1;11246:13;;11130:135::o;11270:125::-;11335:9;;;11356:10;;;11353:36;;;11369:18;;:::i;12116:148::-;12204:4;12183:12;;;12197;;;12179:31;;12222:13;;12219:39;;;12238:18;;:::i;17849:225::-;17953:4;17932:12;;;17946;;;17928:31;17979:22;;;;18020:24;;;18010:58;;18048:18;;:::i;:::-;18010:58;17849:225;;;;:::o;19206:251::-;19276:6;19329:2;19317:9;19308:7;19304:23;19300:32;19297:52;;;19345:1;19342;19335:12;19297:52;19377:9;19371:16;19396:31;19421:5;19396:31;:::i;19462:980::-;19724:4;19772:3;19761:9;19757:19;19803:6;19792:9;19785:25;19829:2;19867:6;19862:2;19851:9;19847:18;19840:34;19910:3;19905:2;19894:9;19890:18;19883:31;19934:6;19969;19963:13;20000:6;19992;19985:22;20038:3;20027:9;20023:19;20016:26;;20077:2;20069:6;20065:15;20051:29;;20098:1;20108:195;20122:6;20119:1;20116:13;20108:195;;;20187:13;;-1:-1:-1;;;;;20183:39:1;20171:52;;20278:15;;;;20243:12;;;;20219:1;20137:9;20108:195;;;-1:-1:-1;;;;;;;20359:32:1;;;;20354:2;20339:18;;20332:60;-1:-1:-1;;;20423:3:1;20408:19;20401:35;20320:3;19462:980;-1:-1:-1;;;19462:980:1:o;21483:306::-;21571:6;21579;21587;21640:2;21628:9;21619:7;21615:23;21611:32;21608:52;;;21656:1;21653;21646:12;21608:52;21685:9;21679:16;21669:26;;21735:2;21724:9;21720:18;21714:25;21704:35;;21779:2;21768:9;21764:18;21758:25;21748:35;;21483:306;;;;;:::o

Swarm Source

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