ETH Price: $2,439.14 (+1.49%)

Token

Lunch (LUNCH)
 

Overview

Max Total Supply

10,000,000 LUNCH

Holders

53

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
33.927622916 LUNCH

Value
$0.00
0x6a2b52758807d7325ce7ac90b09bdb8f23b0445a
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:
lunch

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-16
*/

/*
                                                                                          
                                       ..    :......:                                     
                             ::....:::.  .::.        ....:::                              
                            -                               =                             
                            -                           .   -                             
                            -.  .:-    .::     .-:      ==.:                              
                             .:=  .:=:.  .:...:.  ::.::: -                                
                               -    =.       +       .=  -                                
                               -    -:      .-        +  -                                
                               -                         -                                
                               -  .:-=++=--+##+==+*+=-:. -                                
                               #******+.    =.    .*****#+                                
                              .@*****#   :  +: :    #***%+                                
                              .@#*****:   :+**=.   .***%%*                                
                               @%****************+****#@%*                                
                               #%%******###%#%%%#*****%%%*                                
                              .+%%%#*#%%########%@#**#@%%*:-:.                            
                          -+#%*:+%%%%@%****##****%@##%%%#=#####=:                         
                        :#######::*%%%%%%%%%%%%%%%%%%%#- ########*.                       
                      .+#########. -%%%%%%@@@@%%%%%%%#. -##########=                      
                     -############. -+++++++******###- .############+                     
                    +##############:                   +##############.                   
                  -################.                    =##############-                  
                 +###############*.                      :##############+                 
                =*##############-    =--::=  * *--.+=-.    +#############*                
               :******#######+-     +-   :*--% #-- *=-      :*#########***:               
               ***********-.        .+:..:=  # #::.*.         -#%##********               
              :***********             .                        +**********=              
              =**********.                                       ***********              
              +*********:                                        .*********#              
              #********=                                          :********#.             
             .#*******+                                            -********=             
             ********+                                              =********             
            +*******#                                                ********+            
            -=++**++=-                                               *********:           
                     ::                                            ::  .::::              
                       #+=-.                                   .:=+-                      
                       #++++*+=-::                     .:--=+**++++:                      
                       *+++++++++++*+==--::.    .:--=+*+++++++++++*:                      
                       *+++++++++++++++++++++*#++++++++++++++++++++-                      
                       *++++++++++++++++++++++#+++++++++++++++++++++                      
                      :*++++++++++++++++++++++#++++++++++++++++++++*:                     
                   :+*%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%+.          ::..       
                     ::--===++++++++++===---::-==++++*************+-.=+-+ ==:+++*:= =-=+# 
                                                                     ::.: ....:-=-:.:.:..


Hey kids! Chef here.  Oh boy I hope you're hungry kids because there's only one thing
on the menu today.  Bull.  Bull.  Bull.  And more bull!! I don't know anbout you
but I sure have been looking forward to this.  Its time for lunch.
  
$LUNCH.  We all eat.  

The Bullrun is here, we can all feel it.  Time for some good memes and reflections tokens.

  Tokenomics
  8% buy / 8% sell
    -2% to reflections
    -3% to liquidity
    -3% to development and marketing
    (There will be an aditional 2% tax added to buys and sells for the first 24 hours)

Contract will be renounced after early sell taxes reduced.

Telegram https://t.me/lunchERC20
Twitter https://twitter.com/LunchERC20
Website LunchERC20.com

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.9;
interface IERC20 {

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}
library SafeMath {
    /**
     * @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;
}

interface IAirdrop {
    function airdrop(address recipient, uint256 amount) external;
}

contract lunch 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 =  10_000_000* 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    address public marketingWallet;

    string private _name = "Lunch";
    string private _symbol = "LUNCH";
    uint8 private _decimals = 9;
    

    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 8;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 200000 * 10**9;
    uint256 public numTokensSellToAddToLiquidity = 10000 * 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 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 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 setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() {
        require(SwapThresholdAmount > 1, "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 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 updateliquidityfees(uint256 _liquidityFeeup) external onlyOwner {
        _liquidityFee = _liquidityFeeup;
        require(_liquidityFee <= 14, "Must keep fees at 14% or less");
    }

    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(50).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":"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":"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":[{"internalType":"uint256","name":"_liquidityFeeup","type":"uint256"}],"name":"updateliquidityfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a805461ffff19169055662386f26fc10000600b8190556200002a9060001962000442565b620000389060001962000465565b600c5560408051808201909152600580825264098eadcc6d60db1b60209092019182526200006991600f916200039c565b5060408051808201909152600580825264098aa9c86960db1b602090920191825262000098916010916200039c565b506011805460ff1916600917905560026012819055601355600860148190556015556016805461ff00191661010017905565b5e620f480006017556509184e72a000601855348015620000ea57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200018e57600080fd5b505afa158015620001a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c991906200048b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021257600080fd5b505afa15801562000227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024d91906200048b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200029657600080fd5b505af1158015620002ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d191906200048b565b6001600160a01b0390811660a0528116608052600160066000620002fd6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620003453390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200038d91815260200190565b60405180910390a350620004fa565b828054620003aa90620004bd565b90600052602060002090601f016020900481019282620003ce576000855562000419565b82601f10620003e957805160ff191683800117855562000419565b8280016001018555821562000419579182015b8281111562000419578251825591602001919060010190620003fc565b50620004279291506200042b565b5090565b5b808211156200042757600081556001016200042c565b6000826200046057634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200048657634e487b7160e01b600052601160045260246000fd5b500390565b6000602082840312156200049e57600080fd5b81516001600160a01b0381168114620004b657600080fd5b9392505050565b600181811c90821680620004d257607f821691505b60208210811415620004f457634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612e386200054a600039600081816105530152611adf01526000818161034601528181612307015281816123cf0152818161240b015281816124fc01526125230152612e386000f3fe60806040526004361061028c5760003560e01c80635342acb41161015a578063a457c2d7116100c1578063d12a76881161007a578063d12a7688146107e9578063dd467064146107ff578063dd62ed3e1461081f578063ddc1720114610865578063ea2f0b3714610885578063f2fde38b146108a557600080fd5b8063a457c2d71461074a578063a63342311461076a578063a69df4b51461077f578063a9059cbb14610794578063b6c52324146107b4578063c49b9a80146107c957600080fd5b806375f0a8741161011357806375f0a87414610691578063764d72bf146106b15780637d1db4a5146106d157806388f82020146106e75780638da5cb5b1461072057806395d89b411461073557600080fd5b80635342acb4146105b45780635d098b38146105ed57806360d484891461060d5780636bc87c3a1461064657806370a082311461065c578063715018a61461067c57600080fd5b8063313ce567116101fe578063437823ec116101b7578063437823ec146104ec5780634549b0391461050c57806348c54b9d1461052c57806349bd5a5e146105415780634a74bb021461057557806352390c021461059457600080fd5b8063313ce567146104345780633685d4191461045657806339509351146104765780633ae7dc20146104965780633b124fe7146104b65780633bd5d173146104cc57600080fd5b806318160ddd1161025057806318160ddd1461038057806323b872dd1461039557806329e04b4a146103b55780632a360631146103d55780632d838119146103f55780632f05205c1461041557600080fd5b80630305caff1461029857806306fdde03146102ba578063095ea7b3146102e557806313114a9d146103155780631694505e1461033457600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b33660046129ae565b6108c5565b005b3480156102c657600080fd5b506102cf610919565b6040516102dc91906129cb565b60405180910390f35b3480156102f157600080fd5b50610305610300366004612a20565b6109ab565b60405190151581526020016102dc565b34801561032157600080fd5b50600d545b6040519081526020016102dc565b34801561034057600080fd5b506103687f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102dc565b34801561038c57600080fd5b50600b54610326565b3480156103a157600080fd5b506103056103b0366004612a4c565b6109c2565b3480156103c157600080fd5b506102b86103d0366004612a8d565b610a2b565b3480156103e157600080fd5b506102b86103f03660046129ae565b610ad6565b34801561040157600080fd5b50610326610410366004612a8d565b610b24565b34801561042157600080fd5b50600a5461030590610100900460ff1681565b34801561044057600080fd5b5060115460405160ff90911681526020016102dc565b34801561046257600080fd5b506102b86104713660046129ae565b610ba8565b34801561048257600080fd5b50610305610491366004612a20565b610d2f565b3480156104a257600080fd5b506102b86104b1366004612aa6565b610d65565b3480156104c257600080fd5b5061032660125481565b3480156104d857600080fd5b506102b86104e7366004612a8d565b610e93565b3480156104f857600080fd5b506102b86105073660046129ae565b610f7d565b34801561051857600080fd5b50610326610527366004612aed565b610fcb565b34801561053857600080fd5b506102b8611058565b34801561054d57600080fd5b506103687f000000000000000000000000000000000000000000000000000000000000000081565b34801561058157600080fd5b5060165461030590610100900460ff1681565b3480156105a057600080fd5b506102b86105af3660046129ae565b6110be565b3480156105c057600080fd5b506103056105cf3660046129ae565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105f957600080fd5b506102b86106083660046129ae565b6111e1565b34801561061957600080fd5b506103056106283660046129ae565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561065257600080fd5b5061032660145481565b34801561066857600080fd5b506103266106773660046129ae565b61122d565b34801561068857600080fd5b506102b861128c565b34801561069d57600080fd5b50600e54610368906001600160a01b031681565b3480156106bd57600080fd5b506102b86106cc3660046129ae565b6112ee565b3480156106dd57600080fd5b5061032660175481565b3480156106f357600080fd5b506103056107023660046129ae565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561072c57600080fd5b5061036861134d565b34801561074157600080fd5b506102cf61135c565b34801561075657600080fd5b50610305610765366004612a20565b61136b565b34801561077657600080fd5b506102b86113ba565b34801561078b57600080fd5b506102b86113f5565b3480156107a057600080fd5b506103056107af366004612a20565b6114fb565b3480156107c057600080fd5b50600254610326565b3480156107d557600080fd5b506102b86107e4366004612b12565b611508565b3480156107f557600080fd5b5061032660185481565b34801561080b57600080fd5b506102b861081a366004612a8d565b611586565b34801561082b57600080fd5b5061032661083a366004612aa6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561087157600080fd5b506102b8610880366004612a8d565b61160b565b34801561089157600080fd5b506102b86108a03660046129ae565b61168b565b3480156108b157600080fd5b506102b86108c03660046129ae565b6116d6565b6000546001600160a01b031633146108f85760405162461bcd60e51b81526004016108ef90612b2f565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060600f805461092890612b64565b80601f016020809104026020016040519081016040528092919081815260200182805461095490612b64565b80156109a15780601f10610976576101008083540402835291602001916109a1565b820191906000526020600020905b81548152906001019060200180831161098457829003601f168201915b5050505050905090565b60006109b83384846117ae565b5060015b92915050565b60006109cf8484846118d2565b610a218433610a1c85604051806060016040528060288152602001612d96602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611b99565b6117ae565b5060019392505050565b6000546001600160a01b03163314610a555760405162461bcd60e51b81526004016108ef90612b2f565b60018111610ac25760405162461bcd60e51b815260206004820152603460248201527f53776170205468726573686f6c6420416d6f756e742063616e6e6f74206265206044820152733632b9b9903a3430b7101b1c9026b4b63634b7b760611b60648201526084016108ef565b610ad081633b9aca00612bb5565b60185550565b6000546001600160a01b03163314610b005760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610b8b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108ef565b6000610b95611bd3565b9050610ba18382611bf6565b9392505050565b6000546001600160a01b03163314610bd25760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b03811660009081526007602052604090205460ff16610c0a5760405162461bcd60e51b81526004016108ef90612bd4565b60005b600854811015610d2b57816001600160a01b031660088281548110610c3457610c34612c0b565b6000918252602090912001546001600160a01b03161415610d195760088054610c5f90600190612c21565b81548110610c6f57610c6f612c0b565b600091825260209091200154600880546001600160a01b039092169183908110610c9b57610c9b612c0b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610cf357610cf3612c38565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610d2381612c4e565b915050610c0d565b5050565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916109b8918590610a1c9086611c38565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b81526004016108ef90612b2f565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a082319060240160206040518083038186803b158015610dd857600080fd5b505afa158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e109190612c69565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610e5657600080fd5b505af1158015610e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8e9190612c82565b505050565b3360008181526007602052604090205460ff1615610f085760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108ef565b6000610f1383611c97565b505050506001600160a01b038416600090815260036020526040902054919250610f3f91905082611ce6565b6001600160a01b038316600090815260036020526040902055600c54610f659082611ce6565b600c55600d54610f759084611c38565b600d55505050565b6000546001600160a01b03163314610fa75760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b5483111561101f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108ef565b8161103e57600061102f84611c97565b509395506109bc945050505050565b600061104984611c97565b509295506109bc945050505050565b6000546001600160a01b031633146110825760405162461bcd60e51b81526004016108ef90612b2f565b600e546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156110bb573d6000803e3d6000fd5b50565b6000546001600160a01b031633146110e85760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b03811660009081526007602052604090205460ff16156111215760405162461bcd60e51b81526004016108ef90612bd4565b6001600160a01b0381166000908152600360205260409020541561117b576001600160a01b03811660009081526003602052604090205461116190610b24565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461120b5760405162461bcd60e51b81526004016108ef90612b2f565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561126a57506001600160a01b031660009081526004602052604090205490565b6001600160a01b0382166000908152600360205260409020546109bc90610b24565b6000546001600160a01b031633146112b65760405162461bcd60e51b81526004016108ef90612b2f565b600080546040516001600160a01b0390911690600080516020612dbe833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113185760405162461bcd60e51b81526004016108ef90612b2f565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610d2b573d6000803e3d6000fd5b6000546001600160a01b031690565b60606010805461092890612b64565b60006109b83384610a1c85604051806060016040528060258152602001612dde602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611b99565b6000546001600160a01b031633146113e45760405162461bcd60e51b81526004016108ef90612b2f565b600a805461ff001916610100179055565b6001546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108ef565b60025442116114ac5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108ef565b600154600080546040516001600160a01b039384169390911691600080516020612dbe83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60006109b83384846118d2565b6000546001600160a01b031633146115325760405162461bcd60e51b81526004016108ef90612b2f565b601680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061157b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115b05760405162461bcd60e51b81526004016108ef90612b2f565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556115df8142612c9f565b600255600080546040516001600160a01b0390911690600080516020612dbe833981519152908390a350565b6000546001600160a01b031633146116355760405162461bcd60e51b81526004016108ef90612b2f565b6014819055600e8111156110bb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313425206f72206c65737300000060448201526064016108ef565b6000546001600160a01b031633146116b55760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146117005760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b0381166117655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ef565b600080546040516001600160a01b0380851693921691600080516020612dbe83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ef565b6001600160a01b0382166118715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ef565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119365760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ef565b6001600160a01b0382166119985760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108ef565b600081116119fa5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108ef565b611a0261134d565b6001600160a01b0316836001600160a01b031614158015611a3c5750611a2661134d565b6001600160a01b0316826001600160a01b031614155b15611aa457601754811115611aa45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108ef565b6000611aaf3061122d565b90506017548110611abf57506017545b60185481108015908190611ad6575060165460ff16155b8015611b1457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611b275750601654610100900460ff165b15611b3a576018549150611b3a82611d28565b6001600160a01b03851660009081526006602052604090205460019060ff1680611b7c57506001600160a01b03851660009081526006602052604090205460ff165b15611b85575060005b611b9186868684611e27565b505050505050565b60008184841115611bbd5760405162461bcd60e51b81526004016108ef91906129cb565b506000611bca8486612c21565b95945050505050565b6000806000611be061206e565b9092509050611bef8282611bf6565b9250505090565b6000610ba183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121f0565b600080611c458385612c9f565b905083811015610ba15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108ef565b6000806000806000806000806000611cae8a61221e565b9250925092506000806000611ccc8d8686611cc7611bd3565b612260565b919f909e50909c50959a5093985091965092945050505050565b6000610ba183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b99565b6016805460ff191660011790556000611d42826002611bf6565b90506000611d508383611ce6565b905047611d5c836122b0565b6000611d684783611ce6565b90506000611d826064611d7c846032612477565b90611bf6565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611dbd573d6000803e3d6000fd5b50611dc88183612c21565b9150611dd484836124f6565b60408051868152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506016805460ff1916905550505050565b600a54610100900460ff16611e5b57611e3e61134d565b6001600160a01b0316846001600160a01b031614611e5b57600080fd5b6001600160a01b03841660009081526009602052604090205460ff1680611e9a57506001600160a01b03831660009081526009602052604090205460ff165b15611ef157600a5460ff16611ef15760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f207472616465000000000060448201526064016108ef565b80611efe57611efe612601565b6001600160a01b03841660009081526007602052604090205460ff168015611f3f57506001600160a01b03831660009081526007602052604090205460ff16155b15611f5457611f4f84848461262f565b612052565b6001600160a01b03841660009081526007602052604090205460ff16158015611f9557506001600160a01b03831660009081526007602052604090205460ff165b15611fa557611f4f848484612755565b6001600160a01b03841660009081526007602052604090205460ff16158015611fe757506001600160a01b03831660009081526007602052604090205460ff16155b15611ff757611f4f8484846127fe565b6001600160a01b03841660009081526007602052604090205460ff16801561203757506001600160a01b03831660009081526007602052604090205460ff165b1561204757611f4f848484612842565b6120528484846127fe565b8061206857612068601354601255601554601455565b50505050565b600c54600b546000918291825b6008548110156121c05782600360006008848154811061209d5761209d612c0b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061210857508160046000600884815481106120e1576120e1612c0b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561211e57600c54600b54945094505050509091565b612164600360006008848154811061213857612138612c0b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611ce6565b92506121ac600460006008848154811061218057612180612c0b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611ce6565b9150806121b881612c4e565b91505061207b565b50600b54600c546121d091611bf6565b8210156121e757600c54600b549350935050509091565b90939092509050565b600081836122115760405162461bcd60e51b81526004016108ef91906129cb565b506000611bca8486612cb7565b60008060008061222d856128b5565b9050600061223a866128d1565b905060006122528261224c8986611ce6565b90611ce6565b979296509094509092505050565b600080808061226f8886612477565b9050600061227d8887612477565b9050600061228b8888612477565b9050600061229d8261224c8686611ce6565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122e5576122e5612c0b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561235e57600080fd5b505afa158015612372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123969190612cd9565b816001815181106123a9576123a9612c0b565b60200260200101906001600160a01b031690816001600160a01b0316815250506123f4307f0000000000000000000000000000000000000000000000000000000000000000846117ae565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612449908590600090869030904290600401612cf6565b600060405180830381600087803b15801561246357600080fd5b505af1158015611b91573d6000803e3d6000fd5b600082612486575060006109bc565b60006124928385612bb5565b90508261249f8583612cb7565b14610ba15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108ef565b612521307f0000000000000000000000000000000000000000000000000000000000000000846117ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d71982308560008061255e61134d565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156125c157600080fd5b505af11580156125d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125fa9190612d67565b5050505050565b6012541580156126115750601454155b1561261857565b601280546013556014805460155560009182905555565b60008060008060008061264187611c97565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506126739088611ce6565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546126a29087611ce6565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546126d19086611c38565b6001600160a01b0389166000908152600360205260409020556126f3816128ed565b6126fd8483612975565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161274291815260200190565b60405180910390a3505050505050505050565b60008060008060008061276787611c97565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506127999087611ce6565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546127cf9084611c38565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546126d19086611c38565b60008060008060008061281087611c97565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506126a29087611ce6565b60008060008060008061285487611c97565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128869088611ce6565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546127999087611ce6565b60006109bc6064611d7c6012548561247790919063ffffffff16565b60006109bc6064611d7c6014548561247790919063ffffffff16565b60006128f7611bd3565b905060006129058383612477565b306000908152600360205260409020549091506129229082611c38565b3060009081526003602090815260408083209390935560079052205460ff1615610e8e57306000908152600460205260409020546129609084611c38565b30600090815260046020526040902055505050565b600c546129829083611ce6565b600c55600d546129929082611c38565b600d555050565b6001600160a01b03811681146110bb57600080fd5b6000602082840312156129c057600080fd5b8135610ba181612999565b600060208083528351808285015260005b818110156129f8578581018301518582016040015282016129dc565b81811115612a0a576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612a3357600080fd5b8235612a3e81612999565b946020939093013593505050565b600080600060608486031215612a6157600080fd5b8335612a6c81612999565b92506020840135612a7c81612999565b929592945050506040919091013590565b600060208284031215612a9f57600080fd5b5035919050565b60008060408385031215612ab957600080fd5b8235612ac481612999565b91506020830135612ad481612999565b809150509250929050565b80151581146110bb57600080fd5b60008060408385031215612b0057600080fd5b823591506020830135612ad481612adf565b600060208284031215612b2457600080fd5b8135610ba181612adf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612b7857607f821691505b60208210811415612b9957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612bcf57612bcf612b9f565b500290565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600082821015612c3357612c33612b9f565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612c6257612c62612b9f565b5060010190565b600060208284031215612c7b57600080fd5b5051919050565b600060208284031215612c9457600080fd5b8151610ba181612adf565b60008219821115612cb257612cb2612b9f565b500190565b600082612cd457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612ceb57600080fd5b8151610ba181612999565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d465784516001600160a01b031683529383019391830191600101612d21565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d7c57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122080aec80fbc17c556e5c9d88e4d1661a5e0b772bb45838d965bf0f03f913f988864736f6c63430008090033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80635342acb41161015a578063a457c2d7116100c1578063d12a76881161007a578063d12a7688146107e9578063dd467064146107ff578063dd62ed3e1461081f578063ddc1720114610865578063ea2f0b3714610885578063f2fde38b146108a557600080fd5b8063a457c2d71461074a578063a63342311461076a578063a69df4b51461077f578063a9059cbb14610794578063b6c52324146107b4578063c49b9a80146107c957600080fd5b806375f0a8741161011357806375f0a87414610691578063764d72bf146106b15780637d1db4a5146106d157806388f82020146106e75780638da5cb5b1461072057806395d89b411461073557600080fd5b80635342acb4146105b45780635d098b38146105ed57806360d484891461060d5780636bc87c3a1461064657806370a082311461065c578063715018a61461067c57600080fd5b8063313ce567116101fe578063437823ec116101b7578063437823ec146104ec5780634549b0391461050c57806348c54b9d1461052c57806349bd5a5e146105415780634a74bb021461057557806352390c021461059457600080fd5b8063313ce567146104345780633685d4191461045657806339509351146104765780633ae7dc20146104965780633b124fe7146104b65780633bd5d173146104cc57600080fd5b806318160ddd1161025057806318160ddd1461038057806323b872dd1461039557806329e04b4a146103b55780632a360631146103d55780632d838119146103f55780632f05205c1461041557600080fd5b80630305caff1461029857806306fdde03146102ba578063095ea7b3146102e557806313114a9d146103155780631694505e1461033457600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b33660046129ae565b6108c5565b005b3480156102c657600080fd5b506102cf610919565b6040516102dc91906129cb565b60405180910390f35b3480156102f157600080fd5b50610305610300366004612a20565b6109ab565b60405190151581526020016102dc565b34801561032157600080fd5b50600d545b6040519081526020016102dc565b34801561034057600080fd5b506103687f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102dc565b34801561038c57600080fd5b50600b54610326565b3480156103a157600080fd5b506103056103b0366004612a4c565b6109c2565b3480156103c157600080fd5b506102b86103d0366004612a8d565b610a2b565b3480156103e157600080fd5b506102b86103f03660046129ae565b610ad6565b34801561040157600080fd5b50610326610410366004612a8d565b610b24565b34801561042157600080fd5b50600a5461030590610100900460ff1681565b34801561044057600080fd5b5060115460405160ff90911681526020016102dc565b34801561046257600080fd5b506102b86104713660046129ae565b610ba8565b34801561048257600080fd5b50610305610491366004612a20565b610d2f565b3480156104a257600080fd5b506102b86104b1366004612aa6565b610d65565b3480156104c257600080fd5b5061032660125481565b3480156104d857600080fd5b506102b86104e7366004612a8d565b610e93565b3480156104f857600080fd5b506102b86105073660046129ae565b610f7d565b34801561051857600080fd5b50610326610527366004612aed565b610fcb565b34801561053857600080fd5b506102b8611058565b34801561054d57600080fd5b506103687f0000000000000000000000003c618ecdb3d4d45d1acc036bf563138769a1295481565b34801561058157600080fd5b5060165461030590610100900460ff1681565b3480156105a057600080fd5b506102b86105af3660046129ae565b6110be565b3480156105c057600080fd5b506103056105cf3660046129ae565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105f957600080fd5b506102b86106083660046129ae565b6111e1565b34801561061957600080fd5b506103056106283660046129ae565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561065257600080fd5b5061032660145481565b34801561066857600080fd5b506103266106773660046129ae565b61122d565b34801561068857600080fd5b506102b861128c565b34801561069d57600080fd5b50600e54610368906001600160a01b031681565b3480156106bd57600080fd5b506102b86106cc3660046129ae565b6112ee565b3480156106dd57600080fd5b5061032660175481565b3480156106f357600080fd5b506103056107023660046129ae565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561072c57600080fd5b5061036861134d565b34801561074157600080fd5b506102cf61135c565b34801561075657600080fd5b50610305610765366004612a20565b61136b565b34801561077657600080fd5b506102b86113ba565b34801561078b57600080fd5b506102b86113f5565b3480156107a057600080fd5b506103056107af366004612a20565b6114fb565b3480156107c057600080fd5b50600254610326565b3480156107d557600080fd5b506102b86107e4366004612b12565b611508565b3480156107f557600080fd5b5061032660185481565b34801561080b57600080fd5b506102b861081a366004612a8d565b611586565b34801561082b57600080fd5b5061032661083a366004612aa6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561087157600080fd5b506102b8610880366004612a8d565b61160b565b34801561089157600080fd5b506102b86108a03660046129ae565b61168b565b3480156108b157600080fd5b506102b86108c03660046129ae565b6116d6565b6000546001600160a01b031633146108f85760405162461bcd60e51b81526004016108ef90612b2f565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060600f805461092890612b64565b80601f016020809104026020016040519081016040528092919081815260200182805461095490612b64565b80156109a15780601f10610976576101008083540402835291602001916109a1565b820191906000526020600020905b81548152906001019060200180831161098457829003601f168201915b5050505050905090565b60006109b83384846117ae565b5060015b92915050565b60006109cf8484846118d2565b610a218433610a1c85604051806060016040528060288152602001612d96602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611b99565b6117ae565b5060019392505050565b6000546001600160a01b03163314610a555760405162461bcd60e51b81526004016108ef90612b2f565b60018111610ac25760405162461bcd60e51b815260206004820152603460248201527f53776170205468726573686f6c6420416d6f756e742063616e6e6f74206265206044820152733632b9b9903a3430b7101b1c9026b4b63634b7b760611b60648201526084016108ef565b610ad081633b9aca00612bb5565b60185550565b6000546001600160a01b03163314610b005760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610b8b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108ef565b6000610b95611bd3565b9050610ba18382611bf6565b9392505050565b6000546001600160a01b03163314610bd25760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b03811660009081526007602052604090205460ff16610c0a5760405162461bcd60e51b81526004016108ef90612bd4565b60005b600854811015610d2b57816001600160a01b031660088281548110610c3457610c34612c0b565b6000918252602090912001546001600160a01b03161415610d195760088054610c5f90600190612c21565b81548110610c6f57610c6f612c0b565b600091825260209091200154600880546001600160a01b039092169183908110610c9b57610c9b612c0b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610cf357610cf3612c38565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610d2381612c4e565b915050610c0d565b5050565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916109b8918590610a1c9086611c38565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b81526004016108ef90612b2f565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a082319060240160206040518083038186803b158015610dd857600080fd5b505afa158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e109190612c69565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610e5657600080fd5b505af1158015610e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8e9190612c82565b505050565b3360008181526007602052604090205460ff1615610f085760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108ef565b6000610f1383611c97565b505050506001600160a01b038416600090815260036020526040902054919250610f3f91905082611ce6565b6001600160a01b038316600090815260036020526040902055600c54610f659082611ce6565b600c55600d54610f759084611c38565b600d55505050565b6000546001600160a01b03163314610fa75760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b5483111561101f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108ef565b8161103e57600061102f84611c97565b509395506109bc945050505050565b600061104984611c97565b509295506109bc945050505050565b6000546001600160a01b031633146110825760405162461bcd60e51b81526004016108ef90612b2f565b600e546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156110bb573d6000803e3d6000fd5b50565b6000546001600160a01b031633146110e85760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b03811660009081526007602052604090205460ff16156111215760405162461bcd60e51b81526004016108ef90612bd4565b6001600160a01b0381166000908152600360205260409020541561117b576001600160a01b03811660009081526003602052604090205461116190610b24565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461120b5760405162461bcd60e51b81526004016108ef90612b2f565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561126a57506001600160a01b031660009081526004602052604090205490565b6001600160a01b0382166000908152600360205260409020546109bc90610b24565b6000546001600160a01b031633146112b65760405162461bcd60e51b81526004016108ef90612b2f565b600080546040516001600160a01b0390911690600080516020612dbe833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113185760405162461bcd60e51b81526004016108ef90612b2f565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610d2b573d6000803e3d6000fd5b6000546001600160a01b031690565b60606010805461092890612b64565b60006109b83384610a1c85604051806060016040528060258152602001612dde602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611b99565b6000546001600160a01b031633146113e45760405162461bcd60e51b81526004016108ef90612b2f565b600a805461ff001916610100179055565b6001546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108ef565b60025442116114ac5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108ef565b600154600080546040516001600160a01b039384169390911691600080516020612dbe83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60006109b83384846118d2565b6000546001600160a01b031633146115325760405162461bcd60e51b81526004016108ef90612b2f565b601680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061157b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115b05760405162461bcd60e51b81526004016108ef90612b2f565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556115df8142612c9f565b600255600080546040516001600160a01b0390911690600080516020612dbe833981519152908390a350565b6000546001600160a01b031633146116355760405162461bcd60e51b81526004016108ef90612b2f565b6014819055600e8111156110bb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313425206f72206c65737300000060448201526064016108ef565b6000546001600160a01b031633146116b55760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146117005760405162461bcd60e51b81526004016108ef90612b2f565b6001600160a01b0381166117655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ef565b600080546040516001600160a01b0380851693921691600080516020612dbe83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ef565b6001600160a01b0382166118715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ef565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119365760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ef565b6001600160a01b0382166119985760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108ef565b600081116119fa5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108ef565b611a0261134d565b6001600160a01b0316836001600160a01b031614158015611a3c5750611a2661134d565b6001600160a01b0316826001600160a01b031614155b15611aa457601754811115611aa45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108ef565b6000611aaf3061122d565b90506017548110611abf57506017545b60185481108015908190611ad6575060165460ff16155b8015611b1457507f0000000000000000000000003c618ecdb3d4d45d1acc036bf563138769a129546001600160a01b0316856001600160a01b031614155b8015611b275750601654610100900460ff165b15611b3a576018549150611b3a82611d28565b6001600160a01b03851660009081526006602052604090205460019060ff1680611b7c57506001600160a01b03851660009081526006602052604090205460ff165b15611b85575060005b611b9186868684611e27565b505050505050565b60008184841115611bbd5760405162461bcd60e51b81526004016108ef91906129cb565b506000611bca8486612c21565b95945050505050565b6000806000611be061206e565b9092509050611bef8282611bf6565b9250505090565b6000610ba183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121f0565b600080611c458385612c9f565b905083811015610ba15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108ef565b6000806000806000806000806000611cae8a61221e565b9250925092506000806000611ccc8d8686611cc7611bd3565b612260565b919f909e50909c50959a5093985091965092945050505050565b6000610ba183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b99565b6016805460ff191660011790556000611d42826002611bf6565b90506000611d508383611ce6565b905047611d5c836122b0565b6000611d684783611ce6565b90506000611d826064611d7c846032612477565b90611bf6565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611dbd573d6000803e3d6000fd5b50611dc88183612c21565b9150611dd484836124f6565b60408051868152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506016805460ff1916905550505050565b600a54610100900460ff16611e5b57611e3e61134d565b6001600160a01b0316846001600160a01b031614611e5b57600080fd5b6001600160a01b03841660009081526009602052604090205460ff1680611e9a57506001600160a01b03831660009081526009602052604090205460ff165b15611ef157600a5460ff16611ef15760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f207472616465000000000060448201526064016108ef565b80611efe57611efe612601565b6001600160a01b03841660009081526007602052604090205460ff168015611f3f57506001600160a01b03831660009081526007602052604090205460ff16155b15611f5457611f4f84848461262f565b612052565b6001600160a01b03841660009081526007602052604090205460ff16158015611f9557506001600160a01b03831660009081526007602052604090205460ff165b15611fa557611f4f848484612755565b6001600160a01b03841660009081526007602052604090205460ff16158015611fe757506001600160a01b03831660009081526007602052604090205460ff16155b15611ff757611f4f8484846127fe565b6001600160a01b03841660009081526007602052604090205460ff16801561203757506001600160a01b03831660009081526007602052604090205460ff165b1561204757611f4f848484612842565b6120528484846127fe565b8061206857612068601354601255601554601455565b50505050565b600c54600b546000918291825b6008548110156121c05782600360006008848154811061209d5761209d612c0b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061210857508160046000600884815481106120e1576120e1612c0b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561211e57600c54600b54945094505050509091565b612164600360006008848154811061213857612138612c0b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611ce6565b92506121ac600460006008848154811061218057612180612c0b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611ce6565b9150806121b881612c4e565b91505061207b565b50600b54600c546121d091611bf6565b8210156121e757600c54600b549350935050509091565b90939092509050565b600081836122115760405162461bcd60e51b81526004016108ef91906129cb565b506000611bca8486612cb7565b60008060008061222d856128b5565b9050600061223a866128d1565b905060006122528261224c8986611ce6565b90611ce6565b979296509094509092505050565b600080808061226f8886612477565b9050600061227d8887612477565b9050600061228b8888612477565b9050600061229d8261224c8686611ce6565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122e5576122e5612c0b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561235e57600080fd5b505afa158015612372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123969190612cd9565b816001815181106123a9576123a9612c0b565b60200260200101906001600160a01b031690816001600160a01b0316815250506123f4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117ae565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612449908590600090869030904290600401612cf6565b600060405180830381600087803b15801561246357600080fd5b505af1158015611b91573d6000803e3d6000fd5b600082612486575060006109bc565b60006124928385612bb5565b90508261249f8583612cb7565b14610ba15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108ef565b612521307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117ae565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d71982308560008061255e61134d565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156125c157600080fd5b505af11580156125d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125fa9190612d67565b5050505050565b6012541580156126115750601454155b1561261857565b601280546013556014805460155560009182905555565b60008060008060008061264187611c97565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506126739088611ce6565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546126a29087611ce6565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546126d19086611c38565b6001600160a01b0389166000908152600360205260409020556126f3816128ed565b6126fd8483612975565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161274291815260200190565b60405180910390a3505050505050505050565b60008060008060008061276787611c97565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506127999087611ce6565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546127cf9084611c38565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546126d19086611c38565b60008060008060008061281087611c97565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506126a29087611ce6565b60008060008060008061285487611c97565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128869088611ce6565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546127999087611ce6565b60006109bc6064611d7c6012548561247790919063ffffffff16565b60006109bc6064611d7c6014548561247790919063ffffffff16565b60006128f7611bd3565b905060006129058383612477565b306000908152600360205260409020549091506129229082611c38565b3060009081526003602090815260408083209390935560079052205460ff1615610e8e57306000908152600460205260409020546129609084611c38565b30600090815260046020526040902055505050565b600c546129829083611ce6565b600c55600d546129929082611c38565b600d555050565b6001600160a01b03811681146110bb57600080fd5b6000602082840312156129c057600080fd5b8135610ba181612999565b600060208083528351808285015260005b818110156129f8578581018301518582016040015282016129dc565b81811115612a0a576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612a3357600080fd5b8235612a3e81612999565b946020939093013593505050565b600080600060608486031215612a6157600080fd5b8335612a6c81612999565b92506020840135612a7c81612999565b929592945050506040919091013590565b600060208284031215612a9f57600080fd5b5035919050565b60008060408385031215612ab957600080fd5b8235612ac481612999565b91506020830135612ad481612999565b809150509250929050565b80151581146110bb57600080fd5b60008060408385031215612b0057600080fd5b823591506020830135612ad481612adf565b600060208284031215612b2457600080fd5b8135610ba181612adf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612b7857607f821691505b60208210811415612b9957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612bcf57612bcf612b9f565b500290565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600082821015612c3357612c33612b9f565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612c6257612c62612b9f565b5060010190565b600060208284031215612c7b57600080fd5b5051919050565b600060208284031215612c9457600080fd5b8151610ba181612adf565b60008219821115612cb257612cb2612b9f565b500190565b600082612cd457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612ceb57600080fd5b8151610ba181612999565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d465784516001600160a01b031683529383019391830191600101612d21565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d7c57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122080aec80fbc17c556e5c9d88e4d1661a5e0b772bb45838d965bf0f03f913f988864736f6c63430008090033

Deployed Bytecode Sourcemap

28037:20184:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36725:113;;;;;;;;;;-1:-1:-1;36725:113:0;;;;;:::i;:::-;;:::i;:::-;;30582:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31485:161;;;;;;;;;;-1:-1:-1;31485:161:0;;;;;:::i;:::-;;:::i;:::-;;;1489:14:1;;1482:22;1464:41;;1452:2;1437:18;31485:161:0;1324:187:1;32606:87:0;;;;;;;;;;-1:-1:-1;32675:10:0;;32606:87;;;1662:25:1;;;1650:2;1635:18;32606:87:0;1516:177:1;29150:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;29150:51:0;1698:230:1;30859:86:0;;;;;;;;;;-1:-1:-1;30930:7:0;;30859:86;;31654:313;;;;;;;;;;-1:-1:-1;31654:313:0;;;;;:::i;:::-;;:::i;35766:259::-;;;;;;;;;;-1:-1:-1;35766:259:0;;;;;:::i;:::-;;:::i;36604:109::-;;;;;;;;;;-1:-1:-1;36604:109:0;;;;;:::i;:::-;;:::i;33536:253::-;;;;;;;;;;-1:-1:-1;33536:253:0;;;;;:::i;:::-;;:::i;28576:28::-;;;;;;;;;;-1:-1:-1;28576:28:0;;;;;;;;;;;30768:83;;;;;;;;;;-1:-1:-1;30834:9:0;;30768:83;;30834:9;;;;2721:36:1;;2709:2;2694:18;30768:83:0;2579:184:1;34252:479:0;;;;;;;;;;-1:-1:-1;34252:479:0;;;;;:::i;:::-;;:::i;31975:218::-;;;;;;;;;;-1:-1:-1;31975:218:0;;;;;:::i;:::-;;:::i;36251:185::-;;;;;;;;;;-1:-1:-1;36251:185:0;;;;;:::i;:::-;;:::i;28962:26::-;;;;;;;;;;;;;;;;32707:377;;;;;;;;;;-1:-1:-1;32707:377:0;;;;;:::i;:::-;;:::i;35395:111::-;;;;;;;;;;-1:-1:-1;35395:111:0;;;;;:::i;:::-;;:::i;33092:436::-;;;;;;;;;;-1:-1:-1;33092:436:0;;;;;:::i;:::-;;:::i;36037:202::-;;;;;;;;;;;;;:::i;29208:38::-;;;;;;;;;;;;;;;29287:40;;;;;;;;;;-1:-1:-1;29287:40:0;;;;;;;;;;;33797:447;;;;;;;;;;-1:-1:-1;33797:447:0;;;;;:::i;:::-;;:::i;40543:123::-;;;;;;;;;;-1:-1:-1;40543:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;40631:27:0;40607:4;40631:27;;;:18;:27;;;;;;;;;40543:123;35636:118;;;;;;;;;;-1:-1:-1;35636:118:0;;;;;:::i;:::-;;:::i;36850:121::-;;;;;;;;;;-1:-1:-1;36850:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;36942:21:0;36918:4;36942:21;;;:10;:21;;;;;;;;;36850:121;29049:32;;;;;;;;;;;;;;;;30953:198;;;;;;;;;;-1:-1:-1;30953:198:0;;;;;:::i;:::-;;:::i;18632:148::-;;;;;;;;;;;;;:::i;28805:30::-;;;;;;;;;;-1:-1:-1;28805:30:0;;;;-1:-1:-1;;;;;28805:30:0;;;36448:144;;;;;;;;;;-1:-1:-1;36448:144:0;;;;;:::i;:::-;;:::i;29340:44::-;;;;;;;;;;;;;;;;32478:120;;;;;;;;;;-1:-1:-1;32478:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;32570:20:0;32546:4;32570:20;;;:11;:20;;;;;;;;;32478:120;17989:79;;;;;;;;;;;;;:::i;30673:87::-;;;;;;;;;;;;;:::i;32201:269::-;;;;;;;;;;-1:-1:-1;32201:269:0;;;;;:::i;:::-;;:::i;36983:78::-;;;;;;;;;;;;;:::i;19654:305::-;;;;;;;;;;;;;:::i;31159:167::-;;;;;;;;;;-1:-1:-1;31159:167:0;;;;;:::i;:::-;;:::i;19187:89::-;;;;;;;;;;-1:-1:-1;19259:9:0;;19187:89;;37069:171;;;;;;;;;;-1:-1:-1;37069:171:0;;;;;:::i;:::-;;:::i;29391:60::-;;;;;;;;;;;;;;;;19352:226;;;;;;;;;;-1:-1:-1;19352:226:0;;;;;:::i;:::-;;:::i;31334:143::-;;;;;;;;;;-1:-1:-1;31334:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;31442:18:0;;;31415:7;31442:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31334:143;42840:195;;;;;;;;;;-1:-1:-1;42840:195:0;;;;;:::i;:::-;;:::i;35518:110::-;;;;;;;;;;-1:-1:-1;35518:110:0;;;;;:::i;:::-;;:::i;18935:244::-;;;;;;;;;;-1:-1:-1;18935:244:0;;;;;:::i;:::-;;:::i;36725:113::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;36801:21:0::1;36825:5;36801:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;36801:29:0::1;::::0;;36725:113::o;30582:83::-;30619:13;30652:5;30645:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30582:83;:::o;31485:161::-;31560:4;31577:39;10494:10;31600:7;31609:6;31577:8;:39::i;:::-;-1:-1:-1;31634:4:0;31485:161;;;;;:::o;31654:313::-;31752:4;31769:36;31779:6;31787:9;31798:6;31769:9;:36::i;:::-;31816:121;31825:6;10494:10;31847:89;31885:6;31847:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31847:19:0;;;;;;:11;:19;;;;;;;;10494:10;31847:33;;;;;;;;;;:37;:89::i;:::-;31816:8;:121::i;:::-;-1:-1:-1;31955:4:0;31654:313;;;;;:::o;35766:259::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;35889:1:::1;35867:19;:23;35859:88;;;::::0;-1:-1:-1;;;35859:88:0;;5666:2:1;35859:88:0::1;::::0;::::1;5648:21:1::0;5705:2;5685:18;;;5678:30;5744:34;5724:18;;;5717:62;-1:-1:-1;;;5795:18:1;;;5788:50;5855:19;;35859:88:0::1;5464:416:1::0;35859:88:0::1;35990:27;:19:::0;36012:5:::1;35990:27;:::i;:::-;35958:29;:59:::0;-1:-1:-1;35766:259:0:o;36604:109::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36677:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;36677:28:0::1;36701:4;36677:28;::::0;;36604:109::o;33536:253::-;33602:7;33641;;33630;:18;;33622:73;;;;-1:-1:-1;;;33622:73:0;;6392:2:1;33622:73:0;;;6374:21:1;6431:2;6411:18;;;6404:30;6470:34;6450:18;;;6443:62;-1:-1:-1;;;6521:18:1;;;6514:40;6571:19;;33622:73:0;6190:406:1;33622:73:0;33706:19;33729:10;:8;:10::i;:::-;33706:33;-1:-1:-1;33757:24:0;:7;33706:33;33757:11;:24::i;:::-;33750:31;33536:253;-1:-1:-1;;;33536:253:0:o;34252:479::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34334:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34326:60;;;;-1:-1:-1::0;;;34326:60:0::1;;;;;;;:::i;:::-;34402:9;34397:327;34421:9;:16:::0;34417:20;::::1;34397:327;;;34479:7;-1:-1:-1::0;;;;;34463:23:0::1;:9;34473:1;34463:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34463:12:0::1;:23;34459:254;;;34522:9;34532:16:::0;;:20:::1;::::0;34551:1:::1;::::0;34532:20:::1;:::i;:::-;34522:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;34507:9:::1;:12:::0;;-1:-1:-1;;;;;34522:31:0;;::::1;::::0;34517:1;;34507:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;34507:46:0::1;-1:-1:-1::0;;;;;34507:46:0;;::::1;;::::0;;34572:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;34611:11:::1;:20:::0;;;;:28;;-1:-1:-1;;34611:28:0::1;::::0;;34658:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34658:15:0;;;;;-1:-1:-1;;;;;;34658:15:0::1;::::0;;;;;34397:327:::1;34252:479:::0;:::o;34459:254::-:1;34439:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34397:327;;;;34252:479:::0;:::o;31975:218::-;10494:10;32063:4;32112:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32112:34:0;;;;;;;;;;32063:4;;32080:83;;32103:7;;32112:50;;32151:10;32112:38;:50::i;36251:185::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;36390:37:::1;::::0;-1:-1:-1;;;36390:37:0;;36421:4:::1;36390:37;::::0;::::1;1871:51:1::0;-1:-1:-1;;;;;36353:21:0;::::1;::::0;::::1;::::0;36375:13;;36353:21;;36390:22:::1;::::0;1844:18:1;;36390:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36353:75;::::0;-1:-1:-1;;;;;;36353:75:0::1;::::0;;;;;;-1:-1:-1;;;;;7872:32:1;;;36353:75:0::1;::::0;::::1;7854:51:1::0;7921:18;;;7914:34;7827:18;;36353:75:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36251:185:::0;;:::o;32707:377::-;10494:10;32759:14;32808:19;;;:11;:19;;;;;;;;32807:20;32799:77;;;;-1:-1:-1;;;32799:77:0;;8411:2:1;32799:77:0;;;8393:21:1;8450:2;8430:18;;;8423:30;8489:34;8469:18;;;8462:62;-1:-1:-1;;;8540:18:1;;;8533:42;8592:19;;32799:77:0;8209:408:1;32799:77:0;32888:15;32912:19;32923:7;32912:10;:19::i;:::-;-1:-1:-1;;;;;;;;;32960:15:0;;;;;;:7;:15;;;;;;32887:44;;-1:-1:-1;32960:28:0;;:15;-1:-1:-1;32887:44:0;32960:19;:28::i;:::-;-1:-1:-1;;;;;32942:15:0;;;;;;:7;:15;;;;;:46;33009:7;;:20;;33021:7;33009:11;:20::i;:::-;32999:7;:30;33053:10;;:23;;33068:7;33053:14;:23::i;:::-;33040:10;:36;-1:-1:-1;;;32707:377:0:o;35395:111::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35464:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35464:34:0::1;35494:4;35464:34;::::0;;35395:111::o;33092:436::-;33182:7;33221;;33210;:18;;33202:62;;;;-1:-1:-1;;;33202:62:0;;8824:2:1;33202:62:0;;;8806:21:1;8863:2;8843:18;;;8836:30;8902:33;8882:18;;;8875:61;8953:18;;33202:62:0;8622:355:1;33202:62:0;33280:17;33275:246;;33315:15;33339:19;33350:7;33339:10;:19::i;:::-;-1:-1:-1;33314:44:0;;-1:-1:-1;33373:14:0;;-1:-1:-1;;;;;33373:14:0;33275:246;33422:23;33453:19;33464:7;33453:10;:19::i;:::-;-1:-1:-1;33420:52:0;;-1:-1:-1;33487:22:0;;-1:-1:-1;;;;;33487:22:0;36037:202;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;36183:15:::1;::::0;36175:56:::1;::::0;-1:-1:-1;;;;;36183:15:0;;::::1;::::0;36209:21:::1;36175:56:::0;::::1;;;::::0;36183:15:::1;36175:56:::0;36183:15;36175:56;36209:21;36183:15;36175:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;36037:202::o:0;33797:447::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33994:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33993:21;33985:61;;;;-1:-1:-1::0;;;33985:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34060:16:0;::::1;34079:1;34060:16:::0;;;:7:::1;:16;::::0;;;;;:20;34057:108:::1;;-1:-1:-1::0;;;;;34136:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;34116:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;34097:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;34057:108:::1;-1:-1:-1::0;;;;;34175:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;34175:27:0::1;34198:4;34175:27:::0;;::::1;::::0;;;34213:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34213:23:0::1;::::0;;::::1;::::0;;33797:447::o;35636:118::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;35715:15:::1;:31:::0;;-1:-1:-1;;;;;;35715:31:0::1;-1:-1:-1::0;;;;;35715:31:0;;;::::1;::::0;;;::::1;::::0;;35636:118::o;30953:198::-;-1:-1:-1;;;;;31043:20:0;;31019:7;31043:20;;;:11;:20;;;;;;;;31039:49;;;-1:-1:-1;;;;;;31072:16:0;;;;;:7;:16;;;;;;;30953:198::o;31039:49::-;-1:-1:-1;;;;;31126:16:0;;;;;;:7;:16;;;;;;31106:37;;:19;:37::i;18632:148::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;18739:1:::1;18723:6:::0;;18702:40:::1;::::0;-1:-1:-1;;;;;18723:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;18702:40:0;18739:1;;18702:40:::1;18770:1;18753:19:::0;;-1:-1:-1;;;;;;18753:19:0::1;::::0;;18632:148::o;36448:144::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;36539:45:::1;::::0;-1:-1:-1;;;;;36539:22:0;::::1;::::0;36562:21:::1;36539:45:::0;::::1;;;::::0;::::1;::::0;;;36562:21;36539:22;:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;17989:79:::0;18027:7;18054:6;-1:-1:-1;;;;;18054:6:0;;17989:79::o;30673:87::-;30712:13;30745:7;30738:14;;;;;:::i;32201:269::-;32294:4;32311:129;10494:10;32334:7;32343:96;32382:15;32343:96;;;;;;;;;;;;;;;;;10494:10;32343:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32343:34:0;;;;;;;;;;;;:38;:96::i;36983:78::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;37038:8:::1;:15:::0;;-1:-1:-1;;37038:15:0::1;;;::::0;;36983:78::o;19654:305::-;19706:14;;-1:-1:-1;;;;;19706:14:0;19724:10;19706:28;19698:76;;;;-1:-1:-1;;;19698:76:0;;9184:2:1;19698:76:0;;;9166:21:1;9223:2;9203:18;;;9196:30;9262:34;9242:18;;;9235:62;-1:-1:-1;;;9313:18:1;;;9306:33;9356:19;;19698:76:0;8982:399:1;19698:76:0;19811:9;;19793:15;:27;19785:72;;;;-1:-1:-1;;;19785:72:0;;9588:2:1;19785:72:0;;;9570:21:1;9627:2;9607:18;;;9600:30;9666:33;9646:18;;;9639:61;9717:18;;19785:72:0;9386:355:1;19785:72:0;19902:14;;;19894:6;;19873:44;;-1:-1:-1;;;;;19902:14:0;;;;19894:6;;;;-1:-1:-1;;;;;;;;;;;19873:44:0;;19937:14;;;19928:23;;-1:-1:-1;;;;;;19928:23:0;-1:-1:-1;;;;;19937:14:0;;;19928:23;;;;;;19654:305::o;31159:167::-;31237:4;31254:42;10494:10;31278:9;31289:6;31254:9;:42::i;37069:171::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;37146:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;37146:32:0;;::::1;;::::0;;37194:38:::1;::::0;::::1;::::0;::::1;::::0;37170:8;1489:14:1;1482:22;1464:41;;1452:2;1437:18;;1324:187;37194:38:0::1;;;;;;;;37069:171:::0;:::o;19352:226::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;19433:6:::1;::::0;;;19416:23;;-1:-1:-1;;;;;;19416:23:0;;::::1;-1:-1:-1::0;;;;;19433:6:0;::::1;19416:23;::::0;;;19450:19:::1;::::0;;19492:22:::1;19510:4:::0;19492:15:::1;:22;:::i;:::-;19480:9;:34:::0;19567:1:::1;19551:6:::0;;19530:40:::1;::::0;-1:-1:-1;;;;;19551:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;19530:40:0;19567:1;;19530:40:::1;19352:226:::0;:::o;42840:195::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;42924:13:::1;:31:::0;;;42991:2:::1;42974:19:::0;::::1;;42966:61;;;::::0;-1:-1:-1;;;42966:61:0;;10081:2:1;42966:61:0::1;::::0;::::1;10063:21:1::0;10120:2;10100:18;;;10093:30;10159:31;10139:18;;;10132:59;10208:18;;42966:61:0::1;9879:353:1::0;35518:110:0;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35585:27:0::1;35615:5;35585:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35585:35:0::1;::::0;;35518:110::o;18935:244::-;18201:6;;-1:-1:-1;;;;;18201:6:0;10494:10;18201:22;18193:67;;;;-1:-1:-1;;;18193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19024:22:0;::::1;19016:73;;;::::0;-1:-1:-1;;;19016:73:0;;10439:2:1;19016:73:0::1;::::0;::::1;10421:21:1::0;10478:2;10458:18;;;10451:30;10517:34;10497:18;;;10490:62;-1:-1:-1;;;10568:18:1;;;10561:36;10614:19;;19016:73:0::1;10237:402:1::0;19016:73:0::1;19126:6;::::0;;19105:38:::1;::::0;-1:-1:-1;;;;;19105:38:0;;::::1;::::0;19126:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;19105:38:0;::::1;19154:6;:17:::0;;-1:-1:-1;;;;;;19154:17:0::1;-1:-1:-1::0;;;;;19154:17:0;;;::::1;::::0;;;::::1;::::0;;18935:244::o;40674:337::-;-1:-1:-1;;;;;40767:19:0;;40759:68;;;;-1:-1:-1;;;40759:68:0;;10846:2:1;40759:68:0;;;10828:21:1;10885:2;10865:18;;;10858:30;10924:34;10904:18;;;10897:62;-1:-1:-1;;;10975:18:1;;;10968:34;11019:19;;40759:68:0;10644:400:1;40759:68:0;-1:-1:-1;;;;;40846:21:0;;40838:68;;;;-1:-1:-1;;;40838:68:0;;11251:2:1;40838:68:0;;;11233:21:1;11290:2;11270:18;;;11263:30;11329:34;11309:18;;;11302:62;-1:-1:-1;;;11380:18:1;;;11373:32;11422:19;;40838:68:0;11049:398:1;40838:68:0;-1:-1:-1;;;;;40919:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;40971:32;;1662:25:1;;;40971:32:0;;1635:18:1;40971:32:0;;;;;;;40674:337;;;:::o;41019:1813::-;-1:-1:-1;;;;;41141:18:0;;41133:68;;;;-1:-1:-1;;;41133:68:0;;11654:2:1;41133:68:0;;;11636:21:1;11693:2;11673:18;;;11666:30;11732:34;11712:18;;;11705:62;-1:-1:-1;;;11783:18:1;;;11776:35;11828:19;;41133:68:0;11452:401:1;41133:68:0;-1:-1:-1;;;;;41220:16:0;;41212:64;;;;-1:-1:-1;;;41212:64:0;;12060:2:1;41212:64:0;;;12042:21:1;12099:2;12079:18;;;12072:30;12138:34;12118:18;;;12111:62;-1:-1:-1;;;12189:18:1;;;12182:33;12232:19;;41212:64:0;11858:399:1;41212:64:0;41304:1;41295:6;:10;41287:64;;;;-1:-1:-1;;;41287:64:0;;12464:2:1;41287:64:0;;;12446:21:1;12503:2;12483:18;;;12476:30;12542:34;12522:18;;;12515:62;-1:-1:-1;;;12593:18:1;;;12586:39;12642:19;;41287:64:0;12262:405:1;41287:64:0;41373:7;:5;:7::i;:::-;-1:-1:-1;;;;;41365:15:0;:4;-1:-1:-1;;;;;41365:15:0;;;:32;;;;;41390:7;:5;:7::i;:::-;-1:-1:-1;;;;;41384:13:0;:2;-1:-1:-1;;;;;41384:13:0;;;41365:32;41362:125;;;41430:12;;41420:6;:22;;41412:75;;;;-1:-1:-1;;;41412:75:0;;12874:2:1;41412:75:0;;;12856:21:1;12913:2;12893:18;;;12886:30;12952:34;12932:18;;;12925:62;-1:-1:-1;;;13003:18:1;;;12996:38;13051:19;;41412:75:0;12672:404:1;41412:75:0;41782:28;41813:24;41831:4;41813:9;:24::i;:::-;41782:55;;41885:12;;41861:20;:36;41858:112;;-1:-1:-1;41946:12:0;;41858:112;42041:29;;42017:53;;;;;;;42099;;-1:-1:-1;42136:16:0;;;;42135:17;42099:53;:91;;;;;42177:13;-1:-1:-1;;;;;42169:21:0;:4;-1:-1:-1;;;;;42169:21:0;;;42099:91;:129;;;;-1:-1:-1;42207:21:0;;;;;;;42099:129;42081:318;;;42278:29;;42255:52;;42351:36;42366:20;42351:14;:36::i;:::-;-1:-1:-1;;;;;42607:24:0;;42480:12;42607:24;;;:18;:24;;;;;;42495:4;;42607:24;;;:50;;-1:-1:-1;;;;;;42635:22:0;;;;;;:18;:22;;;;;;;;42607:50;42604:96;;;-1:-1:-1;42683:5:0;42604:96;42786:38;42801:4;42806:2;42809:6;42816:7;42786:14;:38::i;:::-;41122:1710;;;41019:1813;;;:::o;6745:192::-;6831:7;6867:12;6859:6;;;;6851:29;;;;-1:-1:-1;;;6851:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6891:9:0;6903:5;6907:1;6903;:5;:::i;:::-;6891:17;6745:192;-1:-1:-1;;;;;6745:192:0:o;38703:163::-;38744:7;38765:15;38782;38801:19;:17;:19::i;:::-;38764:56;;-1:-1:-1;38764:56:0;-1:-1:-1;38838:20:0;38764:56;;38838:11;:20::i;:::-;38831:27;;;;38703:163;:::o;8143:132::-;8201:7;8228:39;8232:1;8235;8228:39;;;;;;;;;;;;;;;;;:3;:39::i;5842:181::-;5900:7;;5932:5;5936:1;5932;:5;:::i;:::-;5920:17;;5961:1;5956;:6;;5948:46;;;;-1:-1:-1;;;5948:46:0;;13283:2:1;5948:46:0;;;13265:21:1;13322:2;13302:18;;;13295:30;13361:29;13341:18;;;13334:57;13408:18;;5948:46:0;13081:351:1;37501:419:0;37560:7;37569;37578;37587;37596;37605;37626:23;37651:12;37665:18;37687:20;37699:7;37687:11;:20::i;:::-;37625:82;;;;;;37719:15;37736:23;37761:12;37777:50;37789:7;37798:4;37804:10;37816;:8;:10::i;:::-;37777:11;:50::i;:::-;37718:109;;;;-1:-1:-1;37718:109:0;;-1:-1:-1;37878:15:0;;-1:-1:-1;37895:4:0;;-1:-1:-1;37901:10:0;;-1:-1:-1;37501:419:0;;-1:-1:-1;;;;;37501:419:0:o;6306:136::-;6364:7;6391:43;6395:1;6398;6391:43;;;;;;;;;;;;;;;;;:3;:43::i;43043:1182::-;29758:16;:23;;-1:-1:-1;;29758:23:0;29777:4;29758:23;;;:16;43231:27:::1;:20:::0;43256:1:::1;43231:24;:27::i;:::-;43216:42:::0;-1:-1:-1;43269:17:0::1;43289:30;:20:::0;43216:42;43289:24:::1;:30::i;:::-;43269:50:::0;-1:-1:-1;43622:21:0::1;43688:22;43705:4:::0;43688:16:::1;:22::i;:::-;43841:18;43862:41;:21;43888:14:::0;43862:25:::1;:41::i;:::-;43841:62:::0;-1:-1:-1;43914:22:0::1;43939:27;43962:3;43939:18;43841:62:::0;43954:2:::1;43939:14;:18::i;:::-;:22:::0;::::1;:27::i;:::-;43985:15;::::0;43977:49:::1;::::0;43914:52;;-1:-1:-1;;;;;;43985:15:0::1;::::0;43977:49;::::1;;;::::0;43914:52;;43985:15:::1;43977:49:::0;43985:15;43977:49;43914:52;43985:15;43977:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;44037:28:0::1;44051:14:::0;44037:28;::::1;:::i;:::-;;;44113:35;44126:9;44137:10;44113:12;:35::i;:::-;44174:43;::::0;;13639:25:1;;;13695:2;13680:18;;13673:34;;;13723:18;;;13716:34;;;44174:43:0::1;::::0;13627:2:1;13612:18;44174:43:0::1;;;;;;;-1:-1:-1::0;;29804:16:0;:24;;-1:-1:-1;;29804:24:0;;;-1:-1:-1;;;;43043:1182:0:o;45424:1114::-;45535:8;;;;;;;45531:114;;45577:7;:5;:7::i;:::-;-1:-1:-1;;;;;45567:17:0;:6;-1:-1:-1;;;;;45567:17:0;;45559:26;;;;;;-1:-1:-1;;;;;45668:18:0;;;;;;:10;:18;;;;;;;;;:43;;-1:-1:-1;;;;;;45690:21:0;;;;;;:10;:21;;;;;;;;45668:43;45665:126;;;45735:12;;;;45727:52;;;;-1:-1:-1;;;45727:52:0;;13963:2:1;45727:52:0;;;13945:21:1;14002:2;13982:18;;;13975:30;14041:29;14021:18;;;14014:57;14088:18;;45727:52:0;13761:351:1;45727:52:0;45815:7;45811:40;;45837:14;:12;:14::i;:::-;-1:-1:-1;;;;;45876:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;45900:22:0;;;;;;:11;:22;;;;;;;;45899:23;45876:46;45872:597;;;45939:48;45961:6;45969:9;45980:6;45939:21;:48::i;:::-;45872:597;;;-1:-1:-1;;;;;46010:19:0;;;;;;:11;:19;;;;;;;;46009:20;:46;;;;-1:-1:-1;;;;;;46033:22:0;;;;;;:11;:22;;;;;;;;46009:46;46005:464;;;46072:46;46092:6;46100:9;46111:6;46072:19;:46::i;46005:464::-;-1:-1:-1;;;;;46141:19:0;;;;;;:11;:19;;;;;;;;46140:20;:47;;;;-1:-1:-1;;;;;;46165:22:0;;;;;;:11;:22;;;;;;;;46164:23;46140:47;46136:333;;;46204:44;46222:6;46230:9;46241:6;46204:17;:44::i;46136:333::-;-1:-1:-1;;;;;46270:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;46293:22:0;;;;;;:11;:22;;;;;;;;46270:45;46266:203;;;46332:48;46354:6;46362:9;46373:6;46332:21;:48::i;46266:203::-;46413:44;46431:6;46439:9;46450:6;46413:17;:44::i;:::-;46493:7;46489:41;;46515:15;40464;;40454:7;:25;40506:21;;40490:13;:37;40410:125;46515:15;45424:1114;;;;:::o;38874:561::-;38971:7;;39007;;38924;;;;;39031:289;39055:9;:16;39051:20;;39031:289;;;39121:7;39097;:21;39105:9;39115:1;39105:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39105:12:0;39097:21;;;;;;;;;;;;;:31;;:66;;;39156:7;39132;:21;39140:9;39150:1;39140:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39140:12:0;39132:21;;;;;;;;;;;;;:31;39097:66;39093:97;;;39173:7;;39182;;39165:25;;;;;;;38874:561;;:::o;39093:97::-;39215:34;39227:7;:21;39235:9;39245:1;39235:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39235:12:0;39227:21;;;;;;;;;;;;;39215:7;;:11;:34::i;:::-;39205:44;;39274:34;39286:7;:21;39294:9;39304:1;39294:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39294:12:0;39286:21;;;;;;;;;;;;;39274:7;;:11;:34::i;:::-;39264:44;-1:-1:-1;39073:3:0;;;;:::i;:::-;;;;39031:289;;;-1:-1:-1;39356:7:0;;39344;;:20;;:11;:20::i;:::-;39334:7;:30;39330:61;;;39374:7;;39383;;39366:25;;;;;;38874:561;;:::o;39330:61::-;39410:7;;39419;;-1:-1:-1;38874:561:0;-1:-1:-1;38874:561:0:o;8771:278::-;8857:7;8892:12;8885:5;8877:28;;;;-1:-1:-1;;;8877:28:0;;;;;;;;:::i;:::-;-1:-1:-1;8916:9:0;8928:5;8932:1;8928;:5;:::i;37928:330::-;37988:7;37997;38006;38026:12;38041:24;38057:7;38041:15;:24::i;:::-;38026:39;;38076:18;38097:30;38119:7;38097:21;:30::i;:::-;38076:51;-1:-1:-1;38138:23:0;38164:33;38076:51;38164:17;:7;38176:4;38164:11;:17::i;:::-;:21;;:33::i;:::-;38138:59;38233:4;;-1:-1:-1;38239:10:0;;-1:-1:-1;37928:330:0;;-1:-1:-1;;;37928:330:0:o;38266:429::-;38381:7;;;;38437:24;:7;38449:11;38437;:24::i;:::-;38419:42;-1:-1:-1;38472:12:0;38487:21;:4;38496:11;38487:8;:21::i;:::-;38472:36;-1:-1:-1;38519:18:0;38540:27;:10;38555:11;38540:14;:27::i;:::-;38519:48;-1:-1:-1;38578:23:0;38604:33;38519:48;38604:17;:7;38616:4;38604:11;:17::i;:33::-;38656:7;;;;-1:-1:-1;38682:4:0;;-1:-1:-1;38266:429:0;;-1:-1:-1;;;;;;;38266:429:0:o;44233:589::-;44383:16;;;44397:1;44383:16;;;;;;;;44359:21;;44383:16;;;;;;;;;;-1:-1:-1;44383:16:0;44359:40;;44428:4;44410;44415:1;44410:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;44410:23:0;;;-1:-1:-1;;;;;44410:23:0;;;;;44454:15;-1:-1:-1;;;;;44454:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44444:4;44449:1;44444:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;44444:32:0;;;-1:-1:-1;;;;;44444:32:0;;;;;44489:62;44506:4;44521:15;44539:11;44489:8;:62::i;:::-;44590:224;;-1:-1:-1;;;44590:224:0;;-1:-1:-1;;;;;44590:15:0;:66;;;;:224;;44671:11;;44697:1;;44741:4;;44768;;44788:15;;44590:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7196:471;7254:7;7499:6;7495:47;;-1:-1:-1;7529:1:0;7522:8;;7495:47;7554:9;7566:5;7570:1;7566;:5;:::i;:::-;7554:17;-1:-1:-1;7599:1:0;7590:5;7594:1;7554:17;7590:5;:::i;:::-;:10;7582:56;;;;-1:-1:-1;;;7582:56:0;;15914:2:1;7582:56:0;;;15896:21:1;15953:2;15933:18;;;15926:30;15992:34;15972:18;;;15965:62;-1:-1:-1;;;16043:18:1;;;16036:31;16084:19;;7582:56:0;15712:397:1;44830:513:0;44978:62;44995:4;45010:15;45028:11;44978:8;:62::i;:::-;45083:15;-1:-1:-1;;;;;45083:31:0;;45122:9;45155:4;45175:11;45201:1;45244;45287:7;:5;:7::i;:::-;45083:252;;;;;;-1:-1:-1;;;;;;45083:252:0;;;-1:-1:-1;;;;;16473:15:1;;;45083:252:0;;;16455:34:1;16505:18;;;16498:34;;;;16548:18;;;16541:34;;;;16591:18;;;16584:34;16655:15;;;16634:19;;;16627:44;45309:15:0;16687:19:1;;;16680:35;16389:19;;45083:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44830:513;;:::o;40148:250::-;40194:7;;:12;:34;;;;-1:-1:-1;40210:13:0;;:18;40194:34;40191:46;;;40148:250::o;40191:46::-;40275:7;;;40257:15;:25;40317:13;;;40293:21;:37;-1:-1:-1;40351:11:0;;;;40373:17;40148:250::o;47650:566::-;47753:15;47770:23;47795:12;47809:23;47834:12;47848:18;47870:19;47881:7;47870:10;:19::i;:::-;-1:-1:-1;;;;;47918:15:0;;;;;;:7;:15;;;;;;47752:137;;-1:-1:-1;47752:137:0;;-1:-1:-1;47752:137:0;;-1:-1:-1;47752:137:0;-1:-1:-1;47752:137:0;-1:-1:-1;47752:137:0;-1:-1:-1;47918:28:0;;47938:7;47918:19;:28::i;:::-;-1:-1:-1;;;;;47900:15:0;;;;;;:7;:15;;;;;;;;:46;;;;47975:7;:15;;;;:28;;47995:7;47975:19;:28::i;:::-;-1:-1:-1;;;;;47957:15:0;;;;;;;:7;:15;;;;;;:46;;;;48035:18;;;;;;;:39;;48058:15;48035:22;:39::i;:::-;-1:-1:-1;;;;;48014:18:0;;;;;;:7;:18;;;;;:60;48088:26;48103:10;48088:14;:26::i;:::-;48125:23;48137:4;48143;48125:11;:23::i;:::-;48181:9;-1:-1:-1;;;;;48164:44:0;48173:6;-1:-1:-1;;;;;48164:44:0;;48192:15;48164:44;;;;1662:25:1;;1650:2;1635:18;;1516:177;48164:44:0;;;;;;;;47741:475;;;;;;47650:566;;;:::o;47056:586::-;47157:15;47174:23;47199:12;47213:23;47238:12;47252:18;47274:19;47285:7;47274:10;:19::i;:::-;-1:-1:-1;;;;;47322:15:0;;;;;;:7;:15;;;;;;47156:137;;-1:-1:-1;47156:137:0;;-1:-1:-1;47156:137:0;;-1:-1:-1;47156:137:0;-1:-1:-1;47156:137:0;-1:-1:-1;47156:137:0;-1:-1:-1;47322:28:0;;47156:137;47322:19;:28::i;:::-;-1:-1:-1;;;;;47304:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;47382:18;;;;;:7;:18;;;;;:39;;47405:15;47382:22;:39::i;:::-;-1:-1:-1;;;;;47361:18:0;;;;;;:7;:18;;;;;;;;:60;;;;47453:7;:18;;;;:39;;47476:15;47453:22;:39::i;46546:502::-;46645:15;46662:23;46687:12;46701:23;46726:12;46740:18;46762:19;46773:7;46762:10;:19::i;:::-;-1:-1:-1;;;;;46810:15:0;;;;;;:7;:15;;;;;;46644:137;;-1:-1:-1;46644:137:0;;-1:-1:-1;46644:137:0;;-1:-1:-1;46644:137:0;-1:-1:-1;46644:137:0;-1:-1:-1;46644:137:0;-1:-1:-1;46810:28:0;;46644:137;46810:19;:28::i;34741:642::-;34844:15;34861:23;34886:12;34900:23;34925:12;34939:18;34961:19;34972:7;34961:10;:19::i;:::-;-1:-1:-1;;;;;35009:15:0;;;;;;:7;:15;;;;;;34843:137;;-1:-1:-1;34843:137:0;;-1:-1:-1;34843:137:0;;-1:-1:-1;34843:137:0;-1:-1:-1;34843:137:0;-1:-1:-1;34843:137:0;-1:-1:-1;35009:28:0;;35029:7;35009:19;:28::i;:::-;-1:-1:-1;;;;;34991:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35066:7;:15;;;;:28;;35086:7;35066:19;:28::i;39814:154::-;39878:7;39905:55;39944:5;39905:20;39917:7;;39905;:11;;:20;;;;:::i;39976:166::-;40046:7;40073:61;40118:5;40073:26;40085:13;;40073:7;:11;;:26;;;;:::i;39447:355::-;39510:19;39533:10;:8;:10::i;:::-;39510:33;-1:-1:-1;39554:18:0;39575:27;:10;39510:33;39575:14;:27::i;:::-;39654:4;39638:22;;;;:7;:22;;;;;;39554:48;;-1:-1:-1;39638:38:0;;39554:48;39638:26;:38::i;:::-;39629:4;39613:22;;;;:7;:22;;;;;;;;:63;;;;39690:11;:26;;;;;;39687:107;;;39772:4;39756:22;;;;:7;:22;;;;;;:38;;39783:10;39756:26;:38::i;:::-;39747:4;39731:22;;;;:7;:22;;;;;:63;39499:303;;39447:355;:::o;37346:147::-;37424:7;;:17;;37436:4;37424:11;:17::i;:::-;37414:7;:27;37465:10;;:20;;37480:4;37465:14;:20::i;:::-;37452:10;:33;-1:-1:-1;;37346:147:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:597::-;514:4;543:2;572;561:9;554:21;604:6;598:13;647:6;642:2;631:9;627:18;620:34;672:1;682:140;696:6;693:1;690:13;682:140;;;791:14;;;787:23;;781:30;757:17;;;776:2;753:26;746:66;711:10;;682:140;;;840:6;837:1;834:13;831:91;;;910:1;905:2;896:6;885:9;881:22;877:31;870:42;831:91;-1:-1:-1;983:2:1;962:15;-1:-1:-1;;958:29:1;943:45;;;;990:2;939:54;;402:597;-1:-1:-1;;;402:597:1:o;1004:315::-;1072:6;1080;1133:2;1121:9;1112:7;1108:23;1104:32;1101:52;;;1149:1;1146;1139:12;1101:52;1188:9;1175:23;1207:31;1232:5;1207:31;:::i;:::-;1257:5;1309:2;1294:18;;;;1281:32;;-1:-1:-1;;;1004:315:1:o;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2394:180::-;2453:6;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;-1:-1:-1;2545:23:1;;2394:180;-1:-1:-1;2394:180:1:o;2768:401::-;2849:6;2857;2910:2;2898:9;2889:7;2885:23;2881:32;2878:52;;;2926:1;2923;2916:12;2878:52;2965:9;2952:23;2984:31;3009:5;2984:31;:::i;:::-;3034:5;-1:-1:-1;3091:2:1;3076:18;;3063:32;3104:33;3063:32;3104:33;:::i;:::-;3156:7;3146:17;;;2768:401;;;;;:::o;3174:118::-;3260:5;3253:13;3246:21;3239:5;3236:32;3226:60;;3282:1;3279;3272:12;3297:309;3362:6;3370;3423:2;3411:9;3402:7;3398:23;3394:32;3391:52;;;3439:1;3436;3429:12;3391:52;3475:9;3462:23;3452:33;;3535:2;3524:9;3520:18;3507:32;3548:28;3570:5;3548:28;:::i;4079:241::-;4135:6;4188:2;4176:9;4167:7;4163:23;4159:32;4156:52;;;4204:1;4201;4194:12;4156:52;4243:9;4230:23;4262:28;4284:5;4262:28;:::i;4718:356::-;4920:2;4902:21;;;4939:18;;;4932:30;4998:34;4993:2;4978:18;;4971:62;5065:2;5050:18;;4718:356::o;5079:380::-;5158:1;5154:12;;;;5201;;;5222:61;;5276:4;5268:6;5264:17;5254:27;;5222:61;5329:2;5321:6;5318:14;5298:18;5295:38;5292:161;;;5375:10;5370:3;5366:20;5363:1;5356:31;5410:4;5407:1;5400:15;5438:4;5435:1;5428:15;5292:161;;5079:380;;;:::o;5885:127::-;5946:10;5941:3;5937:20;5934:1;5927:31;5977:4;5974:1;5967:15;6001:4;5998:1;5991:15;6017:168;6057:7;6123:1;6119;6115:6;6111:14;6108:1;6105:21;6100:1;6093:9;6086:17;6082:45;6079:71;;;6130:18;;:::i;:::-;-1:-1:-1;6170:9:1;;6017:168::o;6601:351::-;6803:2;6785:21;;;6842:2;6822:18;;;6815:30;6881:29;6876:2;6861:18;;6854:57;6943:2;6928:18;;6601:351::o;6957:127::-;7018:10;7013:3;7009:20;7006:1;6999:31;7049:4;7046:1;7039:15;7073:4;7070:1;7063:15;7089:125;7129:4;7157:1;7154;7151:8;7148:34;;;7162:18;;:::i;:::-;-1:-1:-1;7199:9:1;;7089:125::o;7219:127::-;7280:10;7275:3;7271:20;7268:1;7261:31;7311:4;7308:1;7301:15;7335:4;7332:1;7325:15;7351:135;7390:3;-1:-1:-1;;7411:17:1;;7408:43;;;7431:18;;:::i;:::-;-1:-1:-1;7478:1:1;7467:13;;7351:135::o;7491:184::-;7561:6;7614:2;7602:9;7593:7;7589:23;7585:32;7582:52;;;7630:1;7627;7620:12;7582:52;-1:-1:-1;7653:16:1;;7491:184;-1:-1:-1;7491:184:1:o;7959:245::-;8026:6;8079:2;8067:9;8058:7;8054:23;8050:32;8047:52;;;8095:1;8092;8085:12;8047:52;8127:9;8121:16;8146:28;8168:5;8146:28;:::i;9746:128::-;9786:3;9817:1;9813:6;9810:1;9807:13;9804:39;;;9823:18;;:::i;:::-;-1:-1:-1;9859:9:1;;9746:128::o;14117:217::-;14157:1;14183;14173:132;;14227:10;14222:3;14218:20;14215:1;14208:31;14262:4;14259:1;14252:15;14290:4;14287:1;14280:15;14173:132;-1:-1:-1;14319:9:1;;14117:217::o;14471:251::-;14541:6;14594:2;14582:9;14573:7;14569:23;14565:32;14562:52;;;14610:1;14607;14600:12;14562:52;14642:9;14636:16;14661:31;14686:5;14661:31;:::i;14727:980::-;14989:4;15037:3;15026:9;15022:19;15068:6;15057:9;15050:25;15094:2;15132:6;15127:2;15116:9;15112:18;15105:34;15175:3;15170:2;15159:9;15155:18;15148:31;15199:6;15234;15228:13;15265:6;15257;15250:22;15303:3;15292:9;15288:19;15281:26;;15342:2;15334:6;15330:15;15316:29;;15363:1;15373:195;15387:6;15384:1;15381:13;15373:195;;;15452:13;;-1:-1:-1;;;;;15448:39:1;15436:52;;15543:15;;;;15508:12;;;;15484:1;15402:9;15373:195;;;-1:-1:-1;;;;;;;15624:32:1;;;;15619:2;15604:18;;15597:60;-1:-1:-1;;;15688:3:1;15673:19;15666:35;15585:3;14727:980;-1:-1:-1;;;14727:980:1:o;16726:306::-;16814:6;16822;16830;16883:2;16871:9;16862:7;16858:23;16854:32;16851:52;;;16899:1;16896;16889:12;16851:52;16928:9;16922:16;16912:26;;16978:2;16967:9;16963:18;16957:25;16947:35;;17022:2;17011:9;17007:18;17001:25;16991:35;;16726:306;;;;;:::o

Swarm Source

ipfs://80aec80fbc17c556e5c9d88e4d1661a5e0b772bb45838d965bf0f03f913f9888
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.