ETH Price: $1,987.46 (+0.70%)
 

Overview

Max Total Supply

6,500,000,000,000 ERC-20 TOKEN*

Holders

31

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
BurnLuna

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-25
*/

/**
██████  ██    ██ ██████  ███    ██     ██      ██    ██ ███    ██  █████  
██   ██ ██    ██ ██   ██ ████   ██     ██      ██    ██ ████   ██ ██   ██ 
██████  ██    ██ ██████  ██ ██  ██     ██      ██    ██ ██ ██  ██ ███████ 
██   ██ ██    ██ ██   ██ ██  ██ ██     ██      ██    ██ ██  ██ ██ ██   ██ 
██████   ██████  ██   ██ ██   ████     ███████  ██████  ██   ████ ██   ██ 
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.14;

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



/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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


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


// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

Total supply 6.5 trillion 6,500,000,000,000
name of token = Burn Luna
Symbol = $BLUNA
5% burn with each transaction on sell"


Burn Wallet - 0x000000000000000000000000000000000000dEaD
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D  // Uniswap
*/
contract BurnLuna is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    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;
    address[] private _excluded;

    // Liquidity Pairs
    mapping (address => bool) public _isPair;

    // Banned contracts
    mapping (address => bool) public _isBanned;
 
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 6500000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Burn Luna";
    string private constant _symbol = "$BLUNA";
    uint8 private constant _decimals = 18;

    // Wallets
    address public _BurnWalletAddress;
    address public _liqWalletAddress;

    // Fees - all fee values represent 0.1%

    // Buy Fees
    uint256 private _buyTaxFee = 0;
    uint256 public _buyBurnFee = 0;
    uint256 private _buyLiquidityFee = 0;

    // Sell Fees
    uint256 private _sellTaxFee = 0;
    uint256 public _sellBurnFee = 5;
    uint256 private _sellLiquidityFee = 0;

    // Fees (Current)
    uint256 private _taxFee;
    uint256 private _BurnFee;
    uint256 private _liquidityFee;

    bool public _contractFeesEnabled = true;

    mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;

    function isBot(address account) public view returns (bool) {
        return  _isBlackListedBot[account];
    }

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapEnabled = true;
    
    uint256 public _maxTxAmount = _tTotal;
    uint256 public numTokensSellToAddToLiquidity = 6500000000;
    
    // Events
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event NumTokensSellToAddToLiquidityUpdated(uint256 numTokensSellToAddToLiquidity);
    event SetContractFeesEnabled(bool _bool);
    event RouterSet(address _router);
    event SetIsPair(address _address, bool _bool);
    event SetIsBanned(address _address, bool _bool);
    event SetSwapEnabled(bool enabled);
    event SetBurnWalletAddress(address _address);
    event SetLiqWalletAddress(address _address);
    event WithdrawalBNB(uint256 _amount, address to);
    event WithdrawalToken(address _tokenAddr, uint256 _amount, address to);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor(address router, address BurnWallet, address liqWallet) {
        _rOwned[owner()] = _rTotal;
        
        _setRouter(router);
        _BurnWalletAddress = BurnWallet;
        _liqWalletAddress = liqWallet;
        
        // Exclude owner, dev wallet, liq wallet, and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[BurnWallet] = true;
        _isExcludedFromFee[liqWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), owner(), _tTotal);
    }

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

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

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

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

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

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        require(!_isBlackListedBot[recipient], "You have no power here!");
        require(!_isBlackListedBot[tx.origin], "You have no power here!");
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(!_isBlackListedBot[recipient], "You have no power here!");
        require(!_isBlackListedBot[tx.origin], "You have no power here!");
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

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

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

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

    function excludeFromReward(address account) public 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 already included");
        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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _takedev(tdev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }
     
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner() {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setSwapEnabled(bool _enabled) external onlyOwner() {
        swapEnabled = _enabled;
        emit SetSwapEnabled(_enabled);
    }
     
    function setNumTokensSellToAddToLiquidity(uint256 _amount) external onlyOwner() {
        require(_amount > 0);
        numTokensSellToAddToLiquidity = _amount;
        emit NumTokensSellToAddToLiquidityUpdated(_amount);
    }

    
    function _setRouter(address _router) private {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if(uniswapV2Pair == address(0))
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        setIsPair(uniswapV2Pair, true);
        emit RouterSet(_router);
    }
    
    function setRouter(address _router) external onlyOwner() {
        _setRouter(_router);
    }
    
    // to receive ETH from uniswapV2Router when swapping
    receive() external payable {}

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

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

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function _takedev(uint256 tdev) private {
        uint256 currentRate =  _getRate();
        uint256 rdev = tdev.mul(currentRate);
        _rOwned[_BurnWalletAddress] = _rOwned[_BurnWalletAddress].add(rdev);
        if(_isExcluded[_BurnWalletAddress])
            _tOwned[_BurnWalletAddress] = _tOwned[_BurnWalletAddress].add(tdev);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_BurnFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        _taxFee = 0;
        _BurnFee = 0;
        _liquidityFee = 0;
    }
    
    function isExcludedFromFee(address account) external view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            
        if(!swapEnabled && (_isPair[to] || _isPair[from]))
            revert("Buying and selling is disabled");

        if(_isBanned[from] || _isBanned[to]) {
            revert("Address is banned");
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            _isPair[to] &&
            swapAndLiquifyEnabled &&
            !_isExcludedFromFee[from]
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }
        
        // Indicates if fee should be deducted from transfer
        bool takeFee = true;

        // Remove fees except for buying and selling
        if(!_isPair[from] && !_isPair[to]) {
            takeFee = false;
        }

        // Enable fees if contract fees are enabled and to or from is a contract
        if(_contractFeesEnabled && (from.isContract() || to.isContract())) {
            takeFee = true;
        }

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        // Set buy fees
        if(_isPair[from] || from.isContract()) {
            _taxFee = _buyTaxFee;
            _BurnFee = _buyBurnFee;
            _liquidityFee = _buyLiquidityFee;
        }
        
        // Set sell fees
        if(_isPair[to] || to.isContract()) {
            _taxFee = _sellTaxFee;
            _BurnFee = _sellBurnFee;
            _liquidityFee = _sellLiquidityFee;            
        }
        
        // Transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            _liqWalletAddress,
            block.timestamp
        );
        emit Transfer(address(this), uniswapV2Pair, tokenAmount);
    }

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

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

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

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

    function setIsPair(address _address, bool value) public onlyOwner() {
        _isPair[_address] = value;
        emit SetIsPair(_address, value);
    }

    function setIsBanned(address _address, bool value) external onlyOwner() {
        require(_address.isContract(), "Error: Can only ban or unban contract addresses");
        _isBanned[_address] = value;
        emit SetIsBanned(_address, value);
    }

    function withdrawalToken(address _tokenAddr, uint _amount, address to) external onlyOwner() {
        IERC20 token = IERC20(_tokenAddr);
        token.transfer(to, _amount);
        emit WithdrawalToken(_tokenAddr, _amount, to);
    }
    
    function withdrawalBNB(uint _amount, address to) external onlyOwner() {
        require(address(this).balance >= _amount);
        payable(to).transfer(_amount);
        emit WithdrawalBNB(_amount, to);
    }

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

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

        _rTotal += amount;
        _rOwned[account] += amount;
        emit Transfer(address(0), account, amount);
    }
     function mint(uint256 amount) public onlyOwner {
        _mint(msg.sender, amount);
    }

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

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

        uint256 accountBalance = _rOwned[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _rOwned[account] = accountBalance - amount;
        _rTotal -= amount;

        emit Transfer(account, address(0), amount);
    }
   function burn(uint256 amount) public onlyOwner {
        _burn(msg.sender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
    
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"BurnWallet","type":"address"},{"internalType":"address","name":"liqWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"NumTokensSellToAddToLiquidityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_router","type":"address"}],"name":"RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SetBurnWalletAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetContractFeesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetIsBanned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetIsPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SetLiqWalletAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetSwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"WithdrawalBNB","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_tokenAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"WithdrawalToken","type":"event"},{"inputs":[],"name":"_BurnWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contractFeesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBanned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liqWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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"}],"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":"account","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsBanned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawalBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawalToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526200001f6c520aa1fb49c9f80a72a00000006000196200068a565b6200002d90600019620006ad565b6009556000600d819055600e819055600f819055601081905560056011556012556016805460ff19166001179055601a805461010160a81b61ffff60a81b199091161790556c520aa1fb49c9f80a72a0000000601b556401836e2100601c553480156200009957600080fd5b5060405162003a6a38038062003a6a833981016040819052620000bc91620006f0565b620000c7336200022a565b60095460016000620000e16000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205562000106836200027a565b600b80546001600160a01b038085166001600160a01b031992831617909255600c8054928416929091169190911790556001600460006200014f6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055868216815260049093528183208054851660019081179091559085168352818320805485168217905530835291208054909216179055620001c66000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6c520aa1fb49c9f80a72a00000006040516200021991815260200190565b60405180910390a35050506200075f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e491906200073a565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000332573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035891906200073a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015620003a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ca91906200073a565b601a80546001600160a01b0319166001600160a01b039290921691821790556200055c57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200042d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045391906200073a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c791906200073a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200053b91906200073a565b601a80546001600160a01b0319166001600160a01b03929092169190911790555b601980546001600160a01b0319166001600160a01b0383811691909117909155601a546200058d91166001620005ce565b6040516001600160a01b03831681527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d15906020015b60405180910390a15050565b6000546001600160a01b031633146200062d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee9101620005c2565b600082620006a857634e487b7160e01b600052601260045260246000fd5b500690565b600082821015620006ce57634e487b7160e01b600052601160045260246000fd5b500390565b80516001600160a01b0381168114620006eb57600080fd5b919050565b6000806000606084860312156200070657600080fd5b6200071184620006d3565b92506200072160208501620006d3565b91506200073160408501620006d3565b90509250925092565b6000602082840312156200074d57600080fd5b6200075882620006d3565b9392505050565b6132fb806200076f6000396000f3fe6080604052600436106102975760003560e01c8063715018a61161015a578063c069d956116100c1578063dd62ed3e1161007a578063dd62ed3e1461086d578063e01af92c146108b3578063ea2f0b37146108d3578063f0f165af146108f3578063f2fde38b14610913578063faef9e671461093357600080fd5b8063c069d95614610797578063c0d78655146107c7578063c14a4239146107e7578063c49b9a8014610817578063d12a768814610837578063d543dbeb1461084d57600080fd5b806395d89b411161011357806395d89b41146106c8578063978e1cc8146106f7578063a0712d6814610717578063a457c2d714610737578063a9059cbb14610757578063b15778881461077757600080fd5b8063715018a6146106105780637abdc1ca146106255780637d1db4a51461063b57806388f82020146106515780638da5cb5b1461068a57806395558d84146106a857600080fd5b80633685d419116101fe57806349bd5a5e116101b757806349bd5a5e146105355780634a74bb021461055557806352390c02146105765780635342acb4146105965780636ddd1713146105cf57806370a08231146105f057600080fd5b80633685d4191461045c578063395093511461047c5780633bbac5791461049c57806342966c68146104d5578063437823ec146104f55780634549b0391461051557600080fd5b806323b872dd1161025057806323b872dd146103a45780632410d887146103c45780632d513f36146103e65780632d83811914610400578063313ce5671461042057806335e17cb91461043c57600080fd5b806306fdde03146102a3578063095ea7b3146102e757806313114a9d146103175780631694505e1461033657806316f2f1a81461036e57806318160ddd1461038457600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506040805180820190915260098152684275726e204c756e6160b81b60208201525b6040516102de9190612e1d565b60405180910390f35b3480156102f357600080fd5b50610307610302366004612e87565b610953565b60405190151581526020016102de565b34801561032357600080fd5b50600a545b6040519081526020016102de565b34801561034257600080fd5b50601954610356906001600160a01b031681565b6040516001600160a01b0390911681526020016102de565b34801561037a57600080fd5b50610328600e5481565b34801561039057600080fd5b506c520aa1fb49c9f80a72a0000000610328565b3480156103b057600080fd5b506103076103bf366004612eb3565b61096a565b3480156103d057600080fd5b506103e46103df366004612f02565b610a43565b005b3480156103f257600080fd5b506016546103079060ff1681565b34801561040c57600080fd5b5061032861041b366004612f3b565b610ad1565b34801561042c57600080fd5b50604051601281526020016102de565b34801561044857600080fd5b506103e4610457366004612f54565b610b55565b34801561046857600080fd5b506103e4610477366004612f96565b610c46565b34801561048857600080fd5b50610307610497366004612e87565b610dfc565b3480156104a857600080fd5b506103076104b7366004612f96565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156104e157600080fd5b506103e46104f0366004612f3b565b610e32565b34801561050157600080fd5b506103e4610510366004612f96565b610e69565b34801561052157600080fd5b50610328610530366004612fb3565b610eb7565b34801561054157600080fd5b50601a54610356906001600160a01b031681565b34801561056157600080fd5b50601a5461030790600160a81b900460ff1681565b34801561058257600080fd5b506103e4610591366004612f96565b610f51565b3480156105a257600080fd5b506103076105b1366004612f96565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105db57600080fd5b50601a5461030790600160b01b900460ff1681565b3480156105fc57600080fd5b5061032861060b366004612f96565b6110a4565b34801561061c57600080fd5b506103e4611103565b34801561063157600080fd5b5061032860115481565b34801561064757600080fd5b50610328601b5481565b34801561065d57600080fd5b5061030761066c366004612f96565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561069657600080fd5b506000546001600160a01b0316610356565b3480156106b457600080fd5b50600c54610356906001600160a01b031681565b3480156106d457600080fd5b5060408051808201909152600681526524424c554e4160d01b60208201526102d1565b34801561070357600080fd5b506103e4610712366004612f02565b611139565b34801561072357600080fd5b506103e4610732366004612f3b565b61122e565b34801561074357600080fd5b50610307610752366004612e87565b611262565b34801561076357600080fd5b50610307610772366004612e87565b6112b1565b34801561078357600080fd5b50600b54610356906001600160a01b031681565b3480156107a357600080fd5b506103076107b2366004612f96565b60086020526000908152604090205460ff1681565b3480156107d357600080fd5b506103e46107e2366004612f96565b611325565b3480156107f357600080fd5b50610307610802366004612f96565b60076020526000908152604090205460ff1681565b34801561082357600080fd5b506103e4610832366004612fd8565b611358565b34801561084357600080fd5b50610328601c5481565b34801561085957600080fd5b506103e4610868366004612f3b565b6113da565b34801561087957600080fd5b50610328610888366004612ff5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108bf57600080fd5b506103e46108ce366004612fd8565b61142c565b3480156108df57600080fd5b506103e46108ee366004612f96565b6114a3565b3480156108ff57600080fd5b506103e461090e366004612f3b565b6114ee565b34801561091f57600080fd5b506103e461092e366004612f96565b61155a565b34801561093f57600080fd5b506103e461094e366004613023565b6115f2565b600061096033848461169e565b5060015b92915050565b6001600160a01b03821660009081526017602052604081205460ff16156109ac5760405162461bcd60e51b81526004016109a390613048565b60405180910390fd5b3260009081526017602052604090205460ff16156109dc5760405162461bcd60e51b81526004016109a390613048565b6109e78484846117c3565b610a398433610a3485604051806060016040528060288152602001613259602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611cbb565b61169e565b5060019392505050565b6000546001600160a01b03163314610a6d5760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee91015b60405180910390a15050565b6000600954821115610b385760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109a3565b6000610b42611ce7565b9050610b4e8382611d0a565b9392505050565b6000546001600160a01b03163314610b7f5760405162461bcd60e51b81526004016109a39061307f565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284919082169063a9059cbb906044016020604051808303816000875af1158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf591906130b4565b50604080516001600160a01b0386811682526020820186905284168183015290517f03e22ea144aa78f0a88a3bc6036c5f6d5bc2d276affbc5f88c38a9346c5b2eee9181900360600190a150505050565b6000546001600160a01b03163314610c705760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b03811660009081526005602052604090205460ff16610cd85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016109a3565b60005b600654811015610df857816001600160a01b031660068281548110610d0257610d026130d1565b6000918252602090912001546001600160a01b031603610de65760068054610d2c906001906130fd565b81548110610d3c57610d3c6130d1565b600091825260209091200154600680546001600160a01b039092169183908110610d6857610d686130d1565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610dc057610dc0613114565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610df08161312a565b915050610cdb565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610960918590610a349086611d16565b6000546001600160a01b03163314610e5c5760405162461bcd60e51b81526004016109a39061307f565b610e663382611d22565b50565b6000546001600160a01b03163314610e935760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006c520aa1fb49c9f80a72a0000000831115610f165760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109a3565b81610f36576000610f2684611e5f565b5094965061096495505050505050565b6000610f4184611e5f565b5093965061096495505050505050565b6000546001600160a01b03163314610f7b5760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b03811660009081526005602052604090205460ff1615610fe45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109a3565b6001600160a01b0381166000908152600160205260409020541561103e576001600160a01b03811660009081526001602052604090205461102490610ad1565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff16156110e157506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461096490610ad1565b6000546001600160a01b0316331461112d5760405162461bcd60e51b81526004016109a39061307f565b6111376000611eba565b565b6000546001600160a01b031633146111635760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b0382163b6111d25760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a2043616e206f6e6c792062616e206f7220756e62616e20636f6e60448201526e74726163742061646472657373657360881b60648201526084016109a3565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f80069036c5381e9b8bf3feeaddce86ce3886eaabaddb4b90926400a11ba6bd1a9101610ac5565b6000546001600160a01b031633146112585760405162461bcd60e51b81526004016109a39061307f565b610e663382611f0a565b60006109603384610a34856040518060600160405280602581526020016132a1602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611cbb565b6001600160a01b03821660009081526017602052604081205460ff16156112ea5760405162461bcd60e51b81526004016109a390613048565b3260009081526017602052604090205460ff161561131a5760405162461bcd60e51b81526004016109a390613048565b6109603384846117c3565b6000546001600160a01b0316331461134f5760405162461bcd60e51b81526004016109a39061307f565b610e6681611fd8565b6000546001600160a01b031633146113825760405162461bcd60e51b81526004016109a39061307f565b601a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906113cf90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146114045760405162461bcd60e51b81526004016109a39061307f565b61142660646114206c520aa1fb49c9f80a72a00000008461230f565b90611d0a565b601b5550565b6000546001600160a01b031633146114565760405162461bcd60e51b81526004016109a39061307f565b601a8054821515600160b01b0260ff60b01b199091161790556040517f8bcc108c7d867d0a70433f71ecba3056c4dcc48eaabe4ca987f9fb1f836091d5906113cf90831515815260200190565b6000546001600160a01b031633146114cd5760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146115185760405162461bcd60e51b81526004016109a39061307f565b6000811161152557600080fd5b601c8190556040518181527fab1090599596cfb0c655b6424e552fba2cedf77457ed354fbe96e9abf4aa1f13906020016113cf565b6000546001600160a01b031633146115845760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b0381166115e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a3565b610e6681611eba565b6000546001600160a01b0316331461161c5760405162461bcd60e51b81526004016109a39061307f565b8147101561162957600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561165f573d6000803e3d6000fd5b50604080518381526001600160a01b03831660208201527f26d71ad100dab0e70a6d987dc1c52b5adfed7fb530cf990e0ce0207438e31f259101610ac5565b6001600160a01b0383166117005760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a3565b6001600160a01b0382166117615760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a3565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118275760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109a3565b6001600160a01b0382166118895760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109a3565b600081116118eb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109a3565b6000546001600160a01b0384811691161480159061191757506000546001600160a01b03838116911614155b1561197f57601b5481111561197f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109a3565b601a54600160b01b900460ff161580156119d357506001600160a01b03821660009081526007602052604090205460ff16806119d357506001600160a01b03831660009081526007602052604090205460ff165b15611a205760405162461bcd60e51b815260206004820152601e60248201527f427579696e6720616e642073656c6c696e672069732064697361626c6564000060448201526064016109a3565b6001600160a01b03831660009081526008602052604090205460ff1680611a5f57506001600160a01b03821660009081526008602052604090205460ff165b15611aa05760405162461bcd60e51b81526020600482015260116024820152701059191c995cdcc81a5cc818985b9b9959607a1b60448201526064016109a3565b6000611aab306110a4565b9050601b548110611abb5750601b545b601c5481108015908190611ad95750601a54600160a01b900460ff16155b8015611afd57506001600160a01b03841660009081526007602052604090205460ff165b8015611b125750601a54600160a81b900460ff165b8015611b3757506001600160a01b03851660009081526004602052604090205460ff16155b15611b4a57601c549150611b4a8261231b565b6001600160a01b03851660009081526007602052604090205460019060ff16158015611b8f57506001600160a01b03851660009081526007602052604090205460ff16155b15611b98575060005b60165460ff168015611bc657506001600160a01b0386163b151580611bc657506001600160a01b0385163b15155b15611bcf575060015b6001600160a01b03861660009081526004602052604090205460ff1680611c0e57506001600160a01b03851660009081526004602052604090205460ff165b15611c17575060005b6001600160a01b03861660009081526007602052604090205460ff1680611c4757506001600160a01b0386163b15155b15611c5f57600d54601355600e54601455600f546015555b6001600160a01b03851660009081526007602052604090205460ff1680611c8f57506001600160a01b0385163b15155b15611ca7576010546013556011546014556012546015555b611cb3868686846123c2565b505050505050565b60008184841115611cdf5760405162461bcd60e51b81526004016109a39190612e1d565b505050900390565b6000806000611cf46124e3565b9092509050611d038282611d0a565b9250505090565b6000610b4e8284613143565b6000610b4e8284613165565b6001600160a01b038216611d825760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109a3565b6001600160a01b03821660009081526001602052604090205481811015611df65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016109a3565b611e0082826130fd565b6001600160a01b03841660009081526001602052604081209190915560098054849290611e2e9084906130fd565b90915550506040518281526000906001600160a01b03851690600080516020613281833981519152906020016117b6565b6000806000806000806000806000806000611e798c612694565b93509350935093506000806000611e9a8f878787611e95611ce7565b6126e9565b919f509d509b509599509397509195509350505050919395979092949650565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216611f605760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016109a3565b8060096000828254611f729190613165565b90915550506001600160a01b03821660009081526001602052604081208054839290611f9f908490613165565b90915550506040518181526001600160a01b03831690600090600080516020613281833981519152906020015b60405180910390a35050565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561201b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203f919061317d565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b0919061317d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156120fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211f919061317d565b601a80546001600160a01b0319166001600160a01b039290921691821790556122a757806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a4919061317d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612215919061317d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612262573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612286919061317d565b601a80546001600160a01b0319166001600160a01b03929092169190911790555b601980546001600160a01b0319166001600160a01b0383811691909117909155601a546122d691166001610a43565b6040516001600160a01b03831681527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001610ac5565b6000610b4e828461319a565b601a805460ff60a01b1916600160a01b179055600061233b826002611d0a565b90506000612349838361274b565b90504761235583612757565b6000612361478361274b565b905061236d83826128a9565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601a805460ff60a01b19169055505050565b806123db576123db600060138190556014819055601555565b6001600160a01b03841660009081526005602052604090205460ff16801561241c57506001600160a01b03831660009081526005602052604090205460ff16155b156124315761242c848484612988565b6124dd565b6001600160a01b03841660009081526005602052604090205460ff1615801561247257506001600160a01b03831660009081526005602052604090205460ff165b156124825761242c848484612abc565b6001600160a01b03841660009081526005602052604090205460ff1680156124c257506001600160a01b03831660009081526005602052604090205460ff165b156124d25761242c848484612b7b565b6124dd848484612c04565b50505050565b60095460009081906c520aa1fb49c9f80a72a0000000825b60065481101561264a5782600160006006848154811061251d5761251d6130d1565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806125885750816002600060068481548110612561576125616130d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156125a8575050600954936c520aa1fb49c9f80a72a00000009350915050565b6125ee60016000600684815481106125c2576125c26130d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061274b565b9250612636600260006006848154811061260a5761260a6130d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061274b565b9150806126428161312a565b9150506124fb565b50600954612665906c520aa1fb49c9f80a72a0000000611d0a565b821015612686575050600954926c520aa1fb49c9f80a72a000000092509050565b90939092509050565b505050565b60008060008060006126a586612c5e565b905060006126b287612c7a565b905060006126bf88612c96565b905060006126d9826126d385818d8961274b565b9061274b565b9993985091965094509092505050565b60008080806126f8898661230f565b90506000612706898761230f565b90506000612714898861230f565b90506000612722898961230f565b90506000612736826126d38581898961274b565b949d949c50929a509298505050505050505050565b6000610b4e82846130fd565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061278c5761278c6130d1565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156127e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612809919061317d565b8160018151811061281c5761281c6130d1565b6001600160a01b039283166020918202929092010152601954612842913091168461169e565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac9479061287b9085906000908690309042906004016131b9565b600060405180830381600087803b15801561289557600080fd5b505af1158015611cb3573d6000803e3d6000fd5b6019546128c19030906001600160a01b03168461169e565b601954600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612931573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612956919061322a565b5050601a546040518481526001600160a01b039091169150309060008051602061328183398151915290602001611fcc565b600080600080600080600061299c88611e5f565b96509650965096509650965096506129e288600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461274b90919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612a11908861274b565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612a409087611d16565b6001600160a01b038a16600090815260016020526040902055612a6282612cb2565b612a6b81612d3a565b612a758584612df9565b886001600160a01b03168a6001600160a01b031660008051602061328183398151915286604051612aa891815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612ad088611e5f565b9650965096509650965096509650612b1687600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461274b90919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612b4c9085611d16565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612a409087611d16565b6000806000806000806000612b8f88611e5f565b9650965096509650965096509650612bd588600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461274b90919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612b16908861274b565b6000806000806000806000612c1888611e5f565b9650965096509650965096509650612a1187600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461274b90919063ffffffff16565b600061096460646114206013548561230f90919063ffffffff16565b600061096460646114206015548561230f90919063ffffffff16565b600061096460646114206014548561230f90919063ffffffff16565b6000612cbc611ce7565b90506000612cca838361230f565b30600090815260016020526040902054909150612ce79082611d16565b3060009081526001602090815260408083209390935560059052205460ff161561268f5730600090815260026020526040902054612d259084611d16565b30600090815260026020526040902055505050565b6000612d44611ce7565b90506000612d52838361230f565b600b546001600160a01b0316600090815260016020526040902054909150612d7a9082611d16565b600b80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561268f57600b546001600160a01b0316600090815260026020526040902054612dd99084611d16565b600b546001600160a01b0316600090815260026020526040902055505050565b600954612e06908361274b565b600955600a54612e169082611d16565b600a555050565b600060208083528351808285015260005b81811015612e4a57858101830151858201604001528201612e2e565b81811115612e5c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e6657600080fd5b60008060408385031215612e9a57600080fd5b8235612ea581612e72565b946020939093013593505050565b600080600060608486031215612ec857600080fd5b8335612ed381612e72565b92506020840135612ee381612e72565b929592945050506040919091013590565b8015158114610e6657600080fd5b60008060408385031215612f1557600080fd5b8235612f2081612e72565b91506020830135612f3081612ef4565b809150509250929050565b600060208284031215612f4d57600080fd5b5035919050565b600080600060608486031215612f6957600080fd5b8335612f7481612e72565b9250602084013591506040840135612f8b81612e72565b809150509250925092565b600060208284031215612fa857600080fd5b8135610b4e81612e72565b60008060408385031215612fc657600080fd5b823591506020830135612f3081612ef4565b600060208284031215612fea57600080fd5b8135610b4e81612ef4565b6000806040838503121561300857600080fd5b823561301381612e72565b91506020830135612f3081612e72565b6000806040838503121561303657600080fd5b823591506020830135612f3081612e72565b60208082526017908201527f596f752068617665206e6f20706f776572206865726521000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156130c657600080fd5b8151610b4e81612ef4565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561310f5761310f6130e7565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161313c5761313c6130e7565b5060010190565b60008261316057634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613178576131786130e7565b500190565b60006020828403121561318f57600080fd5b8151610b4e81612e72565b60008160001904831182151516156131b4576131b46130e7565b500290565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132095784516001600160a01b0316835293830193918301916001016131e4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561323f57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f062f2433a9c1f708745be675e62a226a5f5ad33b334a0edeb989c3430b94e664736f6c634300080e00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000000ff739af0039302e7b91ec72697a14a0389a50b9

Deployed Bytecode

0x6080604052600436106102975760003560e01c8063715018a61161015a578063c069d956116100c1578063dd62ed3e1161007a578063dd62ed3e1461086d578063e01af92c146108b3578063ea2f0b37146108d3578063f0f165af146108f3578063f2fde38b14610913578063faef9e671461093357600080fd5b8063c069d95614610797578063c0d78655146107c7578063c14a4239146107e7578063c49b9a8014610817578063d12a768814610837578063d543dbeb1461084d57600080fd5b806395d89b411161011357806395d89b41146106c8578063978e1cc8146106f7578063a0712d6814610717578063a457c2d714610737578063a9059cbb14610757578063b15778881461077757600080fd5b8063715018a6146106105780637abdc1ca146106255780637d1db4a51461063b57806388f82020146106515780638da5cb5b1461068a57806395558d84146106a857600080fd5b80633685d419116101fe57806349bd5a5e116101b757806349bd5a5e146105355780634a74bb021461055557806352390c02146105765780635342acb4146105965780636ddd1713146105cf57806370a08231146105f057600080fd5b80633685d4191461045c578063395093511461047c5780633bbac5791461049c57806342966c68146104d5578063437823ec146104f55780634549b0391461051557600080fd5b806323b872dd1161025057806323b872dd146103a45780632410d887146103c45780632d513f36146103e65780632d83811914610400578063313ce5671461042057806335e17cb91461043c57600080fd5b806306fdde03146102a3578063095ea7b3146102e757806313114a9d146103175780631694505e1461033657806316f2f1a81461036e57806318160ddd1461038457600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506040805180820190915260098152684275726e204c756e6160b81b60208201525b6040516102de9190612e1d565b60405180910390f35b3480156102f357600080fd5b50610307610302366004612e87565b610953565b60405190151581526020016102de565b34801561032357600080fd5b50600a545b6040519081526020016102de565b34801561034257600080fd5b50601954610356906001600160a01b031681565b6040516001600160a01b0390911681526020016102de565b34801561037a57600080fd5b50610328600e5481565b34801561039057600080fd5b506c520aa1fb49c9f80a72a0000000610328565b3480156103b057600080fd5b506103076103bf366004612eb3565b61096a565b3480156103d057600080fd5b506103e46103df366004612f02565b610a43565b005b3480156103f257600080fd5b506016546103079060ff1681565b34801561040c57600080fd5b5061032861041b366004612f3b565b610ad1565b34801561042c57600080fd5b50604051601281526020016102de565b34801561044857600080fd5b506103e4610457366004612f54565b610b55565b34801561046857600080fd5b506103e4610477366004612f96565b610c46565b34801561048857600080fd5b50610307610497366004612e87565b610dfc565b3480156104a857600080fd5b506103076104b7366004612f96565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156104e157600080fd5b506103e46104f0366004612f3b565b610e32565b34801561050157600080fd5b506103e4610510366004612f96565b610e69565b34801561052157600080fd5b50610328610530366004612fb3565b610eb7565b34801561054157600080fd5b50601a54610356906001600160a01b031681565b34801561056157600080fd5b50601a5461030790600160a81b900460ff1681565b34801561058257600080fd5b506103e4610591366004612f96565b610f51565b3480156105a257600080fd5b506103076105b1366004612f96565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105db57600080fd5b50601a5461030790600160b01b900460ff1681565b3480156105fc57600080fd5b5061032861060b366004612f96565b6110a4565b34801561061c57600080fd5b506103e4611103565b34801561063157600080fd5b5061032860115481565b34801561064757600080fd5b50610328601b5481565b34801561065d57600080fd5b5061030761066c366004612f96565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561069657600080fd5b506000546001600160a01b0316610356565b3480156106b457600080fd5b50600c54610356906001600160a01b031681565b3480156106d457600080fd5b5060408051808201909152600681526524424c554e4160d01b60208201526102d1565b34801561070357600080fd5b506103e4610712366004612f02565b611139565b34801561072357600080fd5b506103e4610732366004612f3b565b61122e565b34801561074357600080fd5b50610307610752366004612e87565b611262565b34801561076357600080fd5b50610307610772366004612e87565b6112b1565b34801561078357600080fd5b50600b54610356906001600160a01b031681565b3480156107a357600080fd5b506103076107b2366004612f96565b60086020526000908152604090205460ff1681565b3480156107d357600080fd5b506103e46107e2366004612f96565b611325565b3480156107f357600080fd5b50610307610802366004612f96565b60076020526000908152604090205460ff1681565b34801561082357600080fd5b506103e4610832366004612fd8565b611358565b34801561084357600080fd5b50610328601c5481565b34801561085957600080fd5b506103e4610868366004612f3b565b6113da565b34801561087957600080fd5b50610328610888366004612ff5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108bf57600080fd5b506103e46108ce366004612fd8565b61142c565b3480156108df57600080fd5b506103e46108ee366004612f96565b6114a3565b3480156108ff57600080fd5b506103e461090e366004612f3b565b6114ee565b34801561091f57600080fd5b506103e461092e366004612f96565b61155a565b34801561093f57600080fd5b506103e461094e366004613023565b6115f2565b600061096033848461169e565b5060015b92915050565b6001600160a01b03821660009081526017602052604081205460ff16156109ac5760405162461bcd60e51b81526004016109a390613048565b60405180910390fd5b3260009081526017602052604090205460ff16156109dc5760405162461bcd60e51b81526004016109a390613048565b6109e78484846117c3565b610a398433610a3485604051806060016040528060288152602001613259602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611cbb565b61169e565b5060019392505050565b6000546001600160a01b03163314610a6d5760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee91015b60405180910390a15050565b6000600954821115610b385760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109a3565b6000610b42611ce7565b9050610b4e8382611d0a565b9392505050565b6000546001600160a01b03163314610b7f5760405162461bcd60e51b81526004016109a39061307f565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284919082169063a9059cbb906044016020604051808303816000875af1158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf591906130b4565b50604080516001600160a01b0386811682526020820186905284168183015290517f03e22ea144aa78f0a88a3bc6036c5f6d5bc2d276affbc5f88c38a9346c5b2eee9181900360600190a150505050565b6000546001600160a01b03163314610c705760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b03811660009081526005602052604090205460ff16610cd85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016109a3565b60005b600654811015610df857816001600160a01b031660068281548110610d0257610d026130d1565b6000918252602090912001546001600160a01b031603610de65760068054610d2c906001906130fd565b81548110610d3c57610d3c6130d1565b600091825260209091200154600680546001600160a01b039092169183908110610d6857610d686130d1565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610dc057610dc0613114565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610df08161312a565b915050610cdb565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610960918590610a349086611d16565b6000546001600160a01b03163314610e5c5760405162461bcd60e51b81526004016109a39061307f565b610e663382611d22565b50565b6000546001600160a01b03163314610e935760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006c520aa1fb49c9f80a72a0000000831115610f165760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109a3565b81610f36576000610f2684611e5f565b5094965061096495505050505050565b6000610f4184611e5f565b5093965061096495505050505050565b6000546001600160a01b03163314610f7b5760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b03811660009081526005602052604090205460ff1615610fe45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109a3565b6001600160a01b0381166000908152600160205260409020541561103e576001600160a01b03811660009081526001602052604090205461102490610ad1565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff16156110e157506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461096490610ad1565b6000546001600160a01b0316331461112d5760405162461bcd60e51b81526004016109a39061307f565b6111376000611eba565b565b6000546001600160a01b031633146111635760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b0382163b6111d25760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a2043616e206f6e6c792062616e206f7220756e62616e20636f6e60448201526e74726163742061646472657373657360881b60648201526084016109a3565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f80069036c5381e9b8bf3feeaddce86ce3886eaabaddb4b90926400a11ba6bd1a9101610ac5565b6000546001600160a01b031633146112585760405162461bcd60e51b81526004016109a39061307f565b610e663382611f0a565b60006109603384610a34856040518060600160405280602581526020016132a1602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611cbb565b6001600160a01b03821660009081526017602052604081205460ff16156112ea5760405162461bcd60e51b81526004016109a390613048565b3260009081526017602052604090205460ff161561131a5760405162461bcd60e51b81526004016109a390613048565b6109603384846117c3565b6000546001600160a01b0316331461134f5760405162461bcd60e51b81526004016109a39061307f565b610e6681611fd8565b6000546001600160a01b031633146113825760405162461bcd60e51b81526004016109a39061307f565b601a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906113cf90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146114045760405162461bcd60e51b81526004016109a39061307f565b61142660646114206c520aa1fb49c9f80a72a00000008461230f565b90611d0a565b601b5550565b6000546001600160a01b031633146114565760405162461bcd60e51b81526004016109a39061307f565b601a8054821515600160b01b0260ff60b01b199091161790556040517f8bcc108c7d867d0a70433f71ecba3056c4dcc48eaabe4ca987f9fb1f836091d5906113cf90831515815260200190565b6000546001600160a01b031633146114cd5760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146115185760405162461bcd60e51b81526004016109a39061307f565b6000811161152557600080fd5b601c8190556040518181527fab1090599596cfb0c655b6424e552fba2cedf77457ed354fbe96e9abf4aa1f13906020016113cf565b6000546001600160a01b031633146115845760405162461bcd60e51b81526004016109a39061307f565b6001600160a01b0381166115e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a3565b610e6681611eba565b6000546001600160a01b0316331461161c5760405162461bcd60e51b81526004016109a39061307f565b8147101561162957600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561165f573d6000803e3d6000fd5b50604080518381526001600160a01b03831660208201527f26d71ad100dab0e70a6d987dc1c52b5adfed7fb530cf990e0ce0207438e31f259101610ac5565b6001600160a01b0383166117005760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a3565b6001600160a01b0382166117615760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a3565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118275760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109a3565b6001600160a01b0382166118895760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109a3565b600081116118eb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109a3565b6000546001600160a01b0384811691161480159061191757506000546001600160a01b03838116911614155b1561197f57601b5481111561197f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109a3565b601a54600160b01b900460ff161580156119d357506001600160a01b03821660009081526007602052604090205460ff16806119d357506001600160a01b03831660009081526007602052604090205460ff165b15611a205760405162461bcd60e51b815260206004820152601e60248201527f427579696e6720616e642073656c6c696e672069732064697361626c6564000060448201526064016109a3565b6001600160a01b03831660009081526008602052604090205460ff1680611a5f57506001600160a01b03821660009081526008602052604090205460ff165b15611aa05760405162461bcd60e51b81526020600482015260116024820152701059191c995cdcc81a5cc818985b9b9959607a1b60448201526064016109a3565b6000611aab306110a4565b9050601b548110611abb5750601b545b601c5481108015908190611ad95750601a54600160a01b900460ff16155b8015611afd57506001600160a01b03841660009081526007602052604090205460ff165b8015611b125750601a54600160a81b900460ff165b8015611b3757506001600160a01b03851660009081526004602052604090205460ff16155b15611b4a57601c549150611b4a8261231b565b6001600160a01b03851660009081526007602052604090205460019060ff16158015611b8f57506001600160a01b03851660009081526007602052604090205460ff16155b15611b98575060005b60165460ff168015611bc657506001600160a01b0386163b151580611bc657506001600160a01b0385163b15155b15611bcf575060015b6001600160a01b03861660009081526004602052604090205460ff1680611c0e57506001600160a01b03851660009081526004602052604090205460ff165b15611c17575060005b6001600160a01b03861660009081526007602052604090205460ff1680611c4757506001600160a01b0386163b15155b15611c5f57600d54601355600e54601455600f546015555b6001600160a01b03851660009081526007602052604090205460ff1680611c8f57506001600160a01b0385163b15155b15611ca7576010546013556011546014556012546015555b611cb3868686846123c2565b505050505050565b60008184841115611cdf5760405162461bcd60e51b81526004016109a39190612e1d565b505050900390565b6000806000611cf46124e3565b9092509050611d038282611d0a565b9250505090565b6000610b4e8284613143565b6000610b4e8284613165565b6001600160a01b038216611d825760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109a3565b6001600160a01b03821660009081526001602052604090205481811015611df65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016109a3565b611e0082826130fd565b6001600160a01b03841660009081526001602052604081209190915560098054849290611e2e9084906130fd565b90915550506040518281526000906001600160a01b03851690600080516020613281833981519152906020016117b6565b6000806000806000806000806000806000611e798c612694565b93509350935093506000806000611e9a8f878787611e95611ce7565b6126e9565b919f509d509b509599509397509195509350505050919395979092949650565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216611f605760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016109a3565b8060096000828254611f729190613165565b90915550506001600160a01b03821660009081526001602052604081208054839290611f9f908490613165565b90915550506040518181526001600160a01b03831690600090600080516020613281833981519152906020015b60405180910390a35050565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561201b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203f919061317d565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b0919061317d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156120fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211f919061317d565b601a80546001600160a01b0319166001600160a01b039290921691821790556122a757806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a4919061317d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612215919061317d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612262573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612286919061317d565b601a80546001600160a01b0319166001600160a01b03929092169190911790555b601980546001600160a01b0319166001600160a01b0383811691909117909155601a546122d691166001610a43565b6040516001600160a01b03831681527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001610ac5565b6000610b4e828461319a565b601a805460ff60a01b1916600160a01b179055600061233b826002611d0a565b90506000612349838361274b565b90504761235583612757565b6000612361478361274b565b905061236d83826128a9565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601a805460ff60a01b19169055505050565b806123db576123db600060138190556014819055601555565b6001600160a01b03841660009081526005602052604090205460ff16801561241c57506001600160a01b03831660009081526005602052604090205460ff16155b156124315761242c848484612988565b6124dd565b6001600160a01b03841660009081526005602052604090205460ff1615801561247257506001600160a01b03831660009081526005602052604090205460ff165b156124825761242c848484612abc565b6001600160a01b03841660009081526005602052604090205460ff1680156124c257506001600160a01b03831660009081526005602052604090205460ff165b156124d25761242c848484612b7b565b6124dd848484612c04565b50505050565b60095460009081906c520aa1fb49c9f80a72a0000000825b60065481101561264a5782600160006006848154811061251d5761251d6130d1565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806125885750816002600060068481548110612561576125616130d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156125a8575050600954936c520aa1fb49c9f80a72a00000009350915050565b6125ee60016000600684815481106125c2576125c26130d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061274b565b9250612636600260006006848154811061260a5761260a6130d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061274b565b9150806126428161312a565b9150506124fb565b50600954612665906c520aa1fb49c9f80a72a0000000611d0a565b821015612686575050600954926c520aa1fb49c9f80a72a000000092509050565b90939092509050565b505050565b60008060008060006126a586612c5e565b905060006126b287612c7a565b905060006126bf88612c96565b905060006126d9826126d385818d8961274b565b9061274b565b9993985091965094509092505050565b60008080806126f8898661230f565b90506000612706898761230f565b90506000612714898861230f565b90506000612722898961230f565b90506000612736826126d38581898961274b565b949d949c50929a509298505050505050505050565b6000610b4e82846130fd565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061278c5761278c6130d1565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156127e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612809919061317d565b8160018151811061281c5761281c6130d1565b6001600160a01b039283166020918202929092010152601954612842913091168461169e565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac9479061287b9085906000908690309042906004016131b9565b600060405180830381600087803b15801561289557600080fd5b505af1158015611cb3573d6000803e3d6000fd5b6019546128c19030906001600160a01b03168461169e565b601954600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612931573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612956919061322a565b5050601a546040518481526001600160a01b039091169150309060008051602061328183398151915290602001611fcc565b600080600080600080600061299c88611e5f565b96509650965096509650965096506129e288600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461274b90919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612a11908861274b565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612a409087611d16565b6001600160a01b038a16600090815260016020526040902055612a6282612cb2565b612a6b81612d3a565b612a758584612df9565b886001600160a01b03168a6001600160a01b031660008051602061328183398151915286604051612aa891815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612ad088611e5f565b9650965096509650965096509650612b1687600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461274b90919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612b4c9085611d16565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612a409087611d16565b6000806000806000806000612b8f88611e5f565b9650965096509650965096509650612bd588600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461274b90919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612b16908861274b565b6000806000806000806000612c1888611e5f565b9650965096509650965096509650612a1187600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461274b90919063ffffffff16565b600061096460646114206013548561230f90919063ffffffff16565b600061096460646114206015548561230f90919063ffffffff16565b600061096460646114206014548561230f90919063ffffffff16565b6000612cbc611ce7565b90506000612cca838361230f565b30600090815260016020526040902054909150612ce79082611d16565b3060009081526001602090815260408083209390935560059052205460ff161561268f5730600090815260026020526040902054612d259084611d16565b30600090815260026020526040902055505050565b6000612d44611ce7565b90506000612d52838361230f565b600b546001600160a01b0316600090815260016020526040902054909150612d7a9082611d16565b600b80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561268f57600b546001600160a01b0316600090815260026020526040902054612dd99084611d16565b600b546001600160a01b0316600090815260026020526040902055505050565b600954612e06908361274b565b600955600a54612e169082611d16565b600a555050565b600060208083528351808285015260005b81811015612e4a57858101830151858201604001528201612e2e565b81811115612e5c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e6657600080fd5b60008060408385031215612e9a57600080fd5b8235612ea581612e72565b946020939093013593505050565b600080600060608486031215612ec857600080fd5b8335612ed381612e72565b92506020840135612ee381612e72565b929592945050506040919091013590565b8015158114610e6657600080fd5b60008060408385031215612f1557600080fd5b8235612f2081612e72565b91506020830135612f3081612ef4565b809150509250929050565b600060208284031215612f4d57600080fd5b5035919050565b600080600060608486031215612f6957600080fd5b8335612f7481612e72565b9250602084013591506040840135612f8b81612e72565b809150509250925092565b600060208284031215612fa857600080fd5b8135610b4e81612e72565b60008060408385031215612fc657600080fd5b823591506020830135612f3081612ef4565b600060208284031215612fea57600080fd5b8135610b4e81612ef4565b6000806040838503121561300857600080fd5b823561301381612e72565b91506020830135612f3081612e72565b6000806040838503121561303657600080fd5b823591506020830135612f3081612e72565b60208082526017908201527f596f752068617665206e6f20706f776572206865726521000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156130c657600080fd5b8151610b4e81612ef4565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561310f5761310f6130e7565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161313c5761313c6130e7565b5060010190565b60008261316057634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613178576131786130e7565b500190565b60006020828403121561318f57600080fd5b8151610b4e81612e72565b60008160001904831182151516156131b4576131b46130e7565b500290565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132095784516001600160a01b0316835293830193918301916001016131e4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561323f57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f062f2433a9c1f708745be675e62a226a5f5ad33b334a0edeb989c3430b94e664736f6c634300080e0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000000ff739af0039302e7b91ec72697a14a0389a50b9

-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : BurnWallet (address): 0x000000000000000000000000000000000000dEaD
Arg [2] : liqWallet (address): 0x0Ff739af0039302e7B91EC72697a14A0389A50B9

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000000000000000000000000000000000000000dead
Arg [2] : 0000000000000000000000000ff739af0039302e7b91ec72697a14a0389a50b9


Deployed Bytecode Sourcemap

30347:24258:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33903:85;;;;;;;;;;-1:-1:-1;33975:5:0;;;;;;;;;;;;-1:-1:-1;;;33975:5:0;;;;33903:85;;;;;;;:::i;:::-;;;;;;;;34979:163;;;;;;;;;;-1:-1:-1;34979:163:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;34979:163:0;1072:187:1;36262:89:0;;;;;;;;;;-1:-1:-1;36333:10:0;;36262:89;;;1410:25:1;;;1398:2;1383:18;36262:89:0;1264:177:1;32104:41:0;;;;;;;;;;-1:-1:-1;32104:41:0;;;;-1:-1:-1;;;;;32104:41:0;;;;;;-1:-1:-1;;;;;1637:32:1;;;1619:51;;1607:2;1592:18;32104:41:0;1446:230:1;31491:30:0;;;;;;;;;;;;;;;;34186:97;;;;;;;;;;-1:-1:-1;31028:22:0;34186:97;;35150:467;;;;;;;;;;-1:-1:-1;35150:467:0;;;;;:::i;:::-;;:::i;51989:154::-;;;;;;;;;;-1:-1:-1;51989:154:0;;;;;:::i;:::-;;:::i;:::-;;31835:39;;;;;;;;;;-1:-1:-1;31835:39:0;;;;;;;;36807:253;;;;;;;;;;-1:-1:-1;36807:253:0;;;;;:::i;:::-;;:::i;34093:85::-;;;;;;;;;;-1:-1:-1;34093:85:0;;31282:2;2979:36:1;;2967:2;2952:18;34093:85:0;2837:184:1;52413:238:0;;;;;;;;;;-1:-1:-1;52413:238:0;;;;;:::i;:::-;;:::i;37409:479::-;;;;;;;;;;-1:-1:-1;37409:479:0;;;;;:::i;:::-;;:::i;35625:220::-;;;;;;;;;;-1:-1:-1;35625:220:0;;;;;:::i;:::-;;:::i;31984:112::-;;;;;;;;;;-1:-1:-1;31984:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;32062:26:0;32037:4;32062:26;;;:17;:26;;;;;;;;;31984:112;53810:91;;;;;;;;;;-1:-1:-1;53810:91:0;;;;;:::i;:::-;;:::i;38593:113::-;;;;;;;;;;-1:-1:-1;38593:113:0;;;;;:::i;:::-;;:::i;36359:440::-;;;;;;;;;;-1:-1:-1;36359:440:0;;;;;:::i;:::-;;:::i;32152:28::-;;;;;;;;;;-1:-1:-1;32152:28:0;;;;-1:-1:-1;;;;;32152:28:0;;;32229:40;;;;;;;;;;-1:-1:-1;32229:40:0;;;;-1:-1:-1;;;32229:40:0;;;;;;37068:333;;;;;;;;;;-1:-1:-1;37068:333:0;;;;;:::i;:::-;;:::i;43984:125::-;;;;;;;;;;-1:-1:-1;43984:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;44074:27:0;44050:4;44074:27;;;:18;:27;;;;;;;;;43984:125;32276:30;;;;;;;;;;-1:-1:-1;32276:30:0;;;;-1:-1:-1;;;32276:30:0;;;;;;34291:198;;;;;;;;;;-1:-1:-1;34291:198:0;;;;;:::i;:::-;;:::i;5910:103::-;;;;;;;;;;;;;:::i;31629:31::-;;;;;;;;;;;;;;;;32319:37;;;;;;;;;;;;;;;;36132:122;;;;;;;;;;-1:-1:-1;36132:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;36226:20:0;36202:4;36226:20;;;:11;:20;;;;;;;;;36132:122;5259:87;;;;;;;;;;-1:-1:-1;5305:7:0;5332:6;-1:-1:-1;;;;;5332:6:0;5259:87;;31349:32;;;;;;;;;;-1:-1:-1;31349:32:0;;;;-1:-1:-1;;;;;31349:32:0;;;33996:89;;;;;;;;;;-1:-1:-1;34070:7:0;;;;;;;;;;;;-1:-1:-1;;;34070:7:0;;;;33996:89;;52151:254;;;;;;;;;;-1:-1:-1;52151:254:0;;;;;:::i;:::-;;:::i;53221:91::-;;;;;;;;;;-1:-1:-1;53221:91:0;;;;;:::i;:::-;;:::i;35853:271::-;;;;;;;;;;-1:-1:-1;35853:271:0;;;;;:::i;:::-;;:::i;34497:321::-;;;;;;;;;;-1:-1:-1;34497:321:0;;;;;:::i;:::-;;:::i;31309:33::-;;;;;;;;;;-1:-1:-1;31309:33:0;;;;-1:-1:-1;;;;;31309:33:0;;;30892:42;;;;;;;;;;-1:-1:-1;30892:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40147:95;;;;;;;;;;-1:-1:-1;40147:95:0;;;;;:::i;:::-;;:::i;30818:40::-;;;;;;;;;;-1:-1:-1;30818:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39013:175;;;;;;;;;;-1:-1:-1;39013:175:0;;;;;:::i;:::-;;:::i;32363:57::-;;;;;;;;;;;;;;;;38843:162;;;;;;;;;;-1:-1:-1;38843:162:0;;;;;:::i;:::-;;:::i;34826:145::-;;;;;;;;;;-1:-1:-1;34826:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;34936:18:0;;;34909:7;34936:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;34826:145;39200:141;;;;;;;;;;-1:-1:-1;39200:141:0;;;;;:::i;:::-;;:::i;38718:112::-;;;;;;;;;;-1:-1:-1;38718:112:0;;;;;:::i;:::-;;:::i;39354:230::-;;;;;;;;;;-1:-1:-1;39354:230:0;;;;;:::i;:::-;;:::i;6168:201::-;;;;;;;;;;-1:-1:-1;6168:201:0;;;;;:::i;:::-;;:::i;52663:212::-;;;;;;;;;;-1:-1:-1;52663:212:0;;;;;:::i;:::-;;:::i;34979:163::-;35056:4;35073:39;4206:10;35096:7;35105:6;35073:8;:39::i;:::-;-1:-1:-1;35130:4:0;34979:163;;;;;:::o;35150:467::-;-1:-1:-1;;;;;35276:28:0;;35250:4;35276:28;;;:17;:28;;;;;;;;35275:29;35267:65;;;;-1:-1:-1;;;35267:65:0;;;;;;;:::i;:::-;;;;;;;;;35370:9;35352:28;;;;:17;:28;;;;;;;;35351:29;35343:65;;;;-1:-1:-1;;;35343:65:0;;;;;;;:::i;:::-;35419:36;35429:6;35437:9;35448:6;35419:9;:36::i;:::-;35466:121;35475:6;4206:10;35497:89;35535:6;35497:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35497:19:0;;;;;;:11;:19;;;;;;;;4206:10;35497:33;;;;;;;;;;:37;:89::i;:::-;35466:8;:121::i;:::-;-1:-1:-1;35605:4:0;35150:467;;;;;:::o;51989:154::-;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52068:17:0;::::1;;::::0;;;:7:::1;:17;::::0;;;;;;;;:25;;-1:-1:-1;;52068:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;52109:26;;6101:51:1;;;6168:18;;;6161:50;52109:26:0::1;::::0;6074:18:1;52109:26:0::1;;;;;;;;51989:154:::0;;:::o;36807:253::-;36873:7;36912;;36901;:18;;36893:73;;;;-1:-1:-1;;;36893:73:0;;6424:2:1;36893:73:0;;;6406:21:1;6463:2;6443:18;;;6436:30;6502:34;6482:18;;;6475:62;-1:-1:-1;;;6553:18:1;;;6546:40;6603:19;;36893:73:0;6222:406:1;36893:73:0;36977:19;37000:10;:8;:10::i;:::-;36977:33;-1:-1:-1;37028:24:0;:7;36977:33;37028:11;:24::i;:::-;37021:31;36807:253;-1:-1:-1;;;36807:253:0:o;52413:238::-;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;52560:27:::1;::::0;-1:-1:-1;;;52560:27:0;;-1:-1:-1;;;;;6825:32:1;;;52560:27:0::1;::::0;::::1;6807:51:1::0;6874:18;;;6867:34;;;52538:10:0;;52560:14;;::::1;::::0;::::1;::::0;6780:18:1;;52560:27:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;52603:40:0::1;::::0;;-1:-1:-1;;;;;7420:15:1;;;7402:34;;7467:2;7452:18;;7445:34;;;7515:15;;7495:18;;;7488:43;52603:40:0;;::::1;::::0;;;;7352:2:1;52603:40:0;;::::1;52505:146;52413:238:::0;;;:::o;37409:479::-;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37491:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37483:60;;;::::0;-1:-1:-1;;;37483:60:0;;7744:2:1;37483:60:0::1;::::0;::::1;7726:21:1::0;7783:2;7763:18;;;7756:30;7822:29;7802:18;;;7795:57;7869:18;;37483:60:0::1;7542:351:1::0;37483:60:0::1;37559:9;37554:327;37578:9;:16:::0;37574:20;::::1;37554:327;;;37636:7;-1:-1:-1::0;;;;;37620:23:0::1;:9;37630:1;37620:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37620:12:0::1;:23:::0;37616:254:::1;;37679:9;37689:16:::0;;:20:::1;::::0;37708:1:::1;::::0;37689:20:::1;:::i;:::-;37679:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;37664:9:::1;:12:::0;;-1:-1:-1;;;;;37679:31:0;;::::1;::::0;37674:1;;37664:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;37664:46:0::1;-1:-1:-1::0;;;;;37664:46:0;;::::1;;::::0;;37729:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;37768:11:::1;:20:::0;;;;:28;;-1:-1:-1;;37768:28:0::1;::::0;;37815:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;37815:15:0;;;;;-1:-1:-1;;;;;;37815:15:0::1;::::0;;;;;37554:327:::1;37409:479:::0;:::o;37616:254::-:1;37596:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37554:327;;;;37409:479:::0;:::o;35625:220::-;4206:10;35715:4;35764:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;35764:34:0;;;;;;;;;;35715:4;;35732:83;;35755:7;;35764:50;;35803:10;35764:38;:50::i;53810:91::-;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;53868:25:::1;53874:10;53886:6;53868:5;:25::i;:::-;53810:91:::0;:::o;38593:113::-;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38664:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;38664:34:0::1;38694:4;38664:34;::::0;;38593:113::o;36359:440::-;36451:7;31028:22;36479:7;:18;;36471:62;;;;-1:-1:-1;;;36471:62:0;;8766:2:1;36471:62:0;;;8748:21:1;8805:2;8785:18;;;8778:30;8844:33;8824:18;;;8817:61;8895:18;;36471:62:0;8564:355:1;36471:62:0;36549:17;36544:248;;36584:15;36609:19;36620:7;36609:10;:19::i;:::-;-1:-1:-1;36583:45:0;;-1:-1:-1;36643:14:0;;-1:-1:-1;;;;;;36643:14:0;36544:248;36692:23;36724:19;36735:7;36724:10;:19::i;:::-;-1:-1:-1;36690:53:0;;-1:-1:-1;36758:22:0;;-1:-1:-1;;;;;;36758:22:0;37068:333;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37151:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37150:21;37142:61;;;::::0;-1:-1:-1;;;37142:61:0;;9126:2:1;37142:61:0::1;::::0;::::1;9108:21:1::0;9165:2;9145:18;;;9138:30;9204:29;9184:18;;;9177:57;9251:18;;37142:61:0::1;8924:351:1::0;37142:61:0::1;-1:-1:-1::0;;;;;37217:16:0;::::1;37236:1;37217:16:::0;;;:7:::1;:16;::::0;;;;;:20;37214:108:::1;;-1:-1:-1::0;;;;;37293:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37273:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;37254:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;37214:108:::1;-1:-1:-1::0;;;;;37332:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;37332:27:0::1;37355:4;37332:27:::0;;::::1;::::0;;;37370:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;37370:23:0::1;::::0;;::::1;::::0;;37068:333::o;34291:198::-;-1:-1:-1;;;;;34381:20:0;;34357:7;34381:20;;;:11;:20;;;;;;;;34377:49;;;-1:-1:-1;;;;;;34410:16:0;;;;;:7;:16;;;;;;;34291:198::o;34377:49::-;-1:-1:-1;;;;;34464:16:0;;;;;;:7;:16;;;;;;34444:37;;:19;:37::i;5910:103::-;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;5975:30:::1;6002:1;5975:18;:30::i;:::-;5910:103::o:0;52151:254::-;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52242:19:0;::::1;7731:20:::0;52234:81:::1;;;::::0;-1:-1:-1;;;52234:81:0;;9482:2:1;52234:81:0::1;::::0;::::1;9464:21:1::0;9521:2;9501:18;;;9494:30;9560:34;9540:18;;;9533:62;-1:-1:-1;;;9611:18:1;;;9604:45;9666:19;;52234:81:0::1;9280:411:1::0;52234:81:0::1;-1:-1:-1::0;;;;;52326:19:0;::::1;;::::0;;;:9:::1;:19;::::0;;;;;;;;:27;;-1:-1:-1;;52326:27:0::1;::::0;::::1;;::::0;;::::1;::::0;;;52369:28;;6101:51:1;;;6168:18;;;6161:50;52369:28:0::1;::::0;6074:18:1;52369:28:0::1;5933:284:1::0;53221:91:0;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;53279:25:::1;53285:10;53297:6;53279:5;:25::i;35853:271::-:0;35948:4;35965:129;4206:10;35988:7;35997:96;36036:15;35997:96;;;;;;;;;;;;;;;;;4206:10;35997:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;35997:34:0;;;;;;;;;;;;:38;:96::i;34497:321::-;-1:-1:-1;;;;;34603:28:0;;34577:4;34603:28;;;:17;:28;;;;;;;;34602:29;34594:65;;;;-1:-1:-1;;;34594:65:0;;;;;;;:::i;:::-;34697:9;34679:28;;;;:17;:28;;;;;;;;34678:29;34670:65;;;;-1:-1:-1;;;34670:65:0;;;;;;;:::i;:::-;34746:42;4206:10;34770:9;34781:6;34746:9;:42::i;40147:95::-;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;40215:19:::1;40226:7;40215:10;:19::i;39013:175::-:0;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;39094:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;39094:32:0::1;-1:-1:-1::0;;;;39094:32:0;;::::1;;::::0;;39142:38:::1;::::0;::::1;::::0;::::1;::::0;39118:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;39142:38:0::1;;;;;;;;39013:175:::0;:::o;38843:162::-;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;38937:60:::1;38981:5;38937:25;31028:22;38949:12:::0;38937:11:::1;:25::i;:::-;:29:::0;::::1;:60::i;:::-;38922:12;:75:::0;-1:-1:-1;38843:162:0:o;39200:141::-;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;39271:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;39271:22:0::1;-1:-1:-1::0;;;;39271:22:0;;::::1;;::::0;;39309:24:::1;::::0;::::1;::::0;::::1;::::0;39285:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;38718:112:0;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38787:27:0::1;38817:5;38787:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;38787:35:0::1;::::0;;38718:112::o;39354:230::-;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;39463:1:::1;39453:7;:11;39445:20;;;::::0;::::1;;39476:29;:39:::0;;;39531:45:::1;::::0;1410:25:1;;;39531:45:0::1;::::0;1398:2:1;1383:18;39531:45:0::1;1264:177:1::0;6168:201:0;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6257:22:0;::::1;6249:73;;;::::0;-1:-1:-1;;;6249:73:0;;9898:2:1;6249:73:0::1;::::0;::::1;9880:21:1::0;9937:2;9917:18;;;9910:30;9976:34;9956:18;;;9949:62;-1:-1:-1;;;10027:18:1;;;10020:36;10073:19;;6249:73:0::1;9696:402:1::0;6249:73:0::1;6333:28;6352:8;6333:18;:28::i;52663:212::-:0;5305:7;5332:6;-1:-1:-1;;;;;5332:6:0;4206:10;5479:23;5471:68;;;;-1:-1:-1;;;5471:68:0;;;;;;;:::i;:::-;52777:7:::1;52752:21;:32;;52744:41;;;::::0;::::1;;52796:29;::::0;-1:-1:-1;;;;;52796:20:0;::::1;::::0;:29;::::1;;;::::0;52817:7;;52796:29:::1;::::0;;;52817:7;52796:20;:29;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;52841:26:0::1;::::0;;10277:25:1;;;-1:-1:-1;;;;;10338:32:1;;10333:2;10318:18;;10311:60;52841:26:0::1;::::0;10250:18:1;52841:26:0::1;10103:274:1::0;44117:337:0;-1:-1:-1;;;;;44210:19:0;;44202:68;;;;-1:-1:-1;;;44202:68:0;;10584:2:1;44202:68:0;;;10566:21:1;10623:2;10603:18;;;10596:30;10662:34;10642:18;;;10635:62;-1:-1:-1;;;10713:18:1;;;10706:34;10757:19;;44202:68:0;10382:400:1;44202:68:0;-1:-1:-1;;;;;44289:21:0;;44281:68;;;;-1:-1:-1;;;44281:68:0;;10989:2:1;44281:68:0;;;10971:21:1;11028:2;11008:18;;;11001:30;11067:34;11047:18;;;11040:62;-1:-1:-1;;;11118:18:1;;;11111:32;11160:19;;44281:68:0;10787:398:1;44281:68:0;-1:-1:-1;;;;;44362:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;44414:32;;1410:25:1;;;44414:32:0;;1383:18:1;44414:32:0;;;;;;;;44117:337;;;:::o;44462:2813::-;-1:-1:-1;;;;;44584:18:0;;44576:68;;;;-1:-1:-1;;;44576:68:0;;11392:2:1;44576:68:0;;;11374:21:1;11431:2;11411:18;;;11404:30;11470:34;11450:18;;;11443:62;-1:-1:-1;;;11521:18:1;;;11514:35;11566:19;;44576:68:0;11190:401:1;44576:68:0;-1:-1:-1;;;;;44663:16:0;;44655:64;;;;-1:-1:-1;;;44655:64:0;;11798:2:1;44655:64:0;;;11780:21:1;11837:2;11817:18;;;11810:30;11876:34;11856:18;;;11849:62;-1:-1:-1;;;11927:18:1;;;11920:33;11970:19;;44655:64:0;11596:399:1;44655:64:0;44747:1;44738:6;:10;44730:64;;;;-1:-1:-1;;;44730:64:0;;12202:2:1;44730:64:0;;;12184:21:1;12241:2;12221:18;;;12214:30;12280:34;12260:18;;;12253:62;-1:-1:-1;;;12331:18:1;;;12324:39;12380:19;;44730:64:0;12000:405:1;44730:64:0;5305:7;5332:6;-1:-1:-1;;;;;44808:15:0;;;5332:6;;44808:15;;;;:32;;-1:-1:-1;5305:7:0;5332:6;-1:-1:-1;;;;;44827:13:0;;;5332:6;;44827:13;;44808:32;44805:125;;;44873:12;;44863:6;:22;;44855:75;;;;-1:-1:-1;;;44855:75:0;;12612:2:1;44855:75:0;;;12594:21:1;12651:2;12631:18;;;12624:30;12690:34;12670:18;;;12663:62;-1:-1:-1;;;12741:18:1;;;12734:38;12789:19;;44855:75:0;12410:404:1;44855:75:0;44959:11;;-1:-1:-1;;;44959:11:0;;;;44958:12;:46;;;;-1:-1:-1;;;;;;44975:11:0;;;;;;:7;:11;;;;;;;;;:28;;-1:-1:-1;;;;;;44990:13:0;;;;;;:7;:13;;;;;;;;44975:28;44955:104;;;45019:40;;-1:-1:-1;;;45019:40:0;;13021:2:1;45019:40:0;;;13003:21:1;13060:2;13040:18;;;13033:30;13099:32;13079:18;;;13072:60;13149:18;;45019:40:0;12819:354:1;44955:104:0;-1:-1:-1;;;;;45075:15:0;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;45094:13:0;;;;;;:9;:13;;;;;;;;45075:32;45072:91;;;45124:27;;-1:-1:-1;;;45124:27:0;;13380:2:1;45124:27:0;;;13362:21:1;13419:2;13399:18;;;13392:30;-1:-1:-1;;;13438:18:1;;;13431:47;13495:18;;45124:27:0;13178:341:1;45072:91:0;45457:28;45488:24;45506:4;45488:9;:24::i;:::-;45457:55;;45560:12;;45536:20;:36;45533:103;;-1:-1:-1;45612:12:0;;45533:103;45707:29;;45683:53;;;;;;;45765;;-1:-1:-1;45802:16:0;;-1:-1:-1;;;45802:16:0;;;;45801:17;45765:53;:81;;;;-1:-1:-1;;;;;;45835:11:0;;;;;;:7;:11;;;;;;;;45765:81;:119;;;;-1:-1:-1;45863:21:0;;-1:-1:-1;;;45863:21:0;;;;45765:119;:161;;;;-1:-1:-1;;;;;;45902:24:0;;;;;;:18;:24;;;;;;;;45901:25;45765:161;45747:321;;;45976:29;;45953:52;;46020:36;46035:20;46020:14;:36::i;:::-;-1:-1:-1;;;;;46240:13:0;;46150:12;46240:13;;;:7;:13;;;;;;46165:4;;46240:13;;46239:14;:30;;;;-1:-1:-1;;;;;;46258:11:0;;;;;;:7;:11;;;;;;;;46257:12;46239:30;46236:77;;;-1:-1:-1;46296:5:0;46236:77;46410:20;;;;:62;;;;-1:-1:-1;;;;;;46435:15:0;;7731:20;7779:8;;46435:36;;;-1:-1:-1;;;;;;46456:13:0;;7731:20;7779:8;;46456:15;46407:108;;;-1:-1:-1;46499:4:0;46407:108;-1:-1:-1;;;;;46615:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;46643:22:0;;;;;;:18;:22;;;;;;;;46615:50;46612:96;;;-1:-1:-1;46691:5:0;46612:96;-1:-1:-1;;;;;46748:13:0;;;;;;:7;:13;;;;;;;;;:34;;-1:-1:-1;;;;;;46765:15:0;;7731:20;7779:8;;46765:17;46745:170;;;46809:10;;46799:7;:20;46845:11;;46834:8;:22;46887:16;;46871:13;:32;46745:170;-1:-1:-1;;;;;46964:11:0;;;;;;:7;:11;;;;;;;;;:30;;-1:-1:-1;;;;;;46979:13:0;;7731:20;7779:8;;46979:15;46961:181;;;47021:11;;47011:7;:21;47058:12;;47047:8;:23;47101:17;;47085:13;:33;46961:181;47229:38;47244:4;47249:2;47252:6;47259:7;47229:14;:38::i;:::-;44565:2710;;;44462:2813;;;:::o;20242:240::-;20362:7;20423:12;20415:6;;;;20407:29;;;;-1:-1:-1;;;20407:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;20458:5:0;;;20242:240::o;41888:163::-;41929:7;41950:15;41967;41986:19;:17;:19::i;:::-;41949:56;;-1:-1:-1;41949:56:0;-1:-1:-1;42023:20:0;41949:56;;42023:11;:20::i;:::-;42016:27;;;;41888:163;:::o;19100:98::-;19158:7;19185:5;19189:1;19185;:5;:::i;17963:98::-;18021:7;18048:5;18052:1;18048;:5;:::i;53320:485::-;-1:-1:-1;;;;;53404:21:0;;53396:67;;;;-1:-1:-1;;;53396:67:0;;14081:2:1;53396:67:0;;;14063:21:1;14120:2;14100:18;;;14093:30;14159:34;14139:18;;;14132:62;-1:-1:-1;;;14210:18:1;;;14203:31;14251:19;;53396:67:0;13879:397:1;53396:67:0;-1:-1:-1;;;;;53563:16:0;;53538:22;53563:16;;;:7;:16;;;;;;53598:24;;;;53590:71;;;;-1:-1:-1;;;53590:71:0;;14483:2:1;53590:71:0;;;14465:21:1;14522:2;14502:18;;;14495:30;14561:34;14541:18;;;14534:62;-1:-1:-1;;;14612:18:1;;;14605:32;14654:19;;53590:71:0;14281:398:1;53590:71:0;53691:23;53708:6;53691:14;:23;:::i;:::-;-1:-1:-1;;;;;53672:16:0;;;;;;:7;:16;;;;;:42;;;;53725:7;:17;;53736:6;;53672:16;53725:17;;53736:6;;53725:17;:::i;:::-;;;;-1:-1:-1;;53760:37:0;;1410:25:1;;;53786:1:0;;-1:-1:-1;;;;;53760:37:0;;;-1:-1:-1;;;;;;;;;;;53760:37:0;1398:2:1;1383:18;53760:37:0;1264:177:1;40504:454:0;40563:7;40572;40581;40590;40599;40608;40617;40638:23;40663:12;40677:18;40697:12;40713:20;40725:7;40713:11;:20::i;:::-;40637:96;;;;;;;;40745:15;40762:23;40787:12;40803:56;40815:7;40824:4;40830:10;40842:4;40848:10;:8;:10::i;:::-;40803:11;:56::i;:::-;40744:115;;-1:-1:-1;40744:115:0;-1:-1:-1;40744:115:0;-1:-1:-1;40910:15:0;;-1:-1:-1;40927:4:0;;-1:-1:-1;40933:10:0;;-1:-1:-1;40945:4:0;-1:-1:-1;;;;40504:454:0;;;;;;;;;:::o;6529:191::-;6603:16;6622:6;;-1:-1:-1;;;;;6639:17:0;;;-1:-1:-1;;;;;;6639:17:0;;;;;;6672:40;;6622:6;;;;;;;6672:40;;6603:16;6672:40;6592:128;6529:191;:::o;52883:331::-;-1:-1:-1;;;;;52967:21:0;;52959:65;;;;-1:-1:-1;;;52959:65:0;;14886:2:1;52959:65:0;;;14868:21:1;14925:2;14905:18;;;14898:30;14964:33;14944:18;;;14937:61;15015:18;;52959:65:0;14684:355:1;52959:65:0;53110:6;53099:7;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;53127:16:0;;;;;;:7;:16;;;;;:26;;53147:6;;53127:16;:26;;53147:6;;53127:26;:::i;:::-;;;;-1:-1:-1;;53169:37:0;;1410:25:1;;;-1:-1:-1;;;;;53169:37:0;;;53186:1;;-1:-1:-1;;;;;;;;;;;53169:37:0;1398:2:1;1383:18;53169:37:0;;;;;;;;52883:331;;:::o;39598:537::-;39654:35;39711:7;39654:65;;39764:16;-1:-1:-1;;;;;39764:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39746:53:0;;39808:4;39815:16;-1:-1:-1;;;;;39815:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39746:93;;-1:-1:-1;;;;;;39746:93:0;;;;;;;-1:-1:-1;;;;;15530:15:1;;;39746:93:0;;;15512:34:1;15582:15;;15562:18;;;15555:43;15447:18;;39746:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39730:13;:109;;-1:-1:-1;;;;;;39730:109:0;-1:-1:-1;;;;;39730:109:0;;;;;;;;;39850:157;;39929:16;-1:-1:-1;;;;;39929:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39911:56:0;;39976:4;39983:16;-1:-1:-1;;;;;39983:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39911:96;;-1:-1:-1;;;;;;39911:96:0;;;;;;;-1:-1:-1;;;;;15530:15:1;;;39911:96:0;;;15512:34:1;15582:15;;15562:18;;;15555:43;15447:18;;39911:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39895:13;:112;;-1:-1:-1;;;;;;39895:112:0;-1:-1:-1;;;;;39895:112:0;;;;;;;;;;39850:157;40018:15;:34;;-1:-1:-1;;;;;;40018:34:0;-1:-1:-1;;;;;40018:34:0;;;;;;;;;;40073:13;;40063:30;;40073:13;-1:-1:-1;40063:9:0;:30::i;:::-;40109:18;;-1:-1:-1;;;;;1637:32:1;;1619:51;;40109:18:0;;1607:2:1;1592:18;40109::0;1446:230:1;18701:98:0;18759:7;18786:5;18790:1;18786;:5;:::i;47283:985::-;33229:16;:23;;-1:-1:-1;;;;33229:23:0;-1:-1:-1;;;33229:23:0;;;;47434:27:::1;:20:::0;47459:1:::1;47434:24;:27::i;:::-;47419:42:::0;-1:-1:-1;47472:17:0::1;47492:30;:20:::0;47419:42;47492:24:::1;:30::i;:::-;47472:50:::0;-1:-1:-1;47825:21:0::1;47891:22;47908:4:::0;47891:16:::1;:22::i;:::-;48044:18;48065:41;:21;48091:14:::0;48065:25:::1;:41::i;:::-;48044:62;;48156:35;48169:9;48180:10;48156:12;:35::i;:::-;48217:43;::::0;;15984:25:1;;;16040:2;16025:18;;16018:34;;;16068:18;;;16061:34;;;48217:43:0::1;::::0;15972:2:1;15957:18;48217:43:0::1;;;;;;;-1:-1:-1::0;;33275:16:0;:24;;-1:-1:-1;;;;33275:24:0;;;-1:-1:-1;;;47283:985:0:o;49544:642::-;49655:7;49651:40;;49677:14;43912:1;43902:7;:11;;;43924:8;:12;;;43947:13;:17;43859:113;49677:14;-1:-1:-1;;;;;49716:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;49740:22:0;;;;;;:11;:22;;;;;;;;49739:23;49716:46;49712:467;;;49779:48;49801:6;49809:9;49820:6;49779:21;:48::i;:::-;49712:467;;;-1:-1:-1;;;;;49850:19:0;;;;;;:11;:19;;;;;;;;49849:20;:46;;;;-1:-1:-1;;;;;;49873:22:0;;;;;;:11;:22;;;;;;;;49849:46;49845:334;;;49912:46;49932:6;49940:9;49951:6;49912:19;:46::i;49845:334::-;-1:-1:-1;;;;;49980:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;50003:22:0;;;;;;:11;:22;;;;;;;;49980:45;49976:203;;;50042:48;50064:6;50072:9;50083:6;50042:21;:48::i;49976:203::-;50123:44;50141:6;50149:9;50160:6;50123:17;:44::i;:::-;49544:642;;;;:::o;42059:561::-;42156:7;;42109;;;;31028:22;42109:7;42216:289;42240:9;:16;42236:20;;42216:289;;;42306:7;42282;:21;42290:9;42300:1;42290:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42290:12:0;42282:21;;;;;;;;;;;;;:31;;:66;;;42341:7;42317;:21;42325:9;42335:1;42325:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42325:12:0;42317:21;;;;;;;;;;;;;:31;42282:66;42278:97;;;-1:-1:-1;;42358:7:0;;;31028:22;;-1:-1:-1;42059:561:0;-1:-1:-1;;42059:561:0:o;42278:97::-;42400:34;42412:7;:21;42420:9;42430:1;42420:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42420:12:0;42412:21;;;;;;;;;;;;;42400:7;;:11;:34::i;:::-;42390:44;;42459:34;42471:7;:21;42479:9;42489:1;42479:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42479:12:0;42471:21;;;;;;;;;;;;;42459:7;;:11;:34::i;:::-;42449:44;-1:-1:-1;42258:3:0;;;;:::i;:::-;;;;42216:289;;;-1:-1:-1;42529:7:0;;:20;;31028:22;42529:11;:20::i;:::-;42519:7;:30;42515:61;;;-1:-1:-1;;42559:7:0;;;31028:22;;-1:-1:-1;42059:561:0;-1:-1:-1;42059:561:0:o;42515:61::-;42595:7;;42604;;-1:-1:-1;42059:561:0;-1:-1:-1;42059:561:0:o;54504:92::-;;;;:::o;40966:406::-;41026:7;41035;41044;41053;41073:12;41088:24;41104:7;41088:15;:24::i;:::-;41073:39;;41123:18;41144:30;41166:7;41144:21;:30::i;:::-;41123:51;;41185:12;41200:25;41217:7;41200:16;:25::i;:::-;41185:40;-1:-1:-1;41236:23:0;41262:43;41185:40;41262:33;41284:10;41262:33;:7;41274:4;41262:11;:17::i;:::-;:21;;:33::i;:43::-;41236:69;41341:4;;-1:-1:-1;41347:10:0;;-1:-1:-1;41347:10:0;-1:-1:-1;40966:406:0;;-1:-1:-1;;;40966:406:0:o;41380:500::-;41509:7;;;;41565:24;:7;41577:11;41565;:24::i;:::-;41547:42;-1:-1:-1;41600:12:0;41615:21;:4;41624:11;41615:8;:21::i;:::-;41600:36;-1:-1:-1;41647:18:0;41668:27;:10;41683:11;41668:14;:27::i;:::-;41647:48;-1:-1:-1;41706:12:0;41721:21;:4;41730:11;41721:8;:21::i;:::-;41706:36;-1:-1:-1;41753:23:0;41779:43;41706:36;41779:33;41801:10;41779:33;:7;41791:4;41779:11;:17::i;:43::-;41841:7;;;;-1:-1:-1;41867:4:0;;-1:-1:-1;41380:500:0;;-1:-1:-1;;;;;;;;;41380:500:0:o;18344:98::-;18402:7;18429:5;18433:1;18429;:5;:::i;48276:589::-;48426:16;;;48440:1;48426:16;;;;;;;;48402:21;;48426:16;;;;;;;;;;-1:-1:-1;48426:16:0;48402:40;;48471:4;48453;48458:1;48453:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48453:23:0;;;:7;;;;;;;;;;:23;;;;48497:15;;:22;;;-1:-1:-1;;;48497:22:0;;;;:15;;;;;:20;;:22;;;;;48453:7;;48497:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48487:4;48492:1;48487:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48487:32:0;;;:7;;;;;;;;;:32;48564:15;;48532:62;;48549:4;;48564:15;48582:11;48532:8;:62::i;:::-;48633:15;;:224;;-1:-1:-1;;;48633:224:0;;-1:-1:-1;;;;;48633:15:0;;;;:66;;:224;;48714:11;;48633:15;;48784:4;;48811;;48831:15;;48633:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48873:590;49053:15;;49021:62;;49038:4;;-1:-1:-1;;;;;49053:15:0;49071:11;49021:8;:62::i;:::-;49126:15;;49330:17;;49126:262;;-1:-1:-1;;;49126:262:0;;49198:4;49126:262;;;17564:34:1;17614:18;;;17607:34;;;49126:15:0;17657:18:1;;;17650:34;;;17700:18;;;17693:34;-1:-1:-1;;;;;49330:17:0;;;17743:19:1;;;17736:44;49362:15:0;17796:19:1;;;17789:35;49126:15:0;;;:31;;49165:9;;17498:19:1;;49126:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;49428:13:0;;49404:51;;1410:25:1;;;-1:-1:-1;;;;;49428:13:0;;;;-1:-1:-1;49421:4:0;;-1:-1:-1;;;;;;;;;;;49404:51:0;1398:2:1;1383:18;49404:51:0;1264:177:1;51376:605:0;51479:15;51496:23;51521:12;51535:23;51560:12;51574:18;51594:12;51610:19;51621:7;51610:10;:19::i;:::-;51478:151;;;;;;;;;;;;;;51658:28;51678:7;51658;:15;51666:6;-1:-1:-1;;;;;51658:15:0;-1:-1:-1;;;;;51658:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;51640:15:0;;;;;;:7;:15;;;;;;;;:46;;;;51715:7;:15;;;;:28;;51735:7;51715:19;:28::i;:::-;-1:-1:-1;;;;;51697:15:0;;;;;;;:7;:15;;;;;;:46;;;;51775:18;;;;;;;:39;;51798:15;51775:22;:39::i;:::-;-1:-1:-1;;;;;51754:18:0;;;;;;:7;:18;;;;;:60;51828:26;51843:10;51828:14;:26::i;:::-;51865:14;51874:4;51865:8;:14::i;:::-;51890:23;51902:4;51908;51890:11;:23::i;:::-;51946:9;-1:-1:-1;;;;;51929:44:0;51938:6;-1:-1:-1;;;;;51929:44:0;-1:-1:-1;;;;;;;;;;;51957:15:0;51929:44;;;;1410:25:1;;1398:2;1383:18;;1264:177;51929:44:0;;;;;;;;51467:514;;;;;;;51376:605;;;:::o;50743:625::-;50844:15;50861:23;50886:12;50900:23;50925:12;50939:18;50959:12;50975:19;50986:7;50975:10;:19::i;:::-;50843:151;;;;;;;;;;;;;;51023:28;51043:7;51023;:15;51031:6;-1:-1:-1;;;;;51023:15:0;-1:-1:-1;;;;;51023:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;51005:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;51083:18;;;;;:7;:18;;;;;:39;;51106:15;51083:22;:39::i;:::-;-1:-1:-1;;;;;51062:18:0;;;;;;:7;:18;;;;;;;;:60;;;;51154:7;:18;;;;:39;;51177:15;51154:22;:39::i;37900:681::-;38003:15;38020:23;38045:12;38059:23;38084:12;38098:18;38118:12;38134:19;38145:7;38134:10;:19::i;:::-;38002:151;;;;;;;;;;;;;;38182:28;38202:7;38182;:15;38190:6;-1:-1:-1;;;;;38182:15:0;-1:-1:-1;;;;;38182:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;38164:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38239:7;:15;;;;:28;;38259:7;38239:19;:28::i;50194:541::-;50293:15;50310:23;50335:12;50349:23;50374:12;50388:18;50408:12;50424:19;50435:7;50424:10;:19::i;:::-;50292:151;;;;;;;;;;;;;;50472:28;50492:7;50472;:15;50480:6;-1:-1:-1;;;;;50472:15:0;-1:-1:-1;;;;;50472:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;43355:154::-;43419:7;43446:55;43485:5;43446:20;43458:7;;43446;:11;;:20;;;;:::i;43681:166::-;43751:7;43778:61;43823:5;43778:26;43790:13;;43778:7;:11;;:26;;;;:::i;43517:156::-;43582:7;43609:56;43649:5;43609:21;43621:8;;43609:7;:11;;:21;;;;:::i;42632:355::-;42695:19;42718:10;:8;:10::i;:::-;42695:33;-1:-1:-1;42739:18:0;42760:27;:10;42695:33;42760:14;:27::i;:::-;42839:4;42823:22;;;;:7;:22;;;;;;42739:48;;-1:-1:-1;42823:38:0;;42739:48;42823:26;:38::i;:::-;42814:4;42798:22;;;;:7;:22;;;;;;;;:63;;;;42875:11;:26;;;;;;42872:107;;;42957:4;42941:22;;;;:7;:22;;;;;;:38;;42968:10;42941:26;:38::i;:::-;42932:4;42916:22;;;;:7;:22;;;;;:63;42684:303;;42632:355;:::o;42999:344::-;43050:19;43073:10;:8;:10::i;:::-;43050:33;-1:-1:-1;43094:12:0;43109:21;:4;43050:33;43109:8;:21::i;:::-;43179:18;;-1:-1:-1;;;;;43179:18:0;43171:27;;;;:7;:27;;;;;;43094:36;;-1:-1:-1;43171:37:0;;43094:36;43171:31;:37::i;:::-;43149:18;;;-1:-1:-1;;;;;43149:18:0;;;43141:27;;;;:7;:27;;;;;;;;:67;;;;43234:18;;;;;43222:31;;:11;:31;;;;;;;43219:116;;;43306:18;;-1:-1:-1;;;;;43306:18:0;43298:27;;;;:7;:27;;;;;;:37;;43330:4;43298:31;:37::i;:::-;43276:18;;-1:-1:-1;;;;;43276:18:0;43268:27;;;;:7;:27;;;;;:67;43039:304;;42999:344;:::o;40349:147::-;40427:7;;:17;;40439:4;40427:11;:17::i;:::-;40417:7;:27;40468:10;;:20;;40483:4;40468:14;:20::i;:::-;40455:10;:33;-1:-1:-1;;40349:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1681:456::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1882:9;1869:23;1901:31;1926:5;1901:31;:::i;:::-;1951:5;-1:-1:-1;2008:2:1;1993:18;;1980:32;2021:33;1980:32;2021:33;:::i;:::-;1681:456;;2073:7;;-1:-1:-1;;;2127:2:1;2112:18;;;;2099:32;;1681:456::o;2142:118::-;2228:5;2221:13;2214:21;2207:5;2204:32;2194:60;;2250:1;2247;2240:12;2265:382;2330:6;2338;2391:2;2379:9;2370:7;2366:23;2362:32;2359:52;;;2407:1;2404;2397:12;2359:52;2446:9;2433:23;2465:31;2490:5;2465:31;:::i;:::-;2515:5;-1:-1:-1;2572:2:1;2557:18;;2544:32;2585:30;2544:32;2585:30;:::i;:::-;2634:7;2624:17;;;2265:382;;;;;:::o;2652:180::-;2711:6;2764:2;2752:9;2743:7;2739:23;2735:32;2732:52;;;2780:1;2777;2770:12;2732:52;-1:-1:-1;2803:23:1;;2652:180;-1:-1:-1;2652:180:1:o;3026:456::-;3103:6;3111;3119;3172:2;3160:9;3151:7;3147:23;3143:32;3140:52;;;3188:1;3185;3178:12;3140:52;3227:9;3214:23;3246:31;3271:5;3246:31;:::i;:::-;3296:5;-1:-1:-1;3348:2:1;3333:18;;3320:32;;-1:-1:-1;3404:2:1;3389:18;;3376:32;3417:33;3376:32;3417:33;:::i;:::-;3469:7;3459:17;;;3026:456;;;;;:::o;3487:247::-;3546:6;3599:2;3587:9;3578:7;3574:23;3570:32;3567:52;;;3615:1;3612;3605:12;3567:52;3654:9;3641:23;3673:31;3698:5;3673:31;:::i;3739:309::-;3804:6;3812;3865:2;3853:9;3844:7;3840:23;3836:32;3833:52;;;3881:1;3878;3871:12;3833:52;3917:9;3904:23;3894:33;;3977:2;3966:9;3962:18;3949:32;3990:28;4012:5;3990:28;:::i;4261:241::-;4317:6;4370:2;4358:9;4349:7;4345:23;4341:32;4338:52;;;4386:1;4383;4376:12;4338:52;4425:9;4412:23;4444:28;4466:5;4444:28;:::i;4507:388::-;4575:6;4583;4636:2;4624:9;4615:7;4611:23;4607:32;4604:52;;;4652:1;4649;4642:12;4604:52;4691:9;4678:23;4710:31;4735:5;4710:31;:::i;:::-;4760:5;-1:-1:-1;4817:2:1;4802:18;;4789:32;4830:33;4789:32;4830:33;:::i;4900:315::-;4968:6;4976;5029:2;5017:9;5008:7;5004:23;5000:32;4997:52;;;5045:1;5042;5035:12;4997:52;5081:9;5068:23;5058:33;;5141:2;5130:9;5126:18;5113:32;5154:31;5179:5;5154:31;:::i;5220:347::-;5422:2;5404:21;;;5461:2;5441:18;;;5434:30;5500:25;5495:2;5480:18;;5473:53;5558:2;5543:18;;5220:347::o;5572:356::-;5774:2;5756:21;;;5793:18;;;5786:30;5852:34;5847:2;5832:18;;5825:62;5919:2;5904:18;;5572:356::o;6912:245::-;6979:6;7032:2;7020:9;7011:7;7007:23;7003:32;7000:52;;;7048:1;7045;7038:12;7000:52;7080:9;7074:16;7099:28;7121:5;7099:28;:::i;7898:127::-;7959:10;7954:3;7950:20;7947:1;7940:31;7990:4;7987:1;7980:15;8014:4;8011:1;8004:15;8030:127;8091:10;8086:3;8082:20;8079:1;8072:31;8122:4;8119:1;8112:15;8146:4;8143:1;8136:15;8162:125;8202:4;8230:1;8227;8224:8;8221:34;;;8235:18;;:::i;:::-;-1:-1:-1;8272:9:1;;8162:125::o;8292:127::-;8353:10;8348:3;8344:20;8341:1;8334:31;8384:4;8381:1;8374:15;8408:4;8405:1;8398:15;8424:135;8463:3;8484:17;;;8481:43;;8504:18;;:::i;:::-;-1:-1:-1;8551:1:1;8540:13;;8424:135::o;13524:217::-;13564:1;13590;13580:132;;13634:10;13629:3;13625:20;13622:1;13615:31;13669:4;13666:1;13659:15;13697:4;13694:1;13687:15;13580:132;-1:-1:-1;13726:9:1;;13524:217::o;13746:128::-;13786:3;13817:1;13813:6;13810:1;13807:13;13804:39;;;13823:18;;:::i;:::-;-1:-1:-1;13859:9:1;;13746:128::o;15044:251::-;15114:6;15167:2;15155:9;15146:7;15142:23;15138:32;15135:52;;;15183:1;15180;15173:12;15135:52;15215:9;15209:16;15234:31;15259:5;15234:31;:::i;15609:168::-;15649:7;15715:1;15711;15707:6;15703:14;15700:1;15697:21;15692:1;15685:9;15678:17;15674:45;15671:71;;;15722:18;;:::i;:::-;-1:-1:-1;15762:9:1;;15609:168::o;16238:980::-;16500:4;16548:3;16537:9;16533:19;16579:6;16568:9;16561:25;16605:2;16643:6;16638:2;16627:9;16623:18;16616:34;16686:3;16681:2;16670:9;16666:18;16659:31;16710:6;16745;16739:13;16776:6;16768;16761:22;16814:3;16803:9;16799:19;16792:26;;16853:2;16845:6;16841:15;16827:29;;16874:1;16884:195;16898:6;16895:1;16892:13;16884:195;;;16963:13;;-1:-1:-1;;;;;16959:39:1;16947:52;;17054:15;;;;17019:12;;;;16995:1;16913:9;16884:195;;;-1:-1:-1;;;;;;;17135:32:1;;;;17130:2;17115:18;;17108:60;-1:-1:-1;;;17199:3:1;17184:19;17177:35;17096:3;16238:980;-1:-1:-1;;;16238:980:1:o;17835:306::-;17923:6;17931;17939;17992:2;17980:9;17971:7;17967:23;17963:32;17960:52;;;18008:1;18005;17998:12;17960:52;18037:9;18031:16;18021:26;;18087:2;18076:9;18072:18;18066:25;18056:35;;18131:2;18120:9;18116:18;18110:25;18100:35;;17835:306;;;;;:::o

Swarm Source

ipfs://9f062f2433a9c1f708745be675e62a226a5f5ad33b334a0edeb989c3430b94e6
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.