ETH Price: $3,352.01 (+2.73%)
 

Overview

Max Total Supply

1,000,000,000,000,000 MADF

Holders

17

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,447,291,893,284.830178102 MADF

Value
$0.00
0xf4d29048a1ca8b98997a7d7e9b1546103afed911
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:
MADFOX

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-12
*/

/*

    SPDX-License-Identifier: Unlicensed

    MadFox - $MADF

    🐦: https://twitter.com/MadFoxToken
    🎤: https://t.me/MadFoxETH
    🌎: https://madfox.finance


                                                                   ,-,
                                                             _.-=;~ /_
                                                          _-~   '     ;.
                                                      _.-~     '   .-~-~`-._
                                                _.--~~:.             --.____88
                              ____.........--~~~. .' .  .        _..-------~~
                     _..--~~~~               .' .'             ,'
                 _.-~                        .       .     ` ,'
               .'                                    :.    ./
             .:     ,/          `                   ::.   ,'
           .:'     ,(            ;.                ::. ,-'
          .'     ./'.`.     . . /:::._______.... _/:.o/
         /     ./'. . .)  . _.,'               `88;?88|
       ,'  . .,/'._,-~ /_.o8P'                  88P ?8b
    _,'' . .,/',-~    d888P'                    88'  88|
 _.'~  . .,:oP'        ?88b              _..--- 88.--'8b.--..__
:     ...' 88o __,------.88o ...__..._.=~- .    `~~   `~~      ~-._ Seal _.
`.;;;:='    ~~            ~~~                ~-    -       -   -


*/

pragma solidity ^0.8.9;
interface IERC20 {

    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 Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

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


/**
 * @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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

    /**
     * @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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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

contract MADFOX 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;

    mapping (address => bool) private botWallets;
    bool botscantrade = false;

    bool public canTrade = false;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    address public marketingWallet = 0xdbBcb5D879FeBd4d924a2a8F169505231EAb0381;

    string private _name = "MAD FOX";
    string private _symbol = "MADF";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 12;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 1000000000000000 * 10**9;
    uint256 public numTokensSellToAddToLiquidity = 5500000000000 * 10**9;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

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

    constructor () {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

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

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

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

    function airdrop(address recipient, uint256 amount) external onlyOwner() {
        removeAllFee();
        _transfer(_msgSender(), recipient, amount * 10**9);
        restoreAllFee();
    }

    function airdropInternal(address recipient, uint256 amount) internal {
        removeAllFee();
        _transfer(_msgSender(), recipient, amount);
        restoreAllFee();
    }

    function airdropArray(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner(){
        uint256 iterator = 0;
        require(newholders.length == amounts.length, "must be the same length");
        while(iterator < newholders.length){
            airdropInternal(newholders[iterator], amounts[iterator] * 10**9);
            iterator += 1;
        }
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

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

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

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        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 excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function setMarketingWallet(address walletAddress) public onlyOwner {
        marketingWallet = walletAddress;
    }

    function upliftTxAmount() external onlyOwner() {
        _maxTxAmount = 69000000000000000000000 * 10**9;
    }

    function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() {
        require(SwapThresholdAmount > 69000000, "Swap Threshold Amount cannot be less than 69 Million");
        numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**9;
    }

    function claimTokens () public onlyOwner {
        // make sure we capture all BNB that may or may not be sent to this contract
        payable(marketingWallet).transfer(address(this).balance);
    }

    function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner() {
        tokenAddress.transfer(walletaddress, tokenAddress.balanceOf(address(this)));
    }

    function clearStuckBalance (address payable walletaddress) external onlyOwner() {
        walletaddress.transfer(address(this).balance);
    }

    function setBots(address[] memory bots_) public onlyOwner() {
        for (uint i = 0; i < bots_.length; i++) {
            botWallets[bots_[i]] = true;
        }
    }

    function addBotWallet(address botwallet) external onlyOwner() {
        botWallets[botwallet] = true;
    }

    function removeBotWallet(address botwallet) external onlyOwner() {
        botWallets[botwallet] = false;
    }

    function getBotWalletStatus(address botwallet) public view returns (bool) {
        return botWallets[botwallet];
    }

    function allowtrading()external onlyOwner() {
        canTrade = true;
    }

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

     //to recieve ETH from uniswapV2Router when swaping
    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 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

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

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

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

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

    function _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 calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

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

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

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

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

    function isExcludedFromFee(address account) public 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.");

        // 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 &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

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

        //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
        // add the marketing wallet
        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);
        uint256 marketingshare = newBalance.mul(80).div(100);
        payable(marketingWallet).transfer(marketingshare);
        newBalance -= marketingshare;
        // 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
            owner(),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!canTrade){
            require(sender == owner()); // only owner allowed to trade or add liquidity
        }

        if(botWallets[sender] || botWallets[recipient]){
            require(botscantrade, "bots arent allowed to trade");
        }

        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]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

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

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","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"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upliftTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a805461ffff1916905569d3c21bcecceda1000000600b8190556200002d9060001962000474565b6200003b9060001962000497565b600c55600e80546001600160a01b03191673dbbcb5d879febd4d924a2a8f169505231eab03811790556040805180820190915260078082526609a8288408c9eb60cb1b60209092019182526200009491600f91620003ce565b506040805180820190915260048082526326a0a22360e11b6020909201918252620000c291601091620003ce565b506011805460ff1916600917905560016012819055601355600c60148190556015556016805461ff00191661010017905569d3c21bcecceda100000060175569012a27d53bc0487000006018553480156200011c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001c057600080fd5b505afa158015620001d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fb9190620004bd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024457600080fd5b505afa15801562000259573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027f9190620004bd565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002c857600080fd5b505af1158015620002dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003039190620004bd565b6001600160a01b0390811660a05281166080526001600660006200032f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620003773390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620003bf91815260200190565b60405180910390a3506200052c565b828054620003dc90620004ef565b90600052602060002090601f0160209004810192826200040057600085556200044b565b82601f106200041b57805160ff19168380011785556200044b565b828001600101855582156200044b579182015b828111156200044b5782518255916020019190600101906200042e565b50620004599291506200045d565b5090565b5b808211156200045957600081556001016200045e565b6000826200049257634e487b7160e01b600052601260045260246000fd5b500690565b600082821015620004b857634e487b7160e01b600052601160045260246000fd5b500390565b600060208284031215620004d057600080fd5b81516001600160a01b0381168114620004e857600080fd5b9392505050565b600181811c908216806200050457607f821691505b602082108114156200052657634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161322a6200057c600039600081816105940152611d5a015260008181610387015281816125b801528181612680015281816126bc015281816127ad01526127d4015261322a6000f3fe6080604052600436106102cd5760003560e01c806360d4848911610175578063a6334231116100dc578063d12a768811610095578063dd62ed3e1161006f578063dd62ed3e146108c9578063e8c4c43c1461090f578063ea2f0b3714610924578063f2fde38b1461094457600080fd5b8063d12a768814610873578063d4a3883f14610889578063dd467064146108a957600080fd5b8063a6334231146107d4578063a69df4b5146107e9578063a9059cbb146107fe578063b515566a1461081e578063b6c523241461083e578063c49b9a801461085357600080fd5b80637d1db4a51161012e5780637d1db4a51461071257806388f82020146107285780638ba4cc3c146107615780638da5cb5b1461078157806395d89b411461079f578063a457c2d7146107b457600080fd5b806360d484891461064e5780636bc87c3a1461068757806370a082311461069d578063715018a6146106bd57806375f0a874146106d2578063764d72bf146106f257600080fd5b80633685d419116102345780634549b039116101ed5780634a74bb02116101c75780634a74bb02146105b657806352390c02146105d55780635342acb4146105f55780635d098b381461062e57600080fd5b80634549b0391461054d57806348c54b9d1461056d57806349bd5a5e1461058257600080fd5b80633685d4191461049757806339509351146104b75780633ae7dc20146104d75780633b124fe7146104f75780633bd5d1731461050d578063437823ec1461052d57600080fd5b806323b872dd1161028657806323b872dd146103d657806329e04b4a146103f65780632a360631146104165780632d838119146104365780632f05205c14610456578063313ce5671461047557600080fd5b80630305caff146102d957806306fdde03146102fb578063095ea7b31461032657806313114a9d146103565780631694505e1461037557806318160ddd146103c157600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612c44565b610964565b005b34801561030757600080fd5b506103106109b8565b60405161031d9190612c61565b60405180910390f35b34801561033257600080fd5b50610346610341366004612cb6565b610a4a565b604051901515815260200161031d565b34801561036257600080fd5b50600d545b60405190815260200161031d565b34801561038157600080fd5b506103a97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161031d565b3480156103cd57600080fd5b50600b54610367565b3480156103e257600080fd5b506103466103f1366004612ce2565b610a61565b34801561040257600080fd5b506102f9610411366004612d23565b610aca565b34801561042257600080fd5b506102f9610431366004612c44565b610b78565b34801561044257600080fd5b50610367610451366004612d23565b610bc6565b34801561046257600080fd5b50600a5461034690610100900460ff1681565b34801561048157600080fd5b5060115460405160ff909116815260200161031d565b3480156104a357600080fd5b506102f96104b2366004612c44565b610c4a565b3480156104c357600080fd5b506103466104d2366004612cb6565b610e01565b3480156104e357600080fd5b506102f96104f2366004612d3c565b610e37565b34801561050357600080fd5b5061036760125481565b34801561051957600080fd5b506102f9610528366004612d23565b610f65565b34801561053957600080fd5b506102f9610548366004612c44565b61104f565b34801561055957600080fd5b50610367610568366004612d83565b61109d565b34801561057957600080fd5b506102f961112a565b34801561058e57600080fd5b506103a97f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c257600080fd5b5060165461034690610100900460ff1681565b3480156105e157600080fd5b506102f96105f0366004612c44565b611190565b34801561060157600080fd5b50610346610610366004612c44565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063a57600080fd5b506102f9610649366004612c44565b6112e3565b34801561065a57600080fd5b50610346610669366004612c44565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561069357600080fd5b5061036760145481565b3480156106a957600080fd5b506103676106b8366004612c44565b61132f565b3480156106c957600080fd5b506102f961138e565b3480156106de57600080fd5b50600e546103a9906001600160a01b031681565b3480156106fe57600080fd5b506102f961070d366004612c44565b6113f0565b34801561071e57600080fd5b5061036760175481565b34801561073457600080fd5b50610346610743366004612c44565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561076d57600080fd5b506102f961077c366004612cb6565b61144f565b34801561078d57600080fd5b506000546001600160a01b03166103a9565b3480156107ab57600080fd5b506103106114aa565b3480156107c057600080fd5b506103466107cf366004612cb6565b6114b9565b3480156107e057600080fd5b506102f9611508565b3480156107f557600080fd5b506102f9611543565b34801561080a57600080fd5b50610346610819366004612cb6565b611649565b34801561082a57600080fd5b506102f9610839366004612dbe565b611656565b34801561084a57600080fd5b50600254610367565b34801561085f57600080fd5b506102f961086e366004612e83565b6116e8565b34801561087f57600080fd5b5061036760185481565b34801561089557600080fd5b506102f96108a4366004612eec565b611766565b3480156108b557600080fd5b506102f96108c4366004612d23565b611859565b3480156108d557600080fd5b506103676108e4366004612d3c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561091b57600080fd5b506102f96118de565b34801561093057600080fd5b506102f961093f366004612c44565b61191c565b34801561095057600080fd5b506102f961095f366004612c44565b611967565b6000546001600160a01b031633146109975760405162461bcd60e51b815260040161098e90612f58565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060600f80546109c790612f8d565b80601f01602080910402602001604051908101604052809291908181526020018280546109f390612f8d565b8015610a405780601f10610a1557610100808354040283529160200191610a40565b820191906000526020600020905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b6000610a57338484611a3f565b5060015b92915050565b6000610a6e848484611b63565b610ac08433610abb85604051806060016040528060288152602001613188602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611e14565b611a3f565b5060019392505050565b6000546001600160a01b03163314610af45760405162461bcd60e51b815260040161098e90612f58565b63041cdb408111610b645760405162461bcd60e51b815260206004820152603460248201527f53776170205468726573686f6c6420416d6f756e742063616e6e6f74206265206044820152733632b9b9903a3430b7101b1c9026b4b63634b7b760611b606482015260840161098e565b610b7281633b9aca00612fde565b60185550565b6000546001600160a01b03163314610ba25760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610c2d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161098e565b6000610c37611e4e565b9050610c438382611e71565b9392505050565b6000546001600160a01b03163314610c745760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b03811660009081526007602052604090205460ff16610cdc5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161098e565b60005b600854811015610dfd57816001600160a01b031660088281548110610d0657610d06612ffd565b6000918252602090912001546001600160a01b03161415610deb5760088054610d3190600190613013565b81548110610d4157610d41612ffd565b600091825260209091200154600880546001600160a01b039092169183908110610d6d57610d6d612ffd565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610dc557610dc561302a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610df581613040565b915050610cdf565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a57918590610abb9086611eb3565b6000546001600160a01b03163314610e615760405162461bcd60e51b815260040161098e90612f58565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a082319060240160206040518083038186803b158015610eaa57600080fd5b505afa158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee2919061305b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610f2857600080fd5b505af1158015610f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f609190613074565b505050565b3360008181526007602052604090205460ff1615610fda5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161098e565b6000610fe583611f12565b505050506001600160a01b03841660009081526003602052604090205491925061101191905082611f61565b6001600160a01b038316600090815260036020526040902055600c546110379082611f61565b600c55600d546110479084611eb3565b600d55505050565b6000546001600160a01b031633146110795760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156110f15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161098e565b8161111057600061110184611f12565b50939550610a5b945050505050565b600061111b84611f12565b50929550610a5b945050505050565b6000546001600160a01b031633146111545760405162461bcd60e51b815260040161098e90612f58565b600e546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561118d573d6000803e3d6000fd5b50565b6000546001600160a01b031633146111ba5760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b03811660009081526007602052604090205460ff16156112235760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161098e565b6001600160a01b0381166000908152600360205260409020541561127d576001600160a01b03811660009081526003602052604090205461126390610bc6565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461130d5760405162461bcd60e51b815260040161098e90612f58565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561136c57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a5b90610bc6565b6000546001600160a01b031633146113b85760405162461bcd60e51b815260040161098e90612f58565b600080546040516001600160a01b03909116906000805160206131b0833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461141a5760405162461bcd60e51b815260040161098e90612f58565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610dfd573d6000803e3d6000fd5b6000546001600160a01b031633146114795760405162461bcd60e51b815260040161098e90612f58565b611481611fa3565b611499338361149484633b9aca00612fde565b611b63565b610dfd601354601255601554601455565b6060601080546109c790612f8d565b6000610a573384610abb856040518060600160405280602581526020016131d0602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611e14565b6000546001600160a01b031633146115325760405162461bcd60e51b815260040161098e90612f58565b600a805461ff001916610100179055565b6001546001600160a01b031633146115a95760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b606482015260840161098e565b60025442116115fa5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015260640161098e565b600154600080546040516001600160a01b0393841693909116916000805160206131b083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a57338484611b63565b6000546001600160a01b031633146116805760405162461bcd60e51b815260040161098e90612f58565b60005b8151811015610dfd576001600960008484815181106116a4576116a4612ffd565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806116e081613040565b915050611683565b6000546001600160a01b031633146117125760405162461bcd60e51b815260040161098e90612f58565b601680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061175b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146117905760405162461bcd60e51b815260040161098e90612f58565b60008382146117e15760405162461bcd60e51b815260206004820152601760248201527f6d757374206265207468652073616d65206c656e677468000000000000000000604482015260640161098e565b83811015611852576118408585838181106117fe576117fe612ffd565b90506020020160208101906118139190612c44565b84848481811061182557611825612ffd565b90506020020135633b9aca0061183b9190612fde565b611fd1565b61184b600182613091565b90506117e1565b5050505050565b6000546001600160a01b031633146118835760405162461bcd60e51b815260040161098e90612f58565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556118b28142613091565b600255600080546040516001600160a01b03909116906000805160206131b0833981519152908390a350565b6000546001600160a01b031633146119085760405162461bcd60e51b815260040161098e90612f58565b6d0366e7064422fd84202340000000601755565b6000546001600160a01b031633146119465760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119915760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b0381166119f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098e565b600080546040516001600160a01b03808516939216916000805160206131b083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611aa15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161098e565b6001600160a01b038216611b025760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161098e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611bc75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161098e565b6001600160a01b038216611c295760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161098e565b60008111611c8b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161098e565b6000546001600160a01b03848116911614801590611cb757506000546001600160a01b03838116911614155b15611d1f57601754811115611d1f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161098e565b6000611d2a3061132f565b90506017548110611d3a57506017545b60185481108015908190611d51575060165460ff16155b8015611d8f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611da25750601654610100900460ff165b15611db5576018549150611db582611fe4565b6001600160a01b03851660009081526006602052604090205460019060ff1680611df757506001600160a01b03851660009081526006602052604090205460ff165b15611e00575060005b611e0c868686846120e3565b505050505050565b60008184841115611e385760405162461bcd60e51b815260040161098e9190612c61565b506000611e458486613013565b95945050505050565b6000806000611e5b61231f565b9092509050611e6a8282611e71565b9250505090565b6000610c4383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124a1565b600080611ec08385613091565b905083811015610c435760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161098e565b6000806000806000806000806000611f298a6124cf565b9250925092506000806000611f478d8686611f42611e4e565b612511565b919f909e50909c50959a5093985091965092945050505050565b6000610c4383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e14565b601254158015611fb35750601454155b15611fba57565b601280546013556014805460155560009182905555565b611fd9611fa3565b611499338383611b63565b6016805460ff191660011790556000611ffe826002611e71565b9050600061200c8383611f61565b90504761201883612561565b60006120244783611f61565b9050600061203e6064612038846050612728565b90611e71565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612079573d6000803e3d6000fd5b506120848183613013565b915061209084836127a7565b60408051868152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506016805460ff1916905550505050565b600a54610100900460ff1661210c576000546001600160a01b0385811691161461210c57600080fd5b6001600160a01b03841660009081526009602052604090205460ff168061214b57506001600160a01b03831660009081526009602052604090205460ff165b156121a257600a5460ff166121a25760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f2074726164650000000000604482015260640161098e565b806121af576121af611fa3565b6001600160a01b03841660009081526007602052604090205460ff1680156121f057506001600160a01b03831660009081526007602052604090205460ff16155b15612205576122008484846128b5565b612303565b6001600160a01b03841660009081526007602052604090205460ff1615801561224657506001600160a01b03831660009081526007602052604090205460ff165b15612256576122008484846129db565b6001600160a01b03841660009081526007602052604090205460ff1615801561229857506001600160a01b03831660009081526007602052604090205460ff16155b156122a857612200848484612a84565b6001600160a01b03841660009081526007602052604090205460ff1680156122e857506001600160a01b03831660009081526007602052604090205460ff165b156122f857612200848484612ac8565b612303848484612a84565b8061231957612319601354601255601554601455565b50505050565b600c54600b546000918291825b6008548110156124715782600360006008848154811061234e5761234e612ffd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123b9575081600460006008848154811061239257612392612ffd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156123cf57600c54600b54945094505050509091565b61241560036000600884815481106123e9576123e9612ffd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f61565b925061245d600460006008848154811061243157612431612ffd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f61565b91508061246981613040565b91505061232c565b50600b54600c5461248191611e71565b82101561249857600c54600b549350935050509091565b90939092509050565b600081836124c25760405162461bcd60e51b815260040161098e9190612c61565b506000611e4584866130a9565b6000806000806124de85612b3b565b905060006124eb86612b57565b90506000612503826124fd8986611f61565b90611f61565b979296509094509092505050565b60008080806125208886612728565b9050600061252e8887612728565b9050600061253c8888612728565b9050600061254e826124fd8686611f61565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061259657612596612ffd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561260f57600080fd5b505afa158015612623573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264791906130cb565b8160018151811061265a5761265a612ffd565b60200260200101906001600160a01b031690816001600160a01b0316815250506126a5307f000000000000000000000000000000000000000000000000000000000000000084611a3f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906126fa9085906000908690309042906004016130e8565b600060405180830381600087803b15801561271457600080fd5b505af1158015611e0c573d6000803e3d6000fd5b60008261273757506000610a5b565b60006127438385612fde565b90508261275085836130a9565b14610c435760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161098e565b6127d2307f000000000000000000000000000000000000000000000000000000000000000084611a3f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806128196000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561287c57600080fd5b505af1158015612890573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118529190613159565b6000806000806000806128c787611f12565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128f99088611f61565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129289087611f61565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546129579086611eb3565b6001600160a01b03891660009081526003602052604090205561297981612b73565b6129838483612bfb565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129c891815260200190565b60405180910390a3505050505050505050565b6000806000806000806129ed87611f12565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612a1f9087611f61565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a559084611eb3565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546129579086611eb3565b600080600080600080612a9687611f12565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129289087611f61565b600080600080600080612ada87611f12565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612b0c9088611f61565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612a1f9087611f61565b6000610a5b60646120386012548561272890919063ffffffff16565b6000610a5b60646120386014548561272890919063ffffffff16565b6000612b7d611e4e565b90506000612b8b8383612728565b30600090815260036020526040902054909150612ba89082611eb3565b3060009081526003602090815260408083209390935560079052205460ff1615610f605730600090815260046020526040902054612be69084611eb3565b30600090815260046020526040902055505050565b600c54612c089083611f61565b600c55600d54612c189082611eb3565b600d555050565b6001600160a01b038116811461118d57600080fd5b8035612c3f81612c1f565b919050565b600060208284031215612c5657600080fd5b8135610c4381612c1f565b600060208083528351808285015260005b81811015612c8e57858101830151858201604001528201612c72565b81811115612ca0576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612cc957600080fd5b8235612cd481612c1f565b946020939093013593505050565b600080600060608486031215612cf757600080fd5b8335612d0281612c1f565b92506020840135612d1281612c1f565b929592945050506040919091013590565b600060208284031215612d3557600080fd5b5035919050565b60008060408385031215612d4f57600080fd5b8235612d5a81612c1f565b91506020830135612d6a81612c1f565b809150509250929050565b801515811461118d57600080fd5b60008060408385031215612d9657600080fd5b823591506020830135612d6a81612d75565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612dd157600080fd5b823567ffffffffffffffff80821115612de957600080fd5b818501915085601f830112612dfd57600080fd5b813581811115612e0f57612e0f612da8565b8060051b604051601f19603f83011681018181108582111715612e3457612e34612da8565b604052918252848201925083810185019188831115612e5257600080fd5b938501935b82851015612e7757612e6885612c34565b84529385019392850192612e57565b98975050505050505050565b600060208284031215612e9557600080fd5b8135610c4381612d75565b60008083601f840112612eb257600080fd5b50813567ffffffffffffffff811115612eca57600080fd5b6020830191508360208260051b8501011115612ee557600080fd5b9250929050565b60008060008060408587031215612f0257600080fd5b843567ffffffffffffffff80821115612f1a57600080fd5b612f2688838901612ea0565b90965094506020870135915080821115612f3f57600080fd5b50612f4c87828801612ea0565b95989497509550505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612fa157607f821691505b60208210811415612fc257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ff857612ff8612fc8565b500290565b634e487b7160e01b600052603260045260246000fd5b60008282101561302557613025612fc8565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561305457613054612fc8565b5060010190565b60006020828403121561306d57600080fd5b5051919050565b60006020828403121561308657600080fd5b8151610c4381612d75565b600082198211156130a4576130a4612fc8565b500190565b6000826130c657634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156130dd57600080fd5b8151610c4381612c1f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131385784516001600160a01b031683529383019391830191600101613113565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561316e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220934a480f7b63b03660ea8839abdcd506b26dd0ed17a70c00eb7f423295b5299864736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c806360d4848911610175578063a6334231116100dc578063d12a768811610095578063dd62ed3e1161006f578063dd62ed3e146108c9578063e8c4c43c1461090f578063ea2f0b3714610924578063f2fde38b1461094457600080fd5b8063d12a768814610873578063d4a3883f14610889578063dd467064146108a957600080fd5b8063a6334231146107d4578063a69df4b5146107e9578063a9059cbb146107fe578063b515566a1461081e578063b6c523241461083e578063c49b9a801461085357600080fd5b80637d1db4a51161012e5780637d1db4a51461071257806388f82020146107285780638ba4cc3c146107615780638da5cb5b1461078157806395d89b411461079f578063a457c2d7146107b457600080fd5b806360d484891461064e5780636bc87c3a1461068757806370a082311461069d578063715018a6146106bd57806375f0a874146106d2578063764d72bf146106f257600080fd5b80633685d419116102345780634549b039116101ed5780634a74bb02116101c75780634a74bb02146105b657806352390c02146105d55780635342acb4146105f55780635d098b381461062e57600080fd5b80634549b0391461054d57806348c54b9d1461056d57806349bd5a5e1461058257600080fd5b80633685d4191461049757806339509351146104b75780633ae7dc20146104d75780633b124fe7146104f75780633bd5d1731461050d578063437823ec1461052d57600080fd5b806323b872dd1161028657806323b872dd146103d657806329e04b4a146103f65780632a360631146104165780632d838119146104365780632f05205c14610456578063313ce5671461047557600080fd5b80630305caff146102d957806306fdde03146102fb578063095ea7b31461032657806313114a9d146103565780631694505e1461037557806318160ddd146103c157600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612c44565b610964565b005b34801561030757600080fd5b506103106109b8565b60405161031d9190612c61565b60405180910390f35b34801561033257600080fd5b50610346610341366004612cb6565b610a4a565b604051901515815260200161031d565b34801561036257600080fd5b50600d545b60405190815260200161031d565b34801561038157600080fd5b506103a97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161031d565b3480156103cd57600080fd5b50600b54610367565b3480156103e257600080fd5b506103466103f1366004612ce2565b610a61565b34801561040257600080fd5b506102f9610411366004612d23565b610aca565b34801561042257600080fd5b506102f9610431366004612c44565b610b78565b34801561044257600080fd5b50610367610451366004612d23565b610bc6565b34801561046257600080fd5b50600a5461034690610100900460ff1681565b34801561048157600080fd5b5060115460405160ff909116815260200161031d565b3480156104a357600080fd5b506102f96104b2366004612c44565b610c4a565b3480156104c357600080fd5b506103466104d2366004612cb6565b610e01565b3480156104e357600080fd5b506102f96104f2366004612d3c565b610e37565b34801561050357600080fd5b5061036760125481565b34801561051957600080fd5b506102f9610528366004612d23565b610f65565b34801561053957600080fd5b506102f9610548366004612c44565b61104f565b34801561055957600080fd5b50610367610568366004612d83565b61109d565b34801561057957600080fd5b506102f961112a565b34801561058e57600080fd5b506103a97f0000000000000000000000004926201608129af76e0c92ee96a3b3ece1d3403d81565b3480156105c257600080fd5b5060165461034690610100900460ff1681565b3480156105e157600080fd5b506102f96105f0366004612c44565b611190565b34801561060157600080fd5b50610346610610366004612c44565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063a57600080fd5b506102f9610649366004612c44565b6112e3565b34801561065a57600080fd5b50610346610669366004612c44565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561069357600080fd5b5061036760145481565b3480156106a957600080fd5b506103676106b8366004612c44565b61132f565b3480156106c957600080fd5b506102f961138e565b3480156106de57600080fd5b50600e546103a9906001600160a01b031681565b3480156106fe57600080fd5b506102f961070d366004612c44565b6113f0565b34801561071e57600080fd5b5061036760175481565b34801561073457600080fd5b50610346610743366004612c44565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561076d57600080fd5b506102f961077c366004612cb6565b61144f565b34801561078d57600080fd5b506000546001600160a01b03166103a9565b3480156107ab57600080fd5b506103106114aa565b3480156107c057600080fd5b506103466107cf366004612cb6565b6114b9565b3480156107e057600080fd5b506102f9611508565b3480156107f557600080fd5b506102f9611543565b34801561080a57600080fd5b50610346610819366004612cb6565b611649565b34801561082a57600080fd5b506102f9610839366004612dbe565b611656565b34801561084a57600080fd5b50600254610367565b34801561085f57600080fd5b506102f961086e366004612e83565b6116e8565b34801561087f57600080fd5b5061036760185481565b34801561089557600080fd5b506102f96108a4366004612eec565b611766565b3480156108b557600080fd5b506102f96108c4366004612d23565b611859565b3480156108d557600080fd5b506103676108e4366004612d3c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561091b57600080fd5b506102f96118de565b34801561093057600080fd5b506102f961093f366004612c44565b61191c565b34801561095057600080fd5b506102f961095f366004612c44565b611967565b6000546001600160a01b031633146109975760405162461bcd60e51b815260040161098e90612f58565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060600f80546109c790612f8d565b80601f01602080910402602001604051908101604052809291908181526020018280546109f390612f8d565b8015610a405780601f10610a1557610100808354040283529160200191610a40565b820191906000526020600020905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b6000610a57338484611a3f565b5060015b92915050565b6000610a6e848484611b63565b610ac08433610abb85604051806060016040528060288152602001613188602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611e14565b611a3f565b5060019392505050565b6000546001600160a01b03163314610af45760405162461bcd60e51b815260040161098e90612f58565b63041cdb408111610b645760405162461bcd60e51b815260206004820152603460248201527f53776170205468726573686f6c6420416d6f756e742063616e6e6f74206265206044820152733632b9b9903a3430b7101b1c9026b4b63634b7b760611b606482015260840161098e565b610b7281633b9aca00612fde565b60185550565b6000546001600160a01b03163314610ba25760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610c2d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161098e565b6000610c37611e4e565b9050610c438382611e71565b9392505050565b6000546001600160a01b03163314610c745760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b03811660009081526007602052604090205460ff16610cdc5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161098e565b60005b600854811015610dfd57816001600160a01b031660088281548110610d0657610d06612ffd565b6000918252602090912001546001600160a01b03161415610deb5760088054610d3190600190613013565b81548110610d4157610d41612ffd565b600091825260209091200154600880546001600160a01b039092169183908110610d6d57610d6d612ffd565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610dc557610dc561302a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610df581613040565b915050610cdf565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a57918590610abb9086611eb3565b6000546001600160a01b03163314610e615760405162461bcd60e51b815260040161098e90612f58565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a082319060240160206040518083038186803b158015610eaa57600080fd5b505afa158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee2919061305b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610f2857600080fd5b505af1158015610f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f609190613074565b505050565b3360008181526007602052604090205460ff1615610fda5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161098e565b6000610fe583611f12565b505050506001600160a01b03841660009081526003602052604090205491925061101191905082611f61565b6001600160a01b038316600090815260036020526040902055600c546110379082611f61565b600c55600d546110479084611eb3565b600d55505050565b6000546001600160a01b031633146110795760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156110f15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161098e565b8161111057600061110184611f12565b50939550610a5b945050505050565b600061111b84611f12565b50929550610a5b945050505050565b6000546001600160a01b031633146111545760405162461bcd60e51b815260040161098e90612f58565b600e546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561118d573d6000803e3d6000fd5b50565b6000546001600160a01b031633146111ba5760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b03811660009081526007602052604090205460ff16156112235760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161098e565b6001600160a01b0381166000908152600360205260409020541561127d576001600160a01b03811660009081526003602052604090205461126390610bc6565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461130d5760405162461bcd60e51b815260040161098e90612f58565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561136c57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a5b90610bc6565b6000546001600160a01b031633146113b85760405162461bcd60e51b815260040161098e90612f58565b600080546040516001600160a01b03909116906000805160206131b0833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461141a5760405162461bcd60e51b815260040161098e90612f58565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610dfd573d6000803e3d6000fd5b6000546001600160a01b031633146114795760405162461bcd60e51b815260040161098e90612f58565b611481611fa3565b611499338361149484633b9aca00612fde565b611b63565b610dfd601354601255601554601455565b6060601080546109c790612f8d565b6000610a573384610abb856040518060600160405280602581526020016131d0602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611e14565b6000546001600160a01b031633146115325760405162461bcd60e51b815260040161098e90612f58565b600a805461ff001916610100179055565b6001546001600160a01b031633146115a95760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b606482015260840161098e565b60025442116115fa5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015260640161098e565b600154600080546040516001600160a01b0393841693909116916000805160206131b083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a57338484611b63565b6000546001600160a01b031633146116805760405162461bcd60e51b815260040161098e90612f58565b60005b8151811015610dfd576001600960008484815181106116a4576116a4612ffd565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806116e081613040565b915050611683565b6000546001600160a01b031633146117125760405162461bcd60e51b815260040161098e90612f58565b601680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061175b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146117905760405162461bcd60e51b815260040161098e90612f58565b60008382146117e15760405162461bcd60e51b815260206004820152601760248201527f6d757374206265207468652073616d65206c656e677468000000000000000000604482015260640161098e565b83811015611852576118408585838181106117fe576117fe612ffd565b90506020020160208101906118139190612c44565b84848481811061182557611825612ffd565b90506020020135633b9aca0061183b9190612fde565b611fd1565b61184b600182613091565b90506117e1565b5050505050565b6000546001600160a01b031633146118835760405162461bcd60e51b815260040161098e90612f58565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556118b28142613091565b600255600080546040516001600160a01b03909116906000805160206131b0833981519152908390a350565b6000546001600160a01b031633146119085760405162461bcd60e51b815260040161098e90612f58565b6d0366e7064422fd84202340000000601755565b6000546001600160a01b031633146119465760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119915760405162461bcd60e51b815260040161098e90612f58565b6001600160a01b0381166119f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098e565b600080546040516001600160a01b03808516939216916000805160206131b083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611aa15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161098e565b6001600160a01b038216611b025760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161098e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611bc75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161098e565b6001600160a01b038216611c295760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161098e565b60008111611c8b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161098e565b6000546001600160a01b03848116911614801590611cb757506000546001600160a01b03838116911614155b15611d1f57601754811115611d1f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161098e565b6000611d2a3061132f565b90506017548110611d3a57506017545b60185481108015908190611d51575060165460ff16155b8015611d8f57507f0000000000000000000000004926201608129af76e0c92ee96a3b3ece1d3403d6001600160a01b0316856001600160a01b031614155b8015611da25750601654610100900460ff165b15611db5576018549150611db582611fe4565b6001600160a01b03851660009081526006602052604090205460019060ff1680611df757506001600160a01b03851660009081526006602052604090205460ff165b15611e00575060005b611e0c868686846120e3565b505050505050565b60008184841115611e385760405162461bcd60e51b815260040161098e9190612c61565b506000611e458486613013565b95945050505050565b6000806000611e5b61231f565b9092509050611e6a8282611e71565b9250505090565b6000610c4383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124a1565b600080611ec08385613091565b905083811015610c435760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161098e565b6000806000806000806000806000611f298a6124cf565b9250925092506000806000611f478d8686611f42611e4e565b612511565b919f909e50909c50959a5093985091965092945050505050565b6000610c4383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e14565b601254158015611fb35750601454155b15611fba57565b601280546013556014805460155560009182905555565b611fd9611fa3565b611499338383611b63565b6016805460ff191660011790556000611ffe826002611e71565b9050600061200c8383611f61565b90504761201883612561565b60006120244783611f61565b9050600061203e6064612038846050612728565b90611e71565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612079573d6000803e3d6000fd5b506120848183613013565b915061209084836127a7565b60408051868152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506016805460ff1916905550505050565b600a54610100900460ff1661210c576000546001600160a01b0385811691161461210c57600080fd5b6001600160a01b03841660009081526009602052604090205460ff168061214b57506001600160a01b03831660009081526009602052604090205460ff165b156121a257600a5460ff166121a25760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f2074726164650000000000604482015260640161098e565b806121af576121af611fa3565b6001600160a01b03841660009081526007602052604090205460ff1680156121f057506001600160a01b03831660009081526007602052604090205460ff16155b15612205576122008484846128b5565b612303565b6001600160a01b03841660009081526007602052604090205460ff1615801561224657506001600160a01b03831660009081526007602052604090205460ff165b15612256576122008484846129db565b6001600160a01b03841660009081526007602052604090205460ff1615801561229857506001600160a01b03831660009081526007602052604090205460ff16155b156122a857612200848484612a84565b6001600160a01b03841660009081526007602052604090205460ff1680156122e857506001600160a01b03831660009081526007602052604090205460ff165b156122f857612200848484612ac8565b612303848484612a84565b8061231957612319601354601255601554601455565b50505050565b600c54600b546000918291825b6008548110156124715782600360006008848154811061234e5761234e612ffd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123b9575081600460006008848154811061239257612392612ffd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156123cf57600c54600b54945094505050509091565b61241560036000600884815481106123e9576123e9612ffd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f61565b925061245d600460006008848154811061243157612431612ffd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f61565b91508061246981613040565b91505061232c565b50600b54600c5461248191611e71565b82101561249857600c54600b549350935050509091565b90939092509050565b600081836124c25760405162461bcd60e51b815260040161098e9190612c61565b506000611e4584866130a9565b6000806000806124de85612b3b565b905060006124eb86612b57565b90506000612503826124fd8986611f61565b90611f61565b979296509094509092505050565b60008080806125208886612728565b9050600061252e8887612728565b9050600061253c8888612728565b9050600061254e826124fd8686611f61565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061259657612596612ffd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561260f57600080fd5b505afa158015612623573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264791906130cb565b8160018151811061265a5761265a612ffd565b60200260200101906001600160a01b031690816001600160a01b0316815250506126a5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a3f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906126fa9085906000908690309042906004016130e8565b600060405180830381600087803b15801561271457600080fd5b505af1158015611e0c573d6000803e3d6000fd5b60008261273757506000610a5b565b60006127438385612fde565b90508261275085836130a9565b14610c435760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161098e565b6127d2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a3f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806128196000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561287c57600080fd5b505af1158015612890573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118529190613159565b6000806000806000806128c787611f12565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128f99088611f61565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129289087611f61565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546129579086611eb3565b6001600160a01b03891660009081526003602052604090205561297981612b73565b6129838483612bfb565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129c891815260200190565b60405180910390a3505050505050505050565b6000806000806000806129ed87611f12565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612a1f9087611f61565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a559084611eb3565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546129579086611eb3565b600080600080600080612a9687611f12565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129289087611f61565b600080600080600080612ada87611f12565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612b0c9088611f61565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612a1f9087611f61565b6000610a5b60646120386012548561272890919063ffffffff16565b6000610a5b60646120386014548561272890919063ffffffff16565b6000612b7d611e4e565b90506000612b8b8383612728565b30600090815260036020526040902054909150612ba89082611eb3565b3060009081526003602090815260408083209390935560079052205460ff1615610f605730600090815260046020526040902054612be69084611eb3565b30600090815260046020526040902055505050565b600c54612c089083611f61565b600c55600d54612c189082611eb3565b600d555050565b6001600160a01b038116811461118d57600080fd5b8035612c3f81612c1f565b919050565b600060208284031215612c5657600080fd5b8135610c4381612c1f565b600060208083528351808285015260005b81811015612c8e57858101830151858201604001528201612c72565b81811115612ca0576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612cc957600080fd5b8235612cd481612c1f565b946020939093013593505050565b600080600060608486031215612cf757600080fd5b8335612d0281612c1f565b92506020840135612d1281612c1f565b929592945050506040919091013590565b600060208284031215612d3557600080fd5b5035919050565b60008060408385031215612d4f57600080fd5b8235612d5a81612c1f565b91506020830135612d6a81612c1f565b809150509250929050565b801515811461118d57600080fd5b60008060408385031215612d9657600080fd5b823591506020830135612d6a81612d75565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612dd157600080fd5b823567ffffffffffffffff80821115612de957600080fd5b818501915085601f830112612dfd57600080fd5b813581811115612e0f57612e0f612da8565b8060051b604051601f19603f83011681018181108582111715612e3457612e34612da8565b604052918252848201925083810185019188831115612e5257600080fd5b938501935b82851015612e7757612e6885612c34565b84529385019392850192612e57565b98975050505050505050565b600060208284031215612e9557600080fd5b8135610c4381612d75565b60008083601f840112612eb257600080fd5b50813567ffffffffffffffff811115612eca57600080fd5b6020830191508360208260051b8501011115612ee557600080fd5b9250929050565b60008060008060408587031215612f0257600080fd5b843567ffffffffffffffff80821115612f1a57600080fd5b612f2688838901612ea0565b90965094506020870135915080821115612f3f57600080fd5b50612f4c87828801612ea0565b95989497509550505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612fa157607f821691505b60208210811415612fc257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ff857612ff8612fc8565b500290565b634e487b7160e01b600052603260045260246000fd5b60008282101561302557613025612fc8565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561305457613054612fc8565b5060010190565b60006020828403121561306d57600080fd5b5051919050565b60006020828403121561308657600080fd5b8151610c4381612d75565b600082198211156130a4576130a4612fc8565b500190565b6000826130c657634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156130dd57600080fd5b8151610c4381612c1f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131385784516001600160a01b031683529383019391830191600101613113565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561316e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220934a480f7b63b03660ea8839abdcd506b26dd0ed17a70c00eb7f423295b5299864736f6c63430008090033

Deployed Bytecode Sourcemap

26940:20900:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36685:113;;;;;;;;;;-1:-1:-1;36685:113:0;;;;;:::i;:::-;;:::i;:::-;;29492:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30404:161;;;;;;;;;;-1:-1:-1;30404:161:0;;;;;:::i;:::-;;:::i;:::-;;;1628:14:1;;1621:22;1603:41;;1591:2;1576:18;30404:161:0;1463:187:1;31525:87:0;;;;;;;;;;-1:-1:-1;31594:10:0;;31525:87;;;1801:25:1;;;1789:2;1774:18;31525:87:0;1655:177:1;28086:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2028:32:1;;;2010:51;;1998:2;1983:18;28086:51:0;1837:230:1;29769:95:0;;;;;;;;;;-1:-1:-1;29849:7:0;;29769:95;;30573:313;;;;;;;;;;-1:-1:-1;30573:313:0;;;;;:::i;:::-;;:::i;35559:266::-;;;;;;;;;;-1:-1:-1;35559:266:0;;;;;:::i;:::-;;:::i;36568:109::-;;;;;;;;;;-1:-1:-1;36568:109:0;;;;;:::i;:::-;;:::i;33233:253::-;;;;;;;;;;-1:-1:-1;33233:253:0;;;;;:::i;:::-;;:::i;27472:28::-;;;;;;;;;;-1:-1:-1;27472:28:0;;;;;;;;;;;29678:83;;;;;;;;;;-1:-1:-1;29744:9:0;;29678:83;;29744:9;;;;2860:36:1;;2848:2;2833:18;29678:83:0;2718:184:1;33949:479:0;;;;;;;;;;-1:-1:-1;33949:479:0;;;;;:::i;:::-;;:::i;30894:218::-;;;;;;;;;;-1:-1:-1;30894:218:0;;;;;:::i;:::-;;:::i;36043:185::-;;;;;;;;;;-1:-1:-1;36043:185:0;;;;;:::i;:::-;;:::i;27901:26::-;;;;;;;;;;;;;;;;32404:377;;;;;;;;;;-1:-1:-1;32404:377:0;;;;;:::i;:::-;;:::i;35076:111::-;;;;;;;;;;-1:-1:-1;35076:111:0;;;;;:::i;:::-;;:::i;32789:436::-;;;;;;;;;;-1:-1:-1;32789:436:0;;;;;:::i;:::-;;:::i;35833:202::-;;;;;;;;;;;;;:::i;28144:38::-;;;;;;;;;;;;;;;28219:40;;;;;;;;;;-1:-1:-1;28219:40:0;;;;;;;;;;;33494:447;;;;;;;;;;-1:-1:-1;33494:447:0;;;;;:::i;:::-;;:::i;40459:123::-;;;;;;;;;;-1:-1:-1;40459:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;40547:27:0;40523:4;40547:27;;;:18;:27;;;;;;;;;40459:123;35313:118;;;;;;;;;;-1:-1:-1;35313:118:0;;;;;:::i;:::-;;:::i;36806:121::-;;;;;;;;;;-1:-1:-1;36806:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;36898:21:0;36874:4;36898:21;;;:10;:21;;;;;;;;;36806:121;27984:33;;;;;;;;;;;;;;;;29872:198;;;;;;;;;;-1:-1:-1;29872:198:0;;;;;:::i;:::-;;:::i;17633:148::-;;;;;;;;;;;;;:::i;27704:75::-;;;;;;;;;;-1:-1:-1;27704:75:0;;;;-1:-1:-1;;;;;27704:75:0;;;36236:144;;;;;;;;;;-1:-1:-1;36236:144:0;;;;;:::i;:::-;;:::i;28268:54::-;;;;;;;;;;;;;;;;31397:120;;;;;;;;;;-1:-1:-1;31397:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;31489:20:0;31465:4;31489:20;;;:11;:20;;;;;;;;;31397:120;31620:193;;;;;;;;;;-1:-1:-1;31620:193:0;;;;;:::i;:::-;;:::i;16990:79::-;;;;;;;;;;-1:-1:-1;17028:7:0;17055:6;-1:-1:-1;;;;;17055:6:0;16990:79;;29583:87;;;;;;;;;;;;;:::i;31120:269::-;;;;;;;;;;-1:-1:-1;31120:269:0;;;;;:::i;:::-;;:::i;36935:78::-;;;;;;;;;;;;;:::i;18651:305::-;;;;;;;;;;;;;:::i;30078:167::-;;;;;;;;;;-1:-1:-1;30078:167:0;;;;;:::i;:::-;;:::i;36388:172::-;;;;;;;;;;-1:-1:-1;36388:172:0;;;;;:::i;:::-;;:::i;18188:89::-;;;;;;;;;;-1:-1:-1;18260:9:0;;18188:89;;37021:171;;;;;;;;;;-1:-1:-1;37021:171:0;;;;;:::i;:::-;;:::i;28329:68::-;;;;;;;;;;;;;;;;32010:386;;;;;;;;;;-1:-1:-1;32010:386:0;;;;;:::i;:::-;;:::i;18353:226::-;;;;;;;;;;-1:-1:-1;18353:226:0;;;;;:::i;:::-;;:::i;30253:143::-;;;;;;;;;;-1:-1:-1;30253:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;30361:18:0;;;30334:7;30361:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;30253:143;35439:112;;;;;;;;;;;;;:::i;35195:110::-;;;;;;;;;;-1:-1:-1;35195:110:0;;;;;:::i;:::-;;:::i;17936:244::-;;;;;;;;;;-1:-1:-1;17936:244:0;;;;;:::i;:::-;;:::i;36685:113::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;36761:21:0::1;36785:5;36761:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;36761:29:0::1;::::0;;36685:113::o;29492:83::-;29529:13;29562:5;29555:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29492:83;:::o;30404:161::-;30479:4;30496:39;9495:10;30519:7;30528:6;30496:8;:39::i;:::-;-1:-1:-1;30553:4:0;30404:161;;;;;:::o;30573:313::-;30671:4;30688:36;30698:6;30706:9;30717:6;30688:9;:36::i;:::-;30735:121;30744:6;9495:10;30766:89;30804:6;30766:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30766:19:0;;;;;;:11;:19;;;;;;;;9495:10;30766:33;;;;;;;;;;:37;:89::i;:::-;30735:8;:121::i;:::-;-1:-1:-1;30874:4:0;30573:313;;;;;:::o;35559:266::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;35682:8:::1;35660:19;:30;35652:95;;;::::0;-1:-1:-1;;;35652:95:0;;8213:2:1;35652:95:0::1;::::0;::::1;8195:21:1::0;8252:2;8232:18;;;8225:30;8291:34;8271:18;;;8264:62;-1:-1:-1;;;8342:18:1;;;8335:50;8402:19;;35652:95:0::1;8011:416:1::0;35652:95:0::1;35790:27;:19:::0;35812:5:::1;35790:27;:::i;:::-;35758:29;:59:::0;-1:-1:-1;35559:266:0:o;36568:109::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36641:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;36641:28:0::1;36665:4;36641:28;::::0;;36568:109::o;33233:253::-;33299:7;33338;;33327;:18;;33319:73;;;;-1:-1:-1;;;33319:73:0;;8939:2:1;33319:73:0;;;8921:21:1;8978:2;8958:18;;;8951:30;9017:34;8997:18;;;8990:62;-1:-1:-1;;;9068:18:1;;;9061:40;9118:19;;33319:73:0;8737:406:1;33319:73:0;33403:19;33426:10;:8;:10::i;:::-;33403:33;-1:-1:-1;33454:24:0;:7;33403:33;33454:11;:24::i;:::-;33447:31;33233:253;-1:-1:-1;;;33233:253:0:o;33949:479::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34031:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34023:60;;;::::0;-1:-1:-1;;;34023:60:0;;9350:2:1;34023:60:0::1;::::0;::::1;9332:21:1::0;9389:2;9369:18;;;9362:30;9428:29;9408:18;;;9401:57;9475:18;;34023:60:0::1;9148:351:1::0;34023:60:0::1;34099:9;34094:327;34118:9;:16:::0;34114:20;::::1;34094:327;;;34176:7;-1:-1:-1::0;;;;;34160:23:0::1;:9;34170:1;34160:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34160:12:0::1;:23;34156:254;;;34219:9;34229:16:::0;;:20:::1;::::0;34248:1:::1;::::0;34229:20:::1;:::i;:::-;34219:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;34204:9:::1;:12:::0;;-1:-1:-1;;;;;34219:31:0;;::::1;::::0;34214:1;;34204:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;34204:46:0::1;-1:-1:-1::0;;;;;34204:46:0;;::::1;;::::0;;34269:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;34308:11:::1;:20:::0;;;;:28;;-1:-1:-1;;34308:28:0::1;::::0;;34355:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34355:15:0;;;;;-1:-1:-1;;;;;;34355:15:0::1;::::0;;;;;34094:327:::1;33949:479:::0;:::o;34156:254::-:1;34136:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34094:327;;;;33949:479:::0;:::o;30894:218::-;9495:10;30982:4;31031:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;31031:34:0;;;;;;;;;;30982:4;;30999:83;;31022:7;;31031:50;;31070:10;31031:38;:50::i;36043:185::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;36182:37:::1;::::0;-1:-1:-1;;;36182:37:0;;36213:4:::1;36182:37;::::0;::::1;2010:51:1::0;-1:-1:-1;;;;;36145:21:0;::::1;::::0;::::1;::::0;36167:13;;36145:21;;36182:22:::1;::::0;1983:18:1;;36182:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36145:75;::::0;-1:-1:-1;;;;;;36145:75:0::1;::::0;;;;;;-1:-1:-1;;;;;10419:32:1;;;36145:75:0::1;::::0;::::1;10401:51:1::0;10468:18;;;10461:34;10374:18;;36145:75:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36043:185:::0;;:::o;32404:377::-;9495:10;32456:14;32505:19;;;:11;:19;;;;;;;;32504:20;32496:77;;;;-1:-1:-1;;;32496:77:0;;10958:2:1;32496:77:0;;;10940:21:1;10997:2;10977:18;;;10970:30;11036:34;11016:18;;;11009:62;-1:-1:-1;;;11087:18:1;;;11080:42;11139:19;;32496:77:0;10756:408:1;32496:77:0;32585:15;32609:19;32620:7;32609:10;:19::i;:::-;-1:-1:-1;;;;;;;;;32657:15:0;;;;;;:7;:15;;;;;;32584:44;;-1:-1:-1;32657:28:0;;:15;-1:-1:-1;32584:44:0;32657:19;:28::i;:::-;-1:-1:-1;;;;;32639:15:0;;;;;;:7;:15;;;;;:46;32706:7;;:20;;32718:7;32706:11;:20::i;:::-;32696:7;:30;32750:10;;:23;;32765:7;32750:14;:23::i;:::-;32737:10;:36;-1:-1:-1;;;32404:377:0:o;35076:111::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35145:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35145:34:0::1;35175:4;35145:34;::::0;;35076:111::o;32789:436::-;32879:7;32918;;32907;:18;;32899:62;;;;-1:-1:-1;;;32899:62:0;;11371:2:1;32899:62:0;;;11353:21:1;11410:2;11390:18;;;11383:30;11449:33;11429:18;;;11422:61;11500:18;;32899:62:0;11169:355:1;32899:62:0;32977:17;32972:246;;33012:15;33036:19;33047:7;33036:10;:19::i;:::-;-1:-1:-1;33011:44:0;;-1:-1:-1;33070:14:0;;-1:-1:-1;;;;;33070:14:0;32972:246;33119:23;33150:19;33161:7;33150:10;:19::i;:::-;-1:-1:-1;33117:52:0;;-1:-1:-1;33184:22:0;;-1:-1:-1;;;;;33184:22:0;35833:202;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;35979:15:::1;::::0;35971:56:::1;::::0;-1:-1:-1;;;;;35979:15:0;;::::1;::::0;36005:21:::1;35971:56:::0;::::1;;;::::0;35979:15:::1;35971:56:::0;35979:15;35971:56;36005:21;35979:15;35971:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35833:202::o:0;33494:447::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33691:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33690:21;33682:61;;;::::0;-1:-1:-1;;;33682:61:0;;9350:2:1;33682:61:0::1;::::0;::::1;9332:21:1::0;9389:2;9369:18;;;9362:30;9428:29;9408:18;;;9401:57;9475:18;;33682:61:0::1;9148:351:1::0;33682:61:0::1;-1:-1:-1::0;;;;;33757:16:0;::::1;33776:1;33757:16:::0;;;:7:::1;:16;::::0;;;;;:20;33754:108:::1;;-1:-1:-1::0;;;;;33833:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;33813:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;33794:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;33754:108:::1;-1:-1:-1::0;;;;;33872:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;33872:27:0::1;33895:4;33872:27:::0;;::::1;::::0;;;33910:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;33910:23:0::1;::::0;;::::1;::::0;;33494:447::o;35313:118::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;35392:15:::1;:31:::0;;-1:-1:-1;;;;;;35392:31:0::1;-1:-1:-1::0;;;;;35392:31:0;;;::::1;::::0;;;::::1;::::0;;35313:118::o;29872:198::-;-1:-1:-1;;;;;29962:20:0;;29938:7;29962:20;;;:11;:20;;;;;;;;29958:49;;;-1:-1:-1;;;;;;29991:16:0;;;;;:7;:16;;;;;;;29872:198::o;29958:49::-;-1:-1:-1;;;;;30045:16:0;;;;;;:7;:16;;;;;;30025:37;;:19;:37::i;17633:148::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;17740:1:::1;17724:6:::0;;17703:40:::1;::::0;-1:-1:-1;;;;;17724:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17703:40:0;17740:1;;17703:40:::1;17771:1;17754:19:::0;;-1:-1:-1;;;;;;17754:19:0::1;::::0;;17633:148::o;36236:144::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;36327:45:::1;::::0;-1:-1:-1;;;;;36327:22:0;::::1;::::0;36350:21:::1;36327:45:::0;::::1;;;::::0;::::1;::::0;;;36350:21;36327:22;:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;31620:193:::0;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;31704:14:::1;:12;:14::i;:::-;31729:50;9495:10:::0;31753:9;31764:14:::1;:6:::0;31773:5:::1;31764:14;:::i;:::-;31729:9;:50::i;:::-;31790:15;40380::::0;;40370:7;:25;40422:21;;40406:13;:37;40326:125;29583:87;29622:13;29655:7;29648:14;;;;;:::i;31120:269::-;31213:4;31230:129;9495:10;31253:7;31262:96;31301:15;31262:96;;;;;;;;;;;;;;;;;9495:10;31262:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;31262:34:0;;;;;;;;;;;;:38;:96::i;36935:78::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;36990:8:::1;:15:::0;;-1:-1:-1;;36990:15:0::1;;;::::0;;36935:78::o;18651:305::-;18703:14;;-1:-1:-1;;;;;18703:14:0;18721:10;18703:28;18695:76;;;;-1:-1:-1;;;18695:76:0;;11731:2:1;18695:76:0;;;11713:21:1;11770:2;11750:18;;;11743:30;11809:34;11789:18;;;11782:62;-1:-1:-1;;;11860:18:1;;;11853:33;11903:19;;18695:76:0;11529:399:1;18695:76:0;18808:9;;18790:15;:27;18782:72;;;;-1:-1:-1;;;18782:72:0;;12135:2:1;18782:72:0;;;12117:21:1;12174:2;12154:18;;;12147:30;12213:33;12193:18;;;12186:61;12264:18;;18782:72:0;11933:355:1;18782:72:0;18899:14;;;18891:6;;18870:44;;-1:-1:-1;;;;;18899:14:0;;;;18891:6;;;;-1:-1:-1;;;;;;;;;;;18870:44:0;;18934:14;;;18925:23;;-1:-1:-1;;;;;;18925:23:0;-1:-1:-1;;;;;18934:14:0;;;18925:23;;;;;;18651:305::o;30078:167::-;30156:4;30173:42;9495:10;30197:9;30208:6;30173:9;:42::i;36388:172::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;36464:6:::1;36459:94;36480:5;:12;36476:1;:16;36459:94;;;36537:4;36514:10;:20;36525:5;36531:1;36525:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;36514:20:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;36514:20:0;:27;;-1:-1:-1;;36514:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36494:3;::::1;::::0;::::1;:::i;:::-;;;;36459:94;;37021:171:::0;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;37098:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;37098:32:0;;::::1;;::::0;;37146:38:::1;::::0;::::1;::::0;::::1;::::0;37122:8;1628:14:1;1621:22;1603:41;;1591:2;1576:18;;1463:187;37146:38:0::1;;;;;;;;37021:171:::0;:::o;32010:386::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;32122:16:::1;32161:35:::0;;::::1;32153:71;;;::::0;-1:-1:-1;;;32153:71:0;;12495:2:1;32153:71:0::1;::::0;::::1;12477:21:1::0;12534:2;12514:18;;;12507:30;12573:25;12553:18;;;12546:53;12616:18;;32153:71:0::1;12293:347:1::0;32153:71:0::1;32241:28:::0;;::::1;32235:154;;;32285:64;32301:10;;32312:8;32301:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32323:7;;32331:8;32323:17;;;;;;;:::i;:::-;;;;;;;32343:5;32323:25;;;;:::i;:::-;32285:15;:64::i;:::-;32364:13;32376:1;32364:13:::0;::::1;:::i;:::-;;;32235:154;;;32111:285;32010:386:::0;;;;:::o;18353:226::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;18434:6:::1;::::0;;;18417:23;;-1:-1:-1;;;;;;18417:23:0;;::::1;-1:-1:-1::0;;;;;18434:6:0;::::1;18417:23;::::0;;;18451:19:::1;::::0;;18493:22:::1;18511:4:::0;18493:15:::1;:22;:::i;:::-;18481:9;:34:::0;18568:1:::1;18552:6:::0;;18531:40:::1;::::0;-1:-1:-1;;;;;18552:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;18531:40:0;18568:1;;18531:40:::1;18353:226:::0;:::o;35439:112::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;35512:31:::1;35497:12;:46:::0;35439:112::o;35195:110::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35262:27:0::1;35292:5;35262:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35262:35:0::1;::::0;;35195:110::o;17936:244::-;17202:6;;-1:-1:-1;;;;;17202:6:0;9495:10;17202:22;17194:67;;;;-1:-1:-1;;;17194:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18025:22:0;::::1;18017:73;;;::::0;-1:-1:-1;;;18017:73:0;;12980:2:1;18017:73:0::1;::::0;::::1;12962:21:1::0;13019:2;12999:18;;;12992:30;13058:34;13038:18;;;13031:62;-1:-1:-1;;;13109:18:1;;;13102:36;13155:19;;18017:73:0::1;12778:402:1::0;18017:73:0::1;18127:6;::::0;;18106:38:::1;::::0;-1:-1:-1;;;;;18106:38:0;;::::1;::::0;18127:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;18106:38:0;::::1;18155:6;:17:::0;;-1:-1:-1;;;;;;18155:17:0::1;-1:-1:-1::0;;;;;18155:17:0;;;::::1;::::0;;;::::1;::::0;;17936:244::o;40590:337::-;-1:-1:-1;;;;;40683:19:0;;40675:68;;;;-1:-1:-1;;;40675:68:0;;13387:2:1;40675:68:0;;;13369:21:1;13426:2;13406:18;;;13399:30;13465:34;13445:18;;;13438:62;-1:-1:-1;;;13516:18:1;;;13509:34;13560:19;;40675:68:0;13185:400:1;40675:68:0;-1:-1:-1;;;;;40762:21:0;;40754:68;;;;-1:-1:-1;;;40754:68:0;;13792:2:1;40754:68:0;;;13774:21:1;13831:2;13811:18;;;13804:30;13870:34;13850:18;;;13843:62;-1:-1:-1;;;13921:18:1;;;13914:32;13963:19;;40754:68:0;13590:398:1;40754:68:0;-1:-1:-1;;;;;40835:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;40887:32;;1801:25:1;;;40887:32:0;;1774:18:1;40887:32:0;;;;;;;40590:337;;;:::o;40935:1773::-;-1:-1:-1;;;;;41057:18:0;;41049:68;;;;-1:-1:-1;;;41049:68:0;;14195:2:1;41049:68:0;;;14177:21:1;14234:2;14214:18;;;14207:30;14273:34;14253:18;;;14246:62;-1:-1:-1;;;14324:18:1;;;14317:35;14369:19;;41049:68:0;13993:401:1;41049:68:0;-1:-1:-1;;;;;41136:16:0;;41128:64;;;;-1:-1:-1;;;41128:64:0;;14601:2:1;41128:64:0;;;14583:21:1;14640:2;14620:18;;;14613:30;14679:34;14659:18;;;14652:62;-1:-1:-1;;;14730:18:1;;;14723:33;14773:19;;41128:64:0;14399:399:1;41128:64:0;41220:1;41211:6;:10;41203:64;;;;-1:-1:-1;;;41203:64:0;;15005:2:1;41203:64:0;;;14987:21:1;15044:2;15024:18;;;15017:30;15083:34;15063:18;;;15056:62;-1:-1:-1;;;15134:18:1;;;15127:39;15183:19;;41203:64:0;14803:405:1;41203:64:0;17028:7;17055:6;-1:-1:-1;;;;;41281:15:0;;;17055:6;;41281:15;;;;:32;;-1:-1:-1;17028:7:0;17055:6;-1:-1:-1;;;;;41300:13:0;;;17055:6;;41300:13;;41281:32;41278:125;;;41346:12;;41336:6;:22;;41328:75;;;;-1:-1:-1;;;41328:75:0;;15415:2:1;41328:75:0;;;15397:21:1;15454:2;15434:18;;;15427:30;15493:34;15473:18;;;15466:62;-1:-1:-1;;;15544:18:1;;;15537:38;15592:19;;41328:75:0;15213:404:1;41328:75:0;41698:28;41729:24;41747:4;41729:9;:24::i;:::-;41698:55;;41793:12;;41769:20;:36;41766:112;;-1:-1:-1;41854:12:0;;41766:112;41941:29;;41917:53;;;;;;;41999;;-1:-1:-1;42036:16:0;;;;42035:17;41999:53;:91;;;;;42077:13;-1:-1:-1;;;;;42069:21:0;:4;-1:-1:-1;;;;;42069:21:0;;;41999:91;:129;;;;-1:-1:-1;42107:21:0;;;;;;;41999:129;41981:318;;;42178:29;;42155:52;;42251:36;42266:20;42251:14;:36::i;:::-;-1:-1:-1;;;;;42491:24:0;;42372:12;42491:24;;;:18;:24;;;;;;42387:4;;42491:24;;;:50;;-1:-1:-1;;;;;;42519:22:0;;;;;;:18;:22;;;;;;;;42491:50;42488:96;;;-1:-1:-1;42567:5:0;42488:96;42662:38;42677:4;42682:2;42685:6;42692:7;42662:14;:38::i;:::-;41038:1670;;;40935:1773;;;:::o;5746:192::-;5832:7;5868:12;5860:6;;;;5852:29;;;;-1:-1:-1;;;5852:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5892:9:0;5904:5;5908:1;5904;:5;:::i;:::-;5892:17;5746:192;-1:-1:-1;;;;;5746:192:0:o;38651:163::-;38692:7;38713:15;38730;38749:19;:17;:19::i;:::-;38712:56;;-1:-1:-1;38712:56:0;-1:-1:-1;38786:20:0;38712:56;;38786:11;:20::i;:::-;38779:27;;;;38651:163;:::o;7144:132::-;7202:7;7229:39;7233:1;7236;7229:39;;;;;;;;;;;;;;;;;:3;:39::i;4843:181::-;4901:7;;4933:5;4937:1;4933;:5;:::i;:::-;4921:17;;4962:1;4957;:6;;4949:46;;;;-1:-1:-1;;;4949:46:0;;15824:2:1;4949:46:0;;;15806:21:1;15863:2;15843:18;;;15836:30;15902:29;15882:18;;;15875:57;15949:18;;4949:46:0;15622:351:1;37449:419:0;37508:7;37517;37526;37535;37544;37553;37574:23;37599:12;37613:18;37635:20;37647:7;37635:11;:20::i;:::-;37573:82;;;;;;37667:15;37684:23;37709:12;37725:50;37737:7;37746:4;37752:10;37764;:8;:10::i;:::-;37725:11;:50::i;:::-;37666:109;;;;-1:-1:-1;37666:109:0;;-1:-1:-1;37826:15:0;;-1:-1:-1;37843:4:0;;-1:-1:-1;37849:10:0;;-1:-1:-1;37449:419:0;;-1:-1:-1;;;;;37449:419:0:o;5307:136::-;5365:7;5392:43;5396:1;5399;5392:43;;;;;;;;;;;;;;;;;:3;:43::i;40084:234::-;40130:7;;:12;:34;;;;-1:-1:-1;40146:13:0;;:18;40130:34;40127:46;;;40084:234::o;40127:46::-;40203:7;;;40185:15;:25;40245:13;;;40221:21;:37;-1:-1:-1;40271:11:0;;;;40293:17;40084:234::o;31821:181::-;31901:14;:12;:14::i;:::-;31926:42;9495:10;31950:9;31961:6;31926:9;:42::i;42716:1174::-;28696:16;:23;;-1:-1:-1;;28696:23:0;28715:4;28696:23;;;:16;42904:27:::1;:20:::0;42929:1:::1;42904:24;:27::i;:::-;42889:42:::0;-1:-1:-1;42942:17:0::1;42962:30;:20:::0;42889:42;42962:24:::1;:30::i;:::-;42942:50:::0;-1:-1:-1;43295:21:0::1;43361:22;43378:4:::0;43361:16:::1;:22::i;:::-;43514:18;43535:41;:21;43561:14:::0;43535:25:::1;:41::i;:::-;43514:62:::0;-1:-1:-1;43587:22:0::1;43612:27;43635:3;43612:18;43514:62:::0;43627:2:::1;43612:14;:18::i;:::-;:22:::0;::::1;:27::i;:::-;43658:15;::::0;43650:49:::1;::::0;43587:52;;-1:-1:-1;;;;;;43658:15:0::1;::::0;43650:49;::::1;;;::::0;43587:52;;43658:15:::1;43650:49:::0;43658:15;43650:49;43587:52;43658:15;43650:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;43710:28:0::1;43724:14:::0;43710:28;::::1;:::i;:::-;;;43786:35;43799:9;43810:10;43786:12;:35::i;:::-;43839:43;::::0;;16180:25:1;;;16236:2;16221:18;;16214:34;;;16264:18;;;16257:34;;;43839:43:0::1;::::0;16168:2:1;16153:18;43839:43:0::1;;;;;;;-1:-1:-1::0;;28742:16:0;:24;;-1:-1:-1;;28742:24:0;;;-1:-1:-1;;;;42716:1174:0:o;45089:1082::-;45200:8;;;;;;;45196:114;;17028:7;17055:6;-1:-1:-1;;;;;45232:17:0;;;17055:6;;45232:17;45224:26;;;;;;-1:-1:-1;;;;;45325:18:0;;;;;;:10;:18;;;;;;;;;:43;;-1:-1:-1;;;;;;45347:21:0;;;;;;:10;:21;;;;;;;;45325:43;45322:126;;;45392:12;;;;45384:52;;;;-1:-1:-1;;;45384:52:0;;16504:2:1;45384:52:0;;;16486:21:1;16543:2;16523:18;;;16516:30;16582:29;16562:18;;;16555:57;16629:18;;45384:52:0;16302:351:1;45384:52:0;45464:7;45460:40;;45486:14;:12;:14::i;:::-;-1:-1:-1;;;;;45517:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;45541:22:0;;;;;;:11;:22;;;;;;;;45540:23;45517:46;45513:597;;;45580:48;45602:6;45610:9;45621:6;45580:21;:48::i;:::-;45513:597;;;-1:-1:-1;;;;;45651:19:0;;;;;;:11;:19;;;;;;;;45650:20;:46;;;;-1:-1:-1;;;;;;45674:22:0;;;;;;:11;:22;;;;;;;;45650:46;45646:464;;;45713:46;45733:6;45741:9;45752:6;45713:19;:46::i;45646:464::-;-1:-1:-1;;;;;45782:19:0;;;;;;:11;:19;;;;;;;;45781:20;:47;;;;-1:-1:-1;;;;;;45806:22:0;;;;;;:11;:22;;;;;;;;45805:23;45781:47;45777:333;;;45845:44;45863:6;45871:9;45882:6;45845:17;:44::i;45777:333::-;-1:-1:-1;;;;;45911:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;45934:22:0;;;;;;:11;:22;;;;;;;;45911:45;45907:203;;;45973:48;45995:6;46003:9;46014:6;45973:21;:48::i;45907:203::-;46054:44;46072:6;46080:9;46091:6;46054:17;:44::i;:::-;46126:7;46122:41;;46148:15;40380;;40370:7;:25;40422:21;;40406:13;:37;40326:125;46148:15;45089:1082;;;;:::o;38822:555::-;38919:7;;38955;;38872;;;;;38973:289;38997:9;:16;38993:20;;38973:289;;;39063:7;39039;:21;39047:9;39057:1;39047:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39047:12:0;39039:21;;;;;;;;;;;;;:31;;:66;;;39098:7;39074;:21;39082:9;39092:1;39082:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39082:12:0;39074:21;;;;;;;;;;;;;:31;39039:66;39035:97;;;39115:7;;39124;;39107:25;;;;;;;38822:555;;:::o;39035:97::-;39157:34;39169:7;:21;39177:9;39187:1;39177:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39177:12:0;39169:21;;;;;;;;;;;;;39157:7;;:11;:34::i;:::-;39147:44;;39216:34;39228:7;:21;39236:9;39246:1;39236:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39236:12:0;39228:21;;;;;;;;;;;;;39216:7;;:11;:34::i;:::-;39206:44;-1:-1:-1;39015:3:0;;;;:::i;:::-;;;;38973:289;;;-1:-1:-1;39298:7:0;;39286;;:20;;:11;:20::i;:::-;39276:7;:30;39272:61;;;39316:7;;39325;;39308:25;;;;;;38822:555;;:::o;39272:61::-;39352:7;;39361;;-1:-1:-1;38822:555:0;-1:-1:-1;38822:555:0:o;7772:278::-;7858:7;7893:12;7886:5;7878:28;;;;-1:-1:-1;;;7878:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7917:9:0;7929:5;7933:1;7929;:5;:::i;37876:330::-;37936:7;37945;37954;37974:12;37989:24;38005:7;37989:15;:24::i;:::-;37974:39;;38024:18;38045:30;38067:7;38045:21;:30::i;:::-;38024:51;-1:-1:-1;38086:23:0;38112:33;38024:51;38112:17;:7;38124:4;38112:11;:17::i;:::-;:21;;:33::i;:::-;38086:59;38181:4;;-1:-1:-1;38187:10:0;;-1:-1:-1;37876:330:0;;-1:-1:-1;;;37876:330:0:o;38214:429::-;38329:7;;;;38385:24;:7;38397:11;38385;:24::i;:::-;38367:42;-1:-1:-1;38420:12:0;38435:21;:4;38444:11;38435:8;:21::i;:::-;38420:36;-1:-1:-1;38467:18:0;38488:27;:10;38503:11;38488:14;:27::i;:::-;38467:48;-1:-1:-1;38526:23:0;38552:33;38467:48;38552:17;:7;38564:4;38552:11;:17::i;:33::-;38604:7;;;;-1:-1:-1;38630:4:0;;-1:-1:-1;38214:429:0;;-1:-1:-1;;;;;;;38214:429:0:o;43898:589::-;44048:16;;;44062:1;44048:16;;;;;;;;44024:21;;44048:16;;;;;;;;;;-1:-1:-1;44048:16:0;44024:40;;44093:4;44075;44080:1;44075:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;44075:23:0;;;-1:-1:-1;;;;;44075:23:0;;;;;44119:15;-1:-1:-1;;;;;44119:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44109:4;44114:1;44109:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;44109:32:0;;;-1:-1:-1;;;;;44109:32:0;;;;;44154:62;44171:4;44186:15;44204:11;44154:8;:62::i;:::-;44255:224;;-1:-1:-1;;;44255:224:0;;-1:-1:-1;;;;;44255:15:0;:66;;;;:224;;44336:11;;44362:1;;44406:4;;44433;;44453:15;;44255:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6197:471;6255:7;6500:6;6496:47;;-1:-1:-1;6530:1:0;6523:8;;6496:47;6555:9;6567:5;6571:1;6567;:5;:::i;:::-;6555:17;-1:-1:-1;6600:1:0;6591:5;6595:1;6555:17;6591:5;:::i;:::-;:10;6583:56;;;;-1:-1:-1;;;6583:56:0;;18323:2:1;6583:56:0;;;18305:21:1;18362:2;18342:18;;;18335:30;18401:34;18381:18;;;18374:62;-1:-1:-1;;;18452:18:1;;;18445:31;18493:19;;6583:56:0;18121:397:1;44495:513:0;44643:62;44660:4;44675:15;44693:11;44643:8;:62::i;:::-;44748:15;-1:-1:-1;;;;;44748:31:0;;44787:9;44820:4;44840:11;44866:1;44909;44952:7;17028;17055:6;-1:-1:-1;;;;;17055:6:0;;16990:79;44952:7;44748:252;;;;;;-1:-1:-1;;;;;;44748:252:0;;;-1:-1:-1;;;;;18882:15:1;;;44748:252:0;;;18864:34:1;18914:18;;;18907:34;;;;18957:18;;;18950:34;;;;19000:18;;;18993:34;19064:15;;;19043:19;;;19036:44;44974:15:0;19096:19:1;;;19089:35;18798:19;;44748:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;47272:563::-;47375:15;47392:23;47417:12;47431:23;47456:12;47470:18;47492:19;47503:7;47492:10;:19::i;:::-;-1:-1:-1;;;;;47540:15:0;;;;;;:7;:15;;;;;;47374:137;;-1:-1:-1;47374:137:0;;-1:-1:-1;47374:137:0;;-1:-1:-1;47374:137:0;-1:-1:-1;47374:137:0;-1:-1:-1;47374:137:0;-1:-1:-1;47540:28:0;;47560:7;47540:19;:28::i;:::-;-1:-1:-1;;;;;47522:15:0;;;;;;:7;:15;;;;;;;;:46;;;;47597:7;:15;;;;:28;;47617:7;47597:19;:28::i;:::-;-1:-1:-1;;;;;47579:15:0;;;;;;;:7;:15;;;;;;:46;;;;47657:18;;;;;;;:39;;47680:15;47657:22;:39::i;:::-;-1:-1:-1;;;;;47636:18:0;;;;;;:7;:18;;;;;:60;47707:26;47722:10;47707:14;:26::i;:::-;47744:23;47756:4;47762;47744:11;:23::i;:::-;47800:9;-1:-1:-1;;;;;47783:44:0;47792:6;-1:-1:-1;;;;;47783:44:0;;47811:15;47783:44;;;;1801:25:1;;1789:2;1774:18;;1655:177;47783:44:0;;;;;;;;47363:472;;;;;;47272:563;;;:::o;46689:575::-;46790:15;46807:23;46832:12;46846:23;46871:12;46885:18;46907:19;46918:7;46907:10;:19::i;:::-;-1:-1:-1;;;;;46955:15:0;;;;;;:7;:15;;;;;;46789:137;;-1:-1:-1;46789:137:0;;-1:-1:-1;46789:137:0;;-1:-1:-1;46789:137:0;-1:-1:-1;46789:137:0;-1:-1:-1;46789:137:0;-1:-1:-1;46955:28:0;;46789:137;46955:19;:28::i;:::-;-1:-1:-1;;;;;46937:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;47015:18;;;;;:7;:18;;;;;:39;;47038:15;47015:22;:39::i;:::-;-1:-1:-1;;;;;46994:18:0;;;;;;:7;:18;;;;;;;;:60;;;;47086:7;:18;;;;:39;;47109:15;47086:22;:39::i;46179:502::-;46278:15;46295:23;46320:12;46334:23;46359:12;46373:18;46395:19;46406:7;46395:10;:19::i;:::-;-1:-1:-1;;;;;46443:15:0;;;;;;:7;:15;;;;;;46277:137;;-1:-1:-1;46277:137:0;;-1:-1:-1;46277:137:0;;-1:-1:-1;46277:137:0;-1:-1:-1;46277:137:0;-1:-1:-1;46277:137:0;-1:-1:-1;46443:28:0;;46277:137;46443:19;:28::i;34434:634::-;34537:15;34554:23;34579:12;34593:23;34618:12;34632:18;34654:19;34665:7;34654:10;:19::i;:::-;-1:-1:-1;;;;;34702:15:0;;;;;;:7;:15;;;;;;34536:137;;-1:-1:-1;34536:137:0;;-1:-1:-1;34536:137:0;;-1:-1:-1;34536:137:0;-1:-1:-1;34536:137:0;-1:-1:-1;34536:137:0;-1:-1:-1;34702:28:0;;34722:7;34702:19;:28::i;:::-;-1:-1:-1;;;;;34684:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34759:7;:15;;;;:28;;34779:7;34759:19;:28::i;39748:154::-;39812:7;39839:55;39878:5;39839:20;39851:7;;39839;:11;;:20;;;;:::i;39910:166::-;39980:7;40007:61;40052:5;40007:26;40019:13;;40007:7;:11;;:26;;;;:::i;39385:355::-;39448:19;39471:10;:8;:10::i;:::-;39448:33;-1:-1:-1;39492:18:0;39513:27;:10;39448:33;39513:14;:27::i;:::-;39592:4;39576:22;;;;:7;:22;;;;;;39492:48;;-1:-1:-1;39576:38:0;;39492:48;39576:26;:38::i;:::-;39567:4;39551:22;;;;:7;:22;;;;;;;;:63;;;;39628:11;:26;;;;;;39625:107;;;39710:4;39694:22;;;;:7;:22;;;;;;:38;;39721:10;39694:26;:38::i;:::-;39685:4;39669:22;;;;:7;:22;;;;;:63;39437:303;;39385:355;:::o;37294:147::-;37372:7;;:17;;37384:4;37372:11;:17::i;:::-;37362:7;:27;37413:10;;:20;;37428:4;37413:14;:20::i;:::-;37400:10;:33;-1:-1:-1;;37294:147:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;541:597::-;653:4;682:2;711;700:9;693:21;743:6;737:13;786:6;781:2;770:9;766:18;759:34;811:1;821:140;835:6;832:1;829:13;821:140;;;930:14;;;926:23;;920:30;896:17;;;915:2;892:26;885:66;850:10;;821:140;;;979:6;976:1;973:13;970:91;;;1049:1;1044:2;1035:6;1024:9;1020:22;1016:31;1009:42;970:91;-1:-1:-1;1122:2:1;1101:15;-1:-1:-1;;1097:29:1;1082:45;;;;1129:2;1078:54;;541:597;-1:-1:-1;;;541:597:1:o;1143:315::-;1211:6;1219;1272:2;1260:9;1251:7;1247:23;1243:32;1240:52;;;1288:1;1285;1278:12;1240:52;1327:9;1314:23;1346:31;1371:5;1346:31;:::i;:::-;1396:5;1448:2;1433:18;;;;1420:32;;-1:-1:-1;;;1143:315:1:o;2072:456::-;2149:6;2157;2165;2218:2;2206:9;2197:7;2193:23;2189:32;2186:52;;;2234:1;2231;2224:12;2186:52;2273:9;2260:23;2292:31;2317:5;2292:31;:::i;:::-;2342:5;-1:-1:-1;2399:2:1;2384:18;;2371:32;2412:33;2371:32;2412:33;:::i;:::-;2072:456;;2464:7;;-1:-1:-1;;;2518:2:1;2503:18;;;;2490:32;;2072:456::o;2533:180::-;2592:6;2645:2;2633:9;2624:7;2620:23;2616:32;2613:52;;;2661:1;2658;2651:12;2613:52;-1:-1:-1;2684:23:1;;2533:180;-1:-1:-1;2533:180:1:o;2907:401::-;2988:6;2996;3049:2;3037:9;3028:7;3024:23;3020:32;3017:52;;;3065:1;3062;3055:12;3017:52;3104:9;3091:23;3123:31;3148:5;3123:31;:::i;:::-;3173:5;-1:-1:-1;3230:2:1;3215:18;;3202:32;3243:33;3202:32;3243:33;:::i;:::-;3295:7;3285:17;;;2907:401;;;;;:::o;3313:118::-;3399:5;3392:13;3385:21;3378:5;3375:32;3365:60;;3421:1;3418;3411:12;3436:309;3501:6;3509;3562:2;3550:9;3541:7;3537:23;3533:32;3530:52;;;3578:1;3575;3568:12;3530:52;3614:9;3601:23;3591:33;;3674:2;3663:9;3659:18;3646:32;3687:28;3709:5;3687:28;:::i;4218:127::-;4279:10;4274:3;4270:20;4267:1;4260:31;4310:4;4307:1;4300:15;4334:4;4331:1;4324:15;4350:1121;4434:6;4465:2;4508;4496:9;4487:7;4483:23;4479:32;4476:52;;;4524:1;4521;4514:12;4476:52;4564:9;4551:23;4593:18;4634:2;4626:6;4623:14;4620:34;;;4650:1;4647;4640:12;4620:34;4688:6;4677:9;4673:22;4663:32;;4733:7;4726:4;4722:2;4718:13;4714:27;4704:55;;4755:1;4752;4745:12;4704:55;4791:2;4778:16;4813:2;4809;4806:10;4803:36;;;4819:18;;:::i;:::-;4865:2;4862:1;4858:10;4897:2;4891:9;4960:2;4956:7;4951:2;4947;4943:11;4939:25;4931:6;4927:38;5015:6;5003:10;5000:22;4995:2;4983:10;4980:18;4977:46;4974:72;;;5026:18;;:::i;:::-;5062:2;5055:22;5112:18;;;5146:15;;;;-1:-1:-1;5188:11:1;;;5184:20;;;5216:19;;;5213:39;;;5248:1;5245;5238:12;5213:39;5272:11;;;;5292:148;5308:6;5303:3;5300:15;5292:148;;;5374:23;5393:3;5374:23;:::i;:::-;5362:36;;5325:12;;;;5418;;;;5292:148;;;5459:6;4350:1121;-1:-1:-1;;;;;;;;4350:1121:1:o;5476:241::-;5532:6;5585:2;5573:9;5564:7;5560:23;5556:32;5553:52;;;5601:1;5598;5591:12;5553:52;5640:9;5627:23;5659:28;5681:5;5659:28;:::i;5722:367::-;5785:8;5795:6;5849:3;5842:4;5834:6;5830:17;5826:27;5816:55;;5867:1;5864;5857:12;5816:55;-1:-1:-1;5890:20:1;;5933:18;5922:30;;5919:50;;;5965:1;5962;5955:12;5919:50;6002:4;5994:6;5990:17;5978:29;;6062:3;6055:4;6045:6;6042:1;6038:14;6030:6;6026:27;6022:38;6019:47;6016:67;;;6079:1;6076;6069:12;6016:67;5722:367;;;;;:::o;6094:773::-;6216:6;6224;6232;6240;6293:2;6281:9;6272:7;6268:23;6264:32;6261:52;;;6309:1;6306;6299:12;6261:52;6349:9;6336:23;6378:18;6419:2;6411:6;6408:14;6405:34;;;6435:1;6432;6425:12;6405:34;6474:70;6536:7;6527:6;6516:9;6512:22;6474:70;:::i;:::-;6563:8;;-1:-1:-1;6448:96:1;-1:-1:-1;6651:2:1;6636:18;;6623:32;;-1:-1:-1;6667:16:1;;;6664:36;;;6696:1;6693;6686:12;6664:36;;6735:72;6799:7;6788:8;6777:9;6773:24;6735:72;:::i;:::-;6094:773;;;;-1:-1:-1;6826:8:1;-1:-1:-1;;;;6094:773:1:o;7265:356::-;7467:2;7449:21;;;7486:18;;;7479:30;7545:34;7540:2;7525:18;;7518:62;7612:2;7597:18;;7265:356::o;7626:380::-;7705:1;7701:12;;;;7748;;;7769:61;;7823:4;7815:6;7811:17;7801:27;;7769:61;7876:2;7868:6;7865:14;7845:18;7842:38;7839:161;;;7922:10;7917:3;7913:20;7910:1;7903:31;7957:4;7954:1;7947:15;7985:4;7982:1;7975:15;7839:161;;7626:380;;;:::o;8432:127::-;8493:10;8488:3;8484:20;8481:1;8474:31;8524:4;8521:1;8514:15;8548:4;8545:1;8538:15;8564:168;8604:7;8670:1;8666;8662:6;8658:14;8655:1;8652:21;8647:1;8640:9;8633:17;8629:45;8626:71;;;8677:18;;:::i;:::-;-1:-1:-1;8717:9:1;;8564:168::o;9504:127::-;9565:10;9560:3;9556:20;9553:1;9546:31;9596:4;9593:1;9586:15;9620:4;9617:1;9610:15;9636:125;9676:4;9704:1;9701;9698:8;9695:34;;;9709:18;;:::i;:::-;-1:-1:-1;9746:9:1;;9636:125::o;9766:127::-;9827:10;9822:3;9818:20;9815:1;9808:31;9858:4;9855:1;9848:15;9882:4;9879:1;9872:15;9898:135;9937:3;-1:-1:-1;;9958:17:1;;9955:43;;;9978:18;;:::i;:::-;-1:-1:-1;10025:1:1;10014:13;;9898:135::o;10038:184::-;10108:6;10161:2;10149:9;10140:7;10136:23;10132:32;10129:52;;;10177:1;10174;10167:12;10129:52;-1:-1:-1;10200:16:1;;10038:184;-1:-1:-1;10038:184:1:o;10506:245::-;10573:6;10626:2;10614:9;10605:7;10601:23;10597:32;10594:52;;;10642:1;10639;10632:12;10594:52;10674:9;10668:16;10693:28;10715:5;10693:28;:::i;12645:128::-;12685:3;12716:1;12712:6;12709:1;12706:13;12703:39;;;12722:18;;:::i;:::-;-1:-1:-1;12758:9:1;;12645:128::o;16658:217::-;16698:1;16724;16714:132;;16768:10;16763:3;16759:20;16756:1;16749:31;16803:4;16800:1;16793:15;16831:4;16828:1;16821:15;16714:132;-1:-1:-1;16860:9:1;;16658:217::o;16880:251::-;16950:6;17003:2;16991:9;16982:7;16978:23;16974:32;16971:52;;;17019:1;17016;17009:12;16971:52;17051:9;17045:16;17070:31;17095:5;17070:31;:::i;17136:980::-;17398:4;17446:3;17435:9;17431:19;17477:6;17466:9;17459:25;17503:2;17541:6;17536:2;17525:9;17521:18;17514:34;17584:3;17579:2;17568:9;17564:18;17557:31;17608:6;17643;17637:13;17674:6;17666;17659:22;17712:3;17701:9;17697:19;17690:26;;17751:2;17743:6;17739:15;17725:29;;17772:1;17782:195;17796:6;17793:1;17790:13;17782:195;;;17861:13;;-1:-1:-1;;;;;17857:39:1;17845:52;;17952:15;;;;17917:12;;;;17893:1;17811:9;17782:195;;;-1:-1:-1;;;;;;;18033:32:1;;;;18028:2;18013:18;;18006:60;-1:-1:-1;;;18097:3:1;18082:19;18075:35;17994:3;17136:980;-1:-1:-1;;;17136:980:1:o;19135:306::-;19223:6;19231;19239;19292:2;19280:9;19271:7;19267:23;19263:32;19260:52;;;19308:1;19305;19298:12;19260:52;19337:9;19331:16;19321:26;;19387:2;19376:9;19372:18;19366:25;19356:35;;19431:2;19420:9;19416:18;19410:25;19400:35;;19135:306;;;;;:::o

Swarm Source

ipfs://934a480f7b63b03660ea8839abdcd506b26dd0ed17a70c00eb7f423295b52998
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.