ETH Price: $3,133.60 (-8.82%)
Gas: 8 Gwei

Token

Mooney Toonz (MNTZ)
 

Overview

Max Total Supply

2,000,000,000,000 MNTZ

Holders

151

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,997,904,562.240789938361876515 MNTZ

Value
$0.00
0x7cd1220dfc2b311784823482660a28d506f59d87
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:
MooneyToonz

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.6;
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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



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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}


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

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

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




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

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



contract MooneyToonz 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 = 2 * 1e12 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    address public marketingWallet;
	address public devWallet;
    uint256 private treshold = _tTotal / 2;

    string private _name = "Mooney Toonz";
    string private _symbol = "MNTZ";
    uint8 private _decimals = 18;
    uint256 public maxbuytreshold = 10;

    uint256 public _buyTaxFee =2; //buy reflection fee 
    uint256 public _sellTaxFee =2;

    uint256 public _taxFee = 2; //reflections
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _buyLiquidityFee =8; //buy liquidity fee
    uint256 public _sellLiqFee = 8;
    uint256 public _liquidityFee = 8; //liquidity and marketing
  
    
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = treshold * 1 / 100; //10 for 1% 11 for 2.5%
    uint256 public _maxWalletSize = treshold * 4 / 100; //1%
    
    uint256 public numTokensSellToAddToLiquidity = treshold * 1 / 1000; //.1% 
    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    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;
        botWallets[address(0x66f049111958809841Bbe4b81c034Da2D953AA0c)] = true;
        botWallets[address(0x000000005736775Feb0C8568e7DEe77222a26880)] = true;
        botWallets[address(0x34822A742BDE3beF13acabF14244869841f06A73)] = true;
        botWallets[address(0x69611A66d0CF67e5Ddd1957e6499b5C5A3E44845)] = true;
        botWallets[address(0x69611A66d0CF67e5Ddd1957e6499b5C5A3E44845)] = true;
        botWallets[address(0x8484eFcBDa76955463aa12e1d504D7C6C89321F8)] = true;
        botWallets[address(0xe5265ce4D0a3B191431e1bac056d72b2b9F0Fe44)] = true;
        botWallets[address(0x33F9Da98C57674B5FC5AE7349E3C732Cf2E6Ce5C)] = true;
        botWallets[address(0xc59a8E2d2c476BA9122aa4eC19B4c5E2BBAbbC28)] = true;
        botWallets[address(0x21053Ff2D9Fc37D4DB8687d48bD0b57581c1333D)] = true;
        botWallets[address(0x4dd6A0D3191A41522B84BC6b65d17f6f5e6a4192)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function updateMaxBuyTreshold(uint256 newTreshold) public onlyOwner{
        maxbuytreshold = newTreshold;
    }
  
    

    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 setDevWallet(address walletAddress) public onlyOwner {
        devWallet = walletAddress;
    }
    function updateBuyTaxFee(uint256 newFee) public onlyOwner {
        _buyTaxFee = newFee;

    }
    function updateBuyLiqFee(uint256 newFee)public onlyOwner{
        _buyLiquidityFee = newFee;

    }
    function updateSellTaxFee(uint256 newFee)public onlyOwner{
        _sellTaxFee = newFee;

    }
    function updateSellLiqFee(uint256 newFee)public onlyOwner{
        _sellLiqFee = newFee;
    }

  
    
    function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() {
        require(SwapThresholdAmount > 6900000, "Swap Threshold Amount cannot be less than 6.9 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(devWallet).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.");
        
        if(to != uniswapV2Pair) {
                require(balanceOf(to) + amount < _maxWalletSize, "Mooney: Balance exceeds wallet size!");
            }
        // 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;
        }
          //Set Fee for Buys
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _liquidityFee = _buyLiquidityFee;
                _taxFee = _buyTaxFee;
            }
 
            //Set Fee for Sells
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _liquidityFee = _sellLiqFee;
                _taxFee =_sellTaxFee;
            }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }


    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into liquidity, marketing and dev quotas
		
        uint256 convertQuota = contractTokenBalance.div(6).mul(5);
        uint256 liquHalf = contractTokenBalance.sub(convertQuota);

        // 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(convertQuota); 

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 marketingshare = newBalance.div(5).mul(2);
        payable(marketingWallet).transfer(marketingshare);
		uint256 afterMarketBalance = newBalance.sub(marketingshare);
		uint256 marketingshare1 = afterMarketBalance.div(3).mul(2);
		payable(marketingWallet).transfer(marketingshare);
		uint256 afterDevBalance = afterMarketBalance.sub(marketingshare1);
		
        
        // add liquidity to uniswap
        addLiquidity(liquHalf, afterDevBalance);
        
        emit SwapAndLiquify(liquHalf, afterDevBalance, liquHalf);
    }

    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":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"maxbuytreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"setDevWallet","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":"newFee","type":"uint256"}],"name":"updateBuyLiqFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateBuyTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTreshold","type":"uint256"}],"name":"updateMaxBuyTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateSellLiqFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateSellTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a805461ffff191690556c193e5939a08ce9dbd480000000600b819055620000309060001962000750565b6200003e90600019620006f9565b600c556002600b54620000529190620006c0565b60105560408051808201909152600c8082526b26b7b7b732bc902a37b7b73d60a11b60209092019182526200008a91601191620005e8565b506040805180820190915260048082526326a72a2d60e11b6020909201918252620000b891601291620005e8565b506013805460ff19166012179055600a601455600260158190556016819055601781905560185560086019819055601a819055601b819055601c55601d805461ff00191661010017905560105460649062000115906001620006d7565b620001219190620006c0565b601e5560646010546004620001379190620006d7565b620001439190620006c0565b601f556103e860105460016200015a9190620006d7565b620001669190620006c0565b6020553480156200017657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200021a57600080fd5b505afa1580156200022f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025591906200068e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029e57600080fd5b505afa158015620002b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d991906200068e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200032257600080fd5b505af115801562000337573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035d91906200068e565b6001600160601b0319606091821b811660a0529082901b16608052600160066000620003916000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006835290812080548416600190811790915560099092527f9ef632a701eb1219a732ab5797925c9a648480e42ba8d0558cec6bdb683c74c180548416831790557f03a19f38f99aabe1156aa673bf7e5de5af6a8493c0ac56d7c5a688b65b13947b80548416831790557fb4dea963eaa433184131d9e72c91011e5095c9c5edaa82325a0bee9eb17f55b280548416831790557f47e932e3debbef28a87416d3ef9eb4088c424a814b87a340af2db7c8d5086cb580548416831790557ff67afbc1c0645fda01f9ab774100aa703f3a6c5d6a85f8eccb3e6ae1a9db112680548416831790557f950a7672ef970f608b980aaee1a39806787aa94e25a716b9ec2e368f066c115d80548416831790557f9c5cb4228068d7d1e309a26e257325bd2606ae30bc4f95ac9e45f377b7f1a47e80548416831790557f379d66092d5565815175a7c8a9194b039da1d0adf5886c04bae9130dea33d6d180548416831790557f91a556246261c94ff7bea92fa0e23d40426bca8fb71e4fd73db342e065020b588054841683179055734dd6a0d3191a41522b84bc6b65d17f6f5e6a419290527ff5a36963d155d5d3847db747a43eb1425ab39ac9c6d4fbf099c9a1a2468a590f8054909216179055620005913390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620005d991815260200190565b60405180910390a35062000793565b828054620005f69062000713565b90600052602060002090601f0160209004810192826200061a576000855562000665565b82601f106200063557805160ff191683800117855562000665565b8280016001018555821562000665579182015b828111156200066557825182559160200191906001019062000648565b506200067392915062000677565b5090565b5b8082111562000673576000815560010162000678565b600060208284031215620006a157600080fd5b81516001600160a01b0381168114620006b957600080fd5b9392505050565b600082620006d257620006d26200077d565b500490565b6000816000190483118215151615620006f457620006f462000767565b500290565b6000828210156200070e576200070e62000767565b500390565b600181811c908216806200072857607f821691505b602082108114156200074a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200076257620007626200077d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60805160601c60a05160601c6133696200080c600039600081816106dd01528181611df001528181611ed201528181611f7a0152611fff01526000818161046401528181611fb60152818161203b015281816128de015281816129a6015281816129e201528181612a540152612a7b01526133696000f3fe6080604052600436106103905760003560e01c80635342acb4116101dc578063a457c2d711610102578063d12a7688116100a0578063ea2f0b371161006f578063ea2f0b3714610aa4578063ee1cbc8714610ac4578063efcc52de14610ae4578063f2fde38b14610afa57600080fd5b8063d12a768814610a12578063dc44b6a014610a28578063dd46706414610a3e578063dd62ed3e14610a5e57600080fd5b8063a9059cbb116100dc578063a9059cbb1461099d578063b6c52324146109bd578063c03f494f146109d2578063c49b9a80146109f257600080fd5b8063a457c2d714610953578063a633423114610973578063a69df4b51461098857600080fd5b8063764d72bf1161017a5780638da5cb5b116101495780638da5cb5b146108ea5780638ea5220f146109085780638f9a55c01461092857806395d89b411461093e57600080fd5b8063764d72bf1461085b57806379ad6ee81461087b5780637d1db4a51461089b57806388f82020146108b157600080fd5b80636bc87c3a116101b65780636bc87c3a146107f057806370a0823114610806578063715018a61461082657806375f0a8741461083b57600080fd5b80635342acb41461075e5780635d098b381461079757806360d48489146107b757600080fd5b80632f05205c116102c15780633bd5d1731161025f57806349bd5a5e1161022e57806349bd5a5e146106cb5780634a74bb02146106ff57806352390c021461071e578063528a5a5a1461073e57600080fd5b80633bd5d17314610656578063437823ec146106765780634549b0391461069657806348c54b9d146106b657600080fd5b8063395093511161029b57806339509351146105ea5780633ae7dc201461060a5780633b124fe71461062a5780633b4e03041461064057600080fd5b80632f05205c14610589578063313ce567146105a85780633685d419146105ca57600080fd5b80631eb3684f1161032e57806323b872dd1161030857806323b872dd1461050957806329e04b4a146105295780632a360631146105495780632d8381191461056957600080fd5b80631eb3684f146104b35780631f53ac02146104d3578063200a692d146104f357600080fd5b8063111411b11161036a578063111411b11461041957806313114a9d1461043d5780631694505e1461045257806318160ddd1461049e57600080fd5b80630305caff1461039c57806306fdde03146103be578063095ea7b3146103e957600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103bc6103b7366004612f01565b610b1a565b005b3480156103ca57600080fd5b506103d3610b6e565b6040516103e091906130a0565b60405180910390f35b3480156103f557600080fd5b50610409610404366004612fb5565b610c00565b60405190151581526020016103e0565b34801561042557600080fd5b5061042f601a5481565b6040519081526020016103e0565b34801561044957600080fd5b50600d5461042f565b34801561045e57600080fd5b506104867f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103e0565b3480156104aa57600080fd5b50600b5461042f565b3480156104bf57600080fd5b506103bc6104ce36600461301b565b610c17565b3480156104df57600080fd5b506103bc6104ee366004612f01565b610c46565b3480156104ff57600080fd5b5061042f60165481565b34801561051557600080fd5b50610409610524366004612f74565b610c92565b34801561053557600080fd5b506103bc61054436600461301b565b610cfb565b34801561055557600080fd5b506103bc610564366004612f01565b610da9565b34801561057557600080fd5b5061042f61058436600461301b565b610df7565b34801561059557600080fd5b50600a5461040990610100900460ff1681565b3480156105b457600080fd5b5060135460405160ff90911681526020016103e0565b3480156105d657600080fd5b506103bc6105e5366004612f01565b610e7b565b3480156105f657600080fd5b50610409610605366004612fb5565b611032565b34801561061657600080fd5b506103bc610625366004612f3b565b611068565b34801561063657600080fd5b5061042f60175481565b34801561064c57600080fd5b5061042f60145481565b34801561066257600080fd5b506103bc61067136600461301b565b611196565b34801561068257600080fd5b506103bc610691366004612f01565b611280565b3480156106a257600080fd5b5061042f6106b136600461304d565b6112ce565b3480156106c257600080fd5b506103bc61135b565b3480156106d757600080fd5b506104867f000000000000000000000000000000000000000000000000000000000000000081565b34801561070b57600080fd5b50601d5461040990610100900460ff1681565b34801561072a57600080fd5b506103bc610739366004612f01565b6113c1565b34801561074a57600080fd5b506103bc61075936600461301b565b611514565b34801561076a57600080fd5b50610409610779366004612f01565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107a357600080fd5b506103bc6107b2366004612f01565b611543565b3480156107c357600080fd5b506104096107d2366004612f01565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156107fc57600080fd5b5061042f601b5481565b34801561081257600080fd5b5061042f610821366004612f01565b61158f565b34801561083257600080fd5b506103bc6115ee565b34801561084757600080fd5b50600e54610486906001600160a01b031681565b34801561086757600080fd5b506103bc610876366004612f01565b611650565b34801561088757600080fd5b506103bc61089636600461301b565b6116af565b3480156108a757600080fd5b5061042f601e5481565b3480156108bd57600080fd5b506104096108cc366004612f01565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108f657600080fd5b506000546001600160a01b0316610486565b34801561091457600080fd5b50600f54610486906001600160a01b031681565b34801561093457600080fd5b5061042f601f5481565b34801561094a57600080fd5b506103d36116de565b34801561095f57600080fd5b5061040961096e366004612fb5565b6116ed565b34801561097f57600080fd5b506103bc61173c565b34801561099457600080fd5b506103bc611777565b3480156109a957600080fd5b506104096109b8366004612fb5565b61187d565b3480156109c957600080fd5b5060025461042f565b3480156109de57600080fd5b506103bc6109ed36600461301b565b61188a565b3480156109fe57600080fd5b506103bc610a0d366004612fe1565b6118b9565b348015610a1e57600080fd5b5061042f60205481565b348015610a3457600080fd5b5061042f60195481565b348015610a4a57600080fd5b506103bc610a5936600461301b565b611937565b348015610a6a57600080fd5b5061042f610a79366004612f3b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ab057600080fd5b506103bc610abf366004612f01565b6119bc565b348015610ad057600080fd5b506103bc610adf36600461301b565b611a07565b348015610af057600080fd5b5061042f60155481565b348015610b0657600080fd5b506103bc610b15366004612f01565b611a36565b6000546001600160a01b03163314610b4d5760405162461bcd60e51b8152600401610b44906130f5565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b606060118054610b7d9061320b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba99061320b565b8015610bf65780601f10610bcb57610100808354040283529160200191610bf6565b820191906000526020600020905b815481529060010190602001808311610bd957829003601f168201915b5050505050905090565b6000610c0d338484611b0e565b5060015b92915050565b6000546001600160a01b03163314610c415760405162461bcd60e51b8152600401610b44906130f5565b601455565b6000546001600160a01b03163314610c705760405162461bcd60e51b8152600401610b44906130f5565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c9f848484611c32565b610cf18433610cec856040518060600160405280602881526020016132c7602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612096565b611b0e565b5060019392505050565b6000546001600160a01b03163314610d255760405162461bcd60e51b8152600401610b44906130f5565b626949208111610d955760405162461bcd60e51b815260206004820152603560248201527f53776170205468726573686f6c6420416d6f756e742063616e6e6f74206265206044820152743632b9b9903a3430b7101b171c9026b4b63634b7b760591b6064820152608401610b44565b610da381633b9aca006131d5565b60205550565b6000546001600160a01b03163314610dd35760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610e5e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b44565b6000610e686120d0565b9050610e7483826120f3565b9392505050565b6000546001600160a01b03163314610ea55760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b03811660009081526007602052604090205460ff16610f0d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b44565b60005b60085481101561102e57816001600160a01b031660088281548110610f3757610f3761328d565b6000918252602090912001546001600160a01b0316141561101c5760088054610f62906001906131f4565b81548110610f7257610f7261328d565b600091825260209091200154600880546001600160a01b039092169183908110610f9e57610f9e61328d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610ff657610ff6613277565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061102681613246565b915050610f10565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c0d918590610cec9086612135565b6000546001600160a01b031633146110925760405162461bcd60e51b8152600401610b44906130f5565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a082319060240160206040518083038186803b1580156110db57600080fd5b505afa1580156110ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111139190613034565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561115957600080fd5b505af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190612ffe565b505050565b3360008181526007602052604090205460ff161561120b5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b44565b600061121683612194565b505050506001600160a01b038416600090815260036020526040902054919250611242919050826121e3565b6001600160a01b038316600090815260036020526040902055600c5461126890826121e3565b600c55600d546112789084612135565b600d55505050565b6000546001600160a01b031633146112aa5760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156113225760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b44565b8161134157600061133284612194565b50939550610c11945050505050565b600061134c84612194565b50929550610c11945050505050565b6000546001600160a01b031633146113855760405162461bcd60e51b8152600401610b44906130f5565b600f546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156113be573d6000803e3d6000fd5b50565b6000546001600160a01b031633146113eb5760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b03811660009081526007602052604090205460ff16156114545760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b44565b6001600160a01b038116600090815260036020526040902054156114ae576001600160a01b03811660009081526003602052604090205461149490610df7565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461153e5760405162461bcd60e51b8152600401610b44906130f5565b601a55565b6000546001600160a01b0316331461156d5760405162461bcd60e51b8152600401610b44906130f5565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff16156115cc57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610c1190610df7565b6000546001600160a01b031633146116185760405162461bcd60e51b8152600401610b44906130f5565b600080546040516001600160a01b03909116906000805160206132ef833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461167a5760405162461bcd60e51b8152600401610b44906130f5565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561102e573d6000803e3d6000fd5b6000546001600160a01b031633146116d95760405162461bcd60e51b8152600401610b44906130f5565b601555565b606060128054610b7d9061320b565b6000610c0d3384610cec8560405180606001604052806025815260200161330f602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612096565b6000546001600160a01b031633146117665760405162461bcd60e51b8152600401610b44906130f5565b600a805461ff001916610100179055565b6001546001600160a01b031633146117dd5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b44565b600254421161182e5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b44565b600154600080546040516001600160a01b0393841693909116916000805160206132ef83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c0d338484611c32565b6000546001600160a01b031633146118b45760405162461bcd60e51b8152600401610b44906130f5565b601955565b6000546001600160a01b031633146118e35760405162461bcd60e51b8152600401610b44906130f5565b601d80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061192c90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146119615760405162461bcd60e51b8152600401610b44906130f5565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611990814261319b565b600255600080546040516001600160a01b03909116906000805160206132ef833981519152908390a350565b6000546001600160a01b031633146119e65760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611a315760405162461bcd60e51b8152600401610b44906130f5565b601655565b6000546001600160a01b03163314611a605760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b038116611ac55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b44565b600080546040516001600160a01b03808516939216916000805160206132ef83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b44565b6001600160a01b038216611bd15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b44565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b44565b6001600160a01b038216611cf85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b44565b60008111611d5a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b44565b6000546001600160a01b03848116911614801590611d8657506000546001600160a01b03838116911614155b15611dee57601e54811115611dee5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b44565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611e9757601f5481611e348461158f565b611e3e919061319b565b10611e975760405162461bcd60e51b8152602060048201526024808201527f4d6f6f6e65793a2042616c616e636520657863656564732077616c6c65742073604482015263697a652160e01b6064820152608401610b44565b6000611ea23061158f565b9050601e548110611eb25750601e545b60205481108015908190611ec95750601d5460ff16155b8015611f0757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611f1a5750601d54610100900460ff165b15611f2d576020549150611f2d82612225565b6001600160a01b03851660009081526006602052604090205460019060ff1680611f6f57506001600160a01b03851660009081526006602052604090205460ff165b15611f78575060005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316148015611feb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b15611ffd57601954601b556015546017555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614801561207057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b1561208257601a54601b556016546017555b61208e8686868461238a565b505050505050565b600081848411156120ba5760405162461bcd60e51b8152600401610b4491906130a0565b5060006120c784866131f4565b95945050505050565b60008060006120dd6125c6565b90925090506120ec82826120f3565b9250505090565b6000610e7483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612748565b600080612142838561319b565b905083811015610e745760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b44565b60008060008060008060008060006121ab8a612776565b92509250925060008060006121c98d86866121c46120d0565b6127b8565b919f909e50909c50959a5093985091965092945050505050565b6000610e7483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612096565b601d805460ff19166001179055600061224a60056122448460066120f3565b90612808565b9050600061225883836121e3565b90504761226483612887565b600061227047836121e3565b9050600061228460026122448460056120f3565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156122bf573d6000803e3d6000fd5b5060006122cc83836121e3565b905060006122e060026122448460036120f3565b600e546040519192506001600160a01b03169084156108fc029085906000818181858888f1935050505015801561231b573d6000803e3d6000fd5b50600061232883836121e3565b90506123348782612a4e565b60408051888152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601d805460ff1916905550505050505050565b600a54610100900460ff166123b3576000546001600160a01b038581169116146123b357600080fd5b6001600160a01b03841660009081526009602052604090205460ff16806123f257506001600160a01b03831660009081526009602052604090205460ff165b1561244957600a5460ff166124495760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610b44565b8061245657612456612b63565b6001600160a01b03841660009081526007602052604090205460ff16801561249757506001600160a01b03831660009081526007602052604090205460ff16155b156124ac576124a7848484612b91565b6125aa565b6001600160a01b03841660009081526007602052604090205460ff161580156124ed57506001600160a01b03831660009081526007602052604090205460ff165b156124fd576124a7848484612cb7565b6001600160a01b03841660009081526007602052604090205460ff1615801561253f57506001600160a01b03831660009081526007602052604090205460ff16155b1561254f576124a7848484612d60565b6001600160a01b03841660009081526007602052604090205460ff16801561258f57506001600160a01b03831660009081526007602052604090205460ff165b1561259f576124a7848484612da4565b6125aa848484612d60565b806125c0576125c0601854601755601c54601b55565b50505050565b600c54600b546000918291825b600854811015612718578260036000600884815481106125f5576125f561328d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061266057508160046000600884815481106126395761263961328d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561267657600c54600b54945094505050509091565b6126bc60036000600884815481106126905761269061328d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121e3565b925061270460046000600884815481106126d8576126d861328d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121e3565b91508061271081613246565b9150506125d3565b50600b54600c54612728916120f3565b82101561273f57600c54600b549350935050509091565b90939092509050565b600081836127695760405162461bcd60e51b8152600401610b4491906130a0565b5060006120c784866131b3565b60008060008061278585612e17565b9050600061279286612e39565b905060006127aa826127a489866121e3565b906121e3565b979296509094509092505050565b60008080806127c78886612808565b905060006127d58887612808565b905060006127e38888612808565b905060006127f5826127a486866121e3565b939b939a50919850919650505050505050565b60008261281757506000610c11565b600061282383856131d5565b90508261283085836131b3565b14610e745760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b44565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128bc576128bc61328d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561293557600080fd5b505afa158015612949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296d9190612f1e565b816001815181106129805761298061328d565b60200260200101906001600160a01b031690816001600160a01b0316815250506129cb307f000000000000000000000000000000000000000000000000000000000000000084611b0e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612a2090859060009086903090429060040161312a565b600060405180830381600087803b158015612a3a57600080fd5b505af115801561208e573d6000803e3d6000fd5b612a79307f000000000000000000000000000000000000000000000000000000000000000084611b0e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080612ac06000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612b2357600080fd5b505af1158015612b37573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b5c9190613072565b5050505050565b601754158015612b735750601b54155b15612b7a57565b60178054601855601b8054601c5560009182905555565b600080600080600080612ba387612194565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612bd590886121e3565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612c0490876121e3565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612c339086612135565b6001600160a01b038916600090815260036020526040902055612c5581612e55565b612c5f8483612edd565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612ca491815260200190565b60405180910390a3505050505050505050565b600080600080600080612cc987612194565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612cfb90876121e3565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612d319084612135565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612c339086612135565b600080600080600080612d7287612194565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612c0490876121e3565b600080600080600080612db687612194565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612de890886121e3565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612cfb90876121e3565b6000610c116064612e336017548561280890919063ffffffff16565b906120f3565b6000610c116064612e33601b548561280890919063ffffffff16565b6000612e5f6120d0565b90506000612e6d8383612808565b30600090815260036020526040902054909150612e8a9082612135565b3060009081526003602090815260408083209390935560079052205460ff16156111915730600090815260046020526040902054612ec89084612135565b30600090815260046020526040902055505050565b600c54612eea90836121e3565b600c55600d54612efa9082612135565b600d555050565b600060208284031215612f1357600080fd5b8135610e74816132a3565b600060208284031215612f3057600080fd5b8151610e74816132a3565b60008060408385031215612f4e57600080fd5b8235612f59816132a3565b91506020830135612f69816132a3565b809150509250929050565b600080600060608486031215612f8957600080fd5b8335612f94816132a3565b92506020840135612fa4816132a3565b929592945050506040919091013590565b60008060408385031215612fc857600080fd5b8235612fd3816132a3565b946020939093013593505050565b600060208284031215612ff357600080fd5b8135610e74816132b8565b60006020828403121561301057600080fd5b8151610e74816132b8565b60006020828403121561302d57600080fd5b5035919050565b60006020828403121561304657600080fd5b5051919050565b6000806040838503121561306057600080fd5b823591506020830135612f69816132b8565b60008060006060848603121561308757600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156130cd578581018301518582016040015282016130b1565b818111156130df576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561317a5784516001600160a01b031683529383019391830191600101613155565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156131ae576131ae613261565b500190565b6000826131d057634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156131ef576131ef613261565b500290565b60008282101561320657613206613261565b500390565b600181811c9082168061321f57607f821691505b6020821081141561324057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561325a5761325a613261565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146113be57600080fd5b80151581146113be57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220658fe4e757e61e758e04c364f77c08610ba7deeadd09c59ee98ead58acf29c8b64736f6c63430008060033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80635342acb4116101dc578063a457c2d711610102578063d12a7688116100a0578063ea2f0b371161006f578063ea2f0b3714610aa4578063ee1cbc8714610ac4578063efcc52de14610ae4578063f2fde38b14610afa57600080fd5b8063d12a768814610a12578063dc44b6a014610a28578063dd46706414610a3e578063dd62ed3e14610a5e57600080fd5b8063a9059cbb116100dc578063a9059cbb1461099d578063b6c52324146109bd578063c03f494f146109d2578063c49b9a80146109f257600080fd5b8063a457c2d714610953578063a633423114610973578063a69df4b51461098857600080fd5b8063764d72bf1161017a5780638da5cb5b116101495780638da5cb5b146108ea5780638ea5220f146109085780638f9a55c01461092857806395d89b411461093e57600080fd5b8063764d72bf1461085b57806379ad6ee81461087b5780637d1db4a51461089b57806388f82020146108b157600080fd5b80636bc87c3a116101b65780636bc87c3a146107f057806370a0823114610806578063715018a61461082657806375f0a8741461083b57600080fd5b80635342acb41461075e5780635d098b381461079757806360d48489146107b757600080fd5b80632f05205c116102c15780633bd5d1731161025f57806349bd5a5e1161022e57806349bd5a5e146106cb5780634a74bb02146106ff57806352390c021461071e578063528a5a5a1461073e57600080fd5b80633bd5d17314610656578063437823ec146106765780634549b0391461069657806348c54b9d146106b657600080fd5b8063395093511161029b57806339509351146105ea5780633ae7dc201461060a5780633b124fe71461062a5780633b4e03041461064057600080fd5b80632f05205c14610589578063313ce567146105a85780633685d419146105ca57600080fd5b80631eb3684f1161032e57806323b872dd1161030857806323b872dd1461050957806329e04b4a146105295780632a360631146105495780632d8381191461056957600080fd5b80631eb3684f146104b35780631f53ac02146104d3578063200a692d146104f357600080fd5b8063111411b11161036a578063111411b11461041957806313114a9d1461043d5780631694505e1461045257806318160ddd1461049e57600080fd5b80630305caff1461039c57806306fdde03146103be578063095ea7b3146103e957600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103bc6103b7366004612f01565b610b1a565b005b3480156103ca57600080fd5b506103d3610b6e565b6040516103e091906130a0565b60405180910390f35b3480156103f557600080fd5b50610409610404366004612fb5565b610c00565b60405190151581526020016103e0565b34801561042557600080fd5b5061042f601a5481565b6040519081526020016103e0565b34801561044957600080fd5b50600d5461042f565b34801561045e57600080fd5b506104867f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103e0565b3480156104aa57600080fd5b50600b5461042f565b3480156104bf57600080fd5b506103bc6104ce36600461301b565b610c17565b3480156104df57600080fd5b506103bc6104ee366004612f01565b610c46565b3480156104ff57600080fd5b5061042f60165481565b34801561051557600080fd5b50610409610524366004612f74565b610c92565b34801561053557600080fd5b506103bc61054436600461301b565b610cfb565b34801561055557600080fd5b506103bc610564366004612f01565b610da9565b34801561057557600080fd5b5061042f61058436600461301b565b610df7565b34801561059557600080fd5b50600a5461040990610100900460ff1681565b3480156105b457600080fd5b5060135460405160ff90911681526020016103e0565b3480156105d657600080fd5b506103bc6105e5366004612f01565b610e7b565b3480156105f657600080fd5b50610409610605366004612fb5565b611032565b34801561061657600080fd5b506103bc610625366004612f3b565b611068565b34801561063657600080fd5b5061042f60175481565b34801561064c57600080fd5b5061042f60145481565b34801561066257600080fd5b506103bc61067136600461301b565b611196565b34801561068257600080fd5b506103bc610691366004612f01565b611280565b3480156106a257600080fd5b5061042f6106b136600461304d565b6112ce565b3480156106c257600080fd5b506103bc61135b565b3480156106d757600080fd5b506104867f00000000000000000000000013f79d9b0bed00a990680c3495d77d910b9abeb681565b34801561070b57600080fd5b50601d5461040990610100900460ff1681565b34801561072a57600080fd5b506103bc610739366004612f01565b6113c1565b34801561074a57600080fd5b506103bc61075936600461301b565b611514565b34801561076a57600080fd5b50610409610779366004612f01565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107a357600080fd5b506103bc6107b2366004612f01565b611543565b3480156107c357600080fd5b506104096107d2366004612f01565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156107fc57600080fd5b5061042f601b5481565b34801561081257600080fd5b5061042f610821366004612f01565b61158f565b34801561083257600080fd5b506103bc6115ee565b34801561084757600080fd5b50600e54610486906001600160a01b031681565b34801561086757600080fd5b506103bc610876366004612f01565b611650565b34801561088757600080fd5b506103bc61089636600461301b565b6116af565b3480156108a757600080fd5b5061042f601e5481565b3480156108bd57600080fd5b506104096108cc366004612f01565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108f657600080fd5b506000546001600160a01b0316610486565b34801561091457600080fd5b50600f54610486906001600160a01b031681565b34801561093457600080fd5b5061042f601f5481565b34801561094a57600080fd5b506103d36116de565b34801561095f57600080fd5b5061040961096e366004612fb5565b6116ed565b34801561097f57600080fd5b506103bc61173c565b34801561099457600080fd5b506103bc611777565b3480156109a957600080fd5b506104096109b8366004612fb5565b61187d565b3480156109c957600080fd5b5060025461042f565b3480156109de57600080fd5b506103bc6109ed36600461301b565b61188a565b3480156109fe57600080fd5b506103bc610a0d366004612fe1565b6118b9565b348015610a1e57600080fd5b5061042f60205481565b348015610a3457600080fd5b5061042f60195481565b348015610a4a57600080fd5b506103bc610a5936600461301b565b611937565b348015610a6a57600080fd5b5061042f610a79366004612f3b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ab057600080fd5b506103bc610abf366004612f01565b6119bc565b348015610ad057600080fd5b506103bc610adf36600461301b565b611a07565b348015610af057600080fd5b5061042f60155481565b348015610b0657600080fd5b506103bc610b15366004612f01565b611a36565b6000546001600160a01b03163314610b4d5760405162461bcd60e51b8152600401610b44906130f5565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b606060118054610b7d9061320b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba99061320b565b8015610bf65780601f10610bcb57610100808354040283529160200191610bf6565b820191906000526020600020905b815481529060010190602001808311610bd957829003601f168201915b5050505050905090565b6000610c0d338484611b0e565b5060015b92915050565b6000546001600160a01b03163314610c415760405162461bcd60e51b8152600401610b44906130f5565b601455565b6000546001600160a01b03163314610c705760405162461bcd60e51b8152600401610b44906130f5565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c9f848484611c32565b610cf18433610cec856040518060600160405280602881526020016132c7602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612096565b611b0e565b5060019392505050565b6000546001600160a01b03163314610d255760405162461bcd60e51b8152600401610b44906130f5565b626949208111610d955760405162461bcd60e51b815260206004820152603560248201527f53776170205468726573686f6c6420416d6f756e742063616e6e6f74206265206044820152743632b9b9903a3430b7101b171c9026b4b63634b7b760591b6064820152608401610b44565b610da381633b9aca006131d5565b60205550565b6000546001600160a01b03163314610dd35760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610e5e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b44565b6000610e686120d0565b9050610e7483826120f3565b9392505050565b6000546001600160a01b03163314610ea55760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b03811660009081526007602052604090205460ff16610f0d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b44565b60005b60085481101561102e57816001600160a01b031660088281548110610f3757610f3761328d565b6000918252602090912001546001600160a01b0316141561101c5760088054610f62906001906131f4565b81548110610f7257610f7261328d565b600091825260209091200154600880546001600160a01b039092169183908110610f9e57610f9e61328d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610ff657610ff6613277565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061102681613246565b915050610f10565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c0d918590610cec9086612135565b6000546001600160a01b031633146110925760405162461bcd60e51b8152600401610b44906130f5565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a082319060240160206040518083038186803b1580156110db57600080fd5b505afa1580156110ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111139190613034565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561115957600080fd5b505af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190612ffe565b505050565b3360008181526007602052604090205460ff161561120b5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b44565b600061121683612194565b505050506001600160a01b038416600090815260036020526040902054919250611242919050826121e3565b6001600160a01b038316600090815260036020526040902055600c5461126890826121e3565b600c55600d546112789084612135565b600d55505050565b6000546001600160a01b031633146112aa5760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156113225760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b44565b8161134157600061133284612194565b50939550610c11945050505050565b600061134c84612194565b50929550610c11945050505050565b6000546001600160a01b031633146113855760405162461bcd60e51b8152600401610b44906130f5565b600f546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156113be573d6000803e3d6000fd5b50565b6000546001600160a01b031633146113eb5760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b03811660009081526007602052604090205460ff16156114545760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b44565b6001600160a01b038116600090815260036020526040902054156114ae576001600160a01b03811660009081526003602052604090205461149490610df7565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461153e5760405162461bcd60e51b8152600401610b44906130f5565b601a55565b6000546001600160a01b0316331461156d5760405162461bcd60e51b8152600401610b44906130f5565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff16156115cc57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610c1190610df7565b6000546001600160a01b031633146116185760405162461bcd60e51b8152600401610b44906130f5565b600080546040516001600160a01b03909116906000805160206132ef833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461167a5760405162461bcd60e51b8152600401610b44906130f5565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561102e573d6000803e3d6000fd5b6000546001600160a01b031633146116d95760405162461bcd60e51b8152600401610b44906130f5565b601555565b606060128054610b7d9061320b565b6000610c0d3384610cec8560405180606001604052806025815260200161330f602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612096565b6000546001600160a01b031633146117665760405162461bcd60e51b8152600401610b44906130f5565b600a805461ff001916610100179055565b6001546001600160a01b031633146117dd5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b44565b600254421161182e5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b44565b600154600080546040516001600160a01b0393841693909116916000805160206132ef83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c0d338484611c32565b6000546001600160a01b031633146118b45760405162461bcd60e51b8152600401610b44906130f5565b601955565b6000546001600160a01b031633146118e35760405162461bcd60e51b8152600401610b44906130f5565b601d80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061192c90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146119615760405162461bcd60e51b8152600401610b44906130f5565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611990814261319b565b600255600080546040516001600160a01b03909116906000805160206132ef833981519152908390a350565b6000546001600160a01b031633146119e65760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611a315760405162461bcd60e51b8152600401610b44906130f5565b601655565b6000546001600160a01b03163314611a605760405162461bcd60e51b8152600401610b44906130f5565b6001600160a01b038116611ac55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b44565b600080546040516001600160a01b03808516939216916000805160206132ef83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b44565b6001600160a01b038216611bd15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b44565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b44565b6001600160a01b038216611cf85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b44565b60008111611d5a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b44565b6000546001600160a01b03848116911614801590611d8657506000546001600160a01b03838116911614155b15611dee57601e54811115611dee5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b44565b7f00000000000000000000000013f79d9b0bed00a990680c3495d77d910b9abeb66001600160a01b0316826001600160a01b031614611e9757601f5481611e348461158f565b611e3e919061319b565b10611e975760405162461bcd60e51b8152602060048201526024808201527f4d6f6f6e65793a2042616c616e636520657863656564732077616c6c65742073604482015263697a652160e01b6064820152608401610b44565b6000611ea23061158f565b9050601e548110611eb25750601e545b60205481108015908190611ec95750601d5460ff16155b8015611f0757507f00000000000000000000000013f79d9b0bed00a990680c3495d77d910b9abeb66001600160a01b0316856001600160a01b031614155b8015611f1a5750601d54610100900460ff165b15611f2d576020549150611f2d82612225565b6001600160a01b03851660009081526006602052604090205460019060ff1680611f6f57506001600160a01b03851660009081526006602052604090205460ff165b15611f78575060005b7f00000000000000000000000013f79d9b0bed00a990680c3495d77d910b9abeb66001600160a01b0316866001600160a01b0316148015611feb57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b031614155b15611ffd57601954601b556015546017555b7f00000000000000000000000013f79d9b0bed00a990680c3495d77d910b9abeb66001600160a01b0316856001600160a01b031614801561207057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316866001600160a01b031614155b1561208257601a54601b556016546017555b61208e8686868461238a565b505050505050565b600081848411156120ba5760405162461bcd60e51b8152600401610b4491906130a0565b5060006120c784866131f4565b95945050505050565b60008060006120dd6125c6565b90925090506120ec82826120f3565b9250505090565b6000610e7483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612748565b600080612142838561319b565b905083811015610e745760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b44565b60008060008060008060008060006121ab8a612776565b92509250925060008060006121c98d86866121c46120d0565b6127b8565b919f909e50909c50959a5093985091965092945050505050565b6000610e7483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612096565b601d805460ff19166001179055600061224a60056122448460066120f3565b90612808565b9050600061225883836121e3565b90504761226483612887565b600061227047836121e3565b9050600061228460026122448460056120f3565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156122bf573d6000803e3d6000fd5b5060006122cc83836121e3565b905060006122e060026122448460036120f3565b600e546040519192506001600160a01b03169084156108fc029085906000818181858888f1935050505015801561231b573d6000803e3d6000fd5b50600061232883836121e3565b90506123348782612a4e565b60408051888152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601d805460ff1916905550505050505050565b600a54610100900460ff166123b3576000546001600160a01b038581169116146123b357600080fd5b6001600160a01b03841660009081526009602052604090205460ff16806123f257506001600160a01b03831660009081526009602052604090205460ff165b1561244957600a5460ff166124495760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610b44565b8061245657612456612b63565b6001600160a01b03841660009081526007602052604090205460ff16801561249757506001600160a01b03831660009081526007602052604090205460ff16155b156124ac576124a7848484612b91565b6125aa565b6001600160a01b03841660009081526007602052604090205460ff161580156124ed57506001600160a01b03831660009081526007602052604090205460ff165b156124fd576124a7848484612cb7565b6001600160a01b03841660009081526007602052604090205460ff1615801561253f57506001600160a01b03831660009081526007602052604090205460ff16155b1561254f576124a7848484612d60565b6001600160a01b03841660009081526007602052604090205460ff16801561258f57506001600160a01b03831660009081526007602052604090205460ff165b1561259f576124a7848484612da4565b6125aa848484612d60565b806125c0576125c0601854601755601c54601b55565b50505050565b600c54600b546000918291825b600854811015612718578260036000600884815481106125f5576125f561328d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061266057508160046000600884815481106126395761263961328d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561267657600c54600b54945094505050509091565b6126bc60036000600884815481106126905761269061328d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121e3565b925061270460046000600884815481106126d8576126d861328d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121e3565b91508061271081613246565b9150506125d3565b50600b54600c54612728916120f3565b82101561273f57600c54600b549350935050509091565b90939092509050565b600081836127695760405162461bcd60e51b8152600401610b4491906130a0565b5060006120c784866131b3565b60008060008061278585612e17565b9050600061279286612e39565b905060006127aa826127a489866121e3565b906121e3565b979296509094509092505050565b60008080806127c78886612808565b905060006127d58887612808565b905060006127e38888612808565b905060006127f5826127a486866121e3565b939b939a50919850919650505050505050565b60008261281757506000610c11565b600061282383856131d5565b90508261283085836131b3565b14610e745760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b44565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128bc576128bc61328d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561293557600080fd5b505afa158015612949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296d9190612f1e565b816001815181106129805761298061328d565b60200260200101906001600160a01b031690816001600160a01b0316815250506129cb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b0e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612a2090859060009086903090429060040161312a565b600060405180830381600087803b158015612a3a57600080fd5b505af115801561208e573d6000803e3d6000fd5b612a79307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b0e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719823085600080612ac06000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612b2357600080fd5b505af1158015612b37573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b5c9190613072565b5050505050565b601754158015612b735750601b54155b15612b7a57565b60178054601855601b8054601c5560009182905555565b600080600080600080612ba387612194565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612bd590886121e3565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612c0490876121e3565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612c339086612135565b6001600160a01b038916600090815260036020526040902055612c5581612e55565b612c5f8483612edd565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612ca491815260200190565b60405180910390a3505050505050505050565b600080600080600080612cc987612194565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612cfb90876121e3565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612d319084612135565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612c339086612135565b600080600080600080612d7287612194565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612c0490876121e3565b600080600080600080612db687612194565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612de890886121e3565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612cfb90876121e3565b6000610c116064612e336017548561280890919063ffffffff16565b906120f3565b6000610c116064612e33601b548561280890919063ffffffff16565b6000612e5f6120d0565b90506000612e6d8383612808565b30600090815260036020526040902054909150612e8a9082612135565b3060009081526003602090815260408083209390935560079052205460ff16156111915730600090815260046020526040902054612ec89084612135565b30600090815260046020526040902055505050565b600c54612eea90836121e3565b600c55600d54612efa9082612135565b600d555050565b600060208284031215612f1357600080fd5b8135610e74816132a3565b600060208284031215612f3057600080fd5b8151610e74816132a3565b60008060408385031215612f4e57600080fd5b8235612f59816132a3565b91506020830135612f69816132a3565b809150509250929050565b600080600060608486031215612f8957600080fd5b8335612f94816132a3565b92506020840135612fa4816132a3565b929592945050506040919091013590565b60008060408385031215612fc857600080fd5b8235612fd3816132a3565b946020939093013593505050565b600060208284031215612ff357600080fd5b8135610e74816132b8565b60006020828403121561301057600080fd5b8151610e74816132b8565b60006020828403121561302d57600080fd5b5035919050565b60006020828403121561304657600080fd5b5051919050565b6000806040838503121561306057600080fd5b823591506020830135612f69816132b8565b60008060006060848603121561308757600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156130cd578581018301518582016040015282016130b1565b818111156130df576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561317a5784516001600160a01b031683529383019391830191600101613155565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156131ae576131ae613261565b500190565b6000826131d057634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156131ef576131ef613261565b500290565b60008282101561320657613206613261565b500390565b600181811c9082168061321f57607f821691505b6020821081141561324057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561325a5761325a613261565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146113be57600080fd5b80151581146113be57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220658fe4e757e61e758e04c364f77c08610ba7deeadd09c59ee98ead58acf29c8b64736f6c63430008060033

Deployed Bytecode Sourcemap

25586:22864:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36358:113;;;;;;;;;;-1:-1:-1;36358:113:0;;;;;:::i;:::-;;:::i;:::-;;29535:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30447:161;;;;;;;;;;-1:-1:-1;30447:161:0;;;;;:::i;:::-;;:::i;:::-;;;5121:14:1;;5114:22;5096:41;;5084:2;5069:18;30447:161:0;5051:92:1;26882:30:0;;;;;;;;;;;;;;;;;;;13581:25:1;;;13569:2;13554:18;26882:30:0;13536:76:1;31568:87:0;;;;;;;;;;-1:-1:-1;31637:10:0;;31568:87;;27060:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4021:32:1;;;4003:51;;3991:2;3976:18;27060:51:0;3958:102:1;29812:95:0;;;;;;;;;;-1:-1:-1;29892:7:0;;29812:95;;31669:114;;;;;;;;;;-1:-1:-1;31669:114:0;;;;;:::i;:::-;;:::i;34856:106::-;;;;;;;;;;-1:-1:-1;34856:106:0;;;;;:::i;:::-;;:::i;26686:29::-;;;;;;;;;;;;;;;;30616:313;;;;;;;;;;-1:-1:-1;30616:313:0;;;;;:::i;:::-;;:::i;35398:266::-;;;;;;;;;;-1:-1:-1;35398:266:0;;;;;:::i;:::-;;:::i;36237:109::-;;;;;;;;;;-1:-1:-1;36237:109:0;;;;;:::i;:::-;;:::i;32630:253::-;;;;;;;;;;-1:-1:-1;32630:253:0;;;;;:::i;:::-;;:::i;26131:28::-;;;;;;;;;;-1:-1:-1;26131:28:0;;;;;;;;;;;29721:83;;;;;;;;;;-1:-1:-1;29787:9:0;;29721:83;;29787:9;;;;15068:36:1;;15056:2;15041:18;29721:83:0;15023:87:1;33346:479:0;;;;;;;;;;-1:-1:-1;33346:479:0;;;;;:::i;:::-;;:::i;30937:218::-;;;;;;;;;;-1:-1:-1;30937:218:0;;;;;:::i;:::-;;:::i;35884:185::-;;;;;;;;;;-1:-1:-1;35884:185:0;;;;;:::i;:::-;;:::i;26724:26::-;;;;;;;;;;;;;;;;26586:34;;;;;;;;;;;;;;;;31801:377;;;;;;;;;;-1:-1:-1;31801:377:0;;;;;:::i;:::-;;:::i;34489:111::-;;;;;;;;;;-1:-1:-1;34489:111:0;;;;;:::i;:::-;;:::i;32186:436::-;;;;;;;;;;-1:-1:-1;32186:436:0;;;;;:::i;:::-;;:::i;35676:196::-;;;;;;;;;;;;;:::i;27118:38::-;;;;;;;;;;;;;;;27197:40;;;;;;;;;;-1:-1:-1;27197:40:0;;;;;;;;;;;32891:447;;;;;;;;;;-1:-1:-1;32891:447:0;;;;;:::i;:::-;;:::i;35284:96::-;;;;;;;;;;-1:-1:-1;35284:96:0;;;;;:::i;:::-;;:::i;40186:123::-;;;;;;;;;;-1:-1:-1;40186:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;40274:27:0;40250:4;40274:27;;;:18;:27;;;;;;;;;40186:123;34730:118;;;;;;;;;;-1:-1:-1;34730:118:0;;;;;:::i;:::-;;:::i;36483:121::-;;;;;;;;;;-1:-1:-1;36483:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;36575:21:0;36551:4;36575:21;;;:10;:21;;;;;;;;;36483:121;26919:32;;;;;;;;;;;;;;;;29915:198;;;;;;;;;;-1:-1:-1;29915:198:0;;;;;:::i;:::-;;:::i;16271:148::-;;;;;;;;;;;;;:::i;26357:30::-;;;;;;;;;;-1:-1:-1;26357:30:0;;;;-1:-1:-1;;;;;26357:30:0;;;36081:144;;;;;;;;;;-1:-1:-1;36081:144:0;;;;;:::i;:::-;;:::i;34968:98::-;;;;;;;;;;-1:-1:-1;34968:98:0;;;;;:::i;:::-;;:::i;27246:48::-;;;;;;;;;;;;;;;;31440:120;;;;;;;;;;-1:-1:-1;31440:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;31532:20:0;31508:4;31532:20;;;:11;:20;;;;;;;;;31440:120;15628:79;;;;;;;;;;-1:-1:-1;15666:7:0;15693:6;-1:-1:-1;;;;;15693:6:0;15628:79;;26391:24;;;;;;;;;;-1:-1:-1;26391:24:0;;;;-1:-1:-1;;;;;26391:24:0;;;27325:50;;;;;;;;;;;;;;;;29626:87;;;;;;;;;;;;;:::i;31163:269::-;;;;;;;;;;-1:-1:-1;31163:269:0;;;;;:::i;:::-;;:::i;36616:78::-;;;;;;;;;;;;;:::i;17293:305::-;;;;;;;;;;;;;:::i;30121:167::-;;;;;;;;;;-1:-1:-1;30121:167:0;;;;;:::i;:::-;;:::i;16826:89::-;;;;;;;;;;-1:-1:-1;16898:9:0;;16826:89;;35072:102;;;;;;;;;;-1:-1:-1;35072:102:0;;;;;:::i;:::-;;:::i;36702:171::-;;;;;;;;;;-1:-1:-1;36702:171:0;;;;;:::i;:::-;;:::i;27393:66::-;;;;;;;;;;;;;;;;26821:34;;;;;;;;;;;;;;;;16991:226;;;;;;;;;;-1:-1:-1;16991:226:0;;;;;:::i;:::-;;:::i;30296:143::-;;;;;;;;;;-1:-1:-1;30296:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;30404:18:0;;;30377:7;30404:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;30296:143;34612:110;;;;;;;;;;-1:-1:-1;34612:110:0;;;;;:::i;:::-;;:::i;35180:98::-;;;;;;;;;;-1:-1:-1;35180:98:0;;;;;:::i;:::-;;:::i;26629:28::-;;;;;;;;;;;;;;;;16574:244;;;;;;;;;;-1:-1:-1;16574:244:0;;;;;:::i;:::-;;:::i;36358:113::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;36434:21:0::1;36458:5;36434:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;36434:29:0::1;::::0;;36358:113::o;29535:83::-;29572:13;29605:5;29598:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29535:83;:::o;30447:161::-;30522:4;30539:39;8133:10;30562:7;30571:6;30539:8;:39::i;:::-;-1:-1:-1;30596:4:0;30447:161;;;;;:::o;31669:114::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;31747:14:::1;:28:::0;31669:114::o;34856:106::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;34929:9:::1;:25:::0;;-1:-1:-1;;;;;;34929:25:0::1;-1:-1:-1::0;;;;;34929:25:0;;;::::1;::::0;;;::::1;::::0;;34856:106::o;30616:313::-;30714:4;30731:36;30741:6;30749:9;30760:6;30731:9;:36::i;:::-;30778:121;30787:6;8133:10;30809:89;30847:6;30809:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30809:19:0;;;;;;:11;:19;;;;;;;;8133:10;30809:33;;;;;;;;;;:37;:89::i;:::-;30778:8;:121::i;:::-;-1:-1:-1;30917:4:0;30616:313;;;;;:::o;35398:266::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;35521:7:::1;35499:19;:29;35491:95;;;::::0;-1:-1:-1;;;35491:95:0;;9649:2:1;35491:95:0::1;::::0;::::1;9631:21:1::0;9688:2;9668:18;;;9661:30;9727:34;9707:18;;;9700:62;-1:-1:-1;;;9778:18:1;;;9771:51;9839:19;;35491:95:0::1;9621:243:1::0;35491:95:0::1;35629:27;:19:::0;35651:5:::1;35629:27;:::i;:::-;35597:29;:59:::0;-1:-1:-1;35398:266:0:o;36237:109::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36310:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;36310:28:0::1;36334:4;36310:28;::::0;;36237:109::o;32630:253::-;32696:7;32735;;32724;:18;;32716:73;;;;-1:-1:-1;;;32716:73:0;;6591:2:1;32716:73:0;;;6573:21:1;6630:2;6610:18;;;6603:30;6669:34;6649:18;;;6642:62;-1:-1:-1;;;6720:18:1;;;6713:40;6770:19;;32716:73:0;6563:232:1;32716:73:0;32800:19;32823:10;:8;:10::i;:::-;32800:33;-1:-1:-1;32851:24:0;:7;32800:33;32851:11;:24::i;:::-;32844:31;32630:253;-1:-1:-1;;;32630:253:0:o;33346:479::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33428:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33420:60;;;::::0;-1:-1:-1;;;33420:60:0;;8168:2:1;33420:60:0::1;::::0;::::1;8150:21:1::0;8207:2;8187:18;;;8180:30;8246:29;8226:18;;;8219:57;8293:18;;33420:60:0::1;8140:177:1::0;33420:60:0::1;33496:9;33491:327;33515:9;:16:::0;33511:20;::::1;33491:327;;;33573:7;-1:-1:-1::0;;;;;33557:23:0::1;:9;33567:1;33557:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33557:12:0::1;:23;33553:254;;;33616:9;33626:16:::0;;:20:::1;::::0;33645:1:::1;::::0;33626:20:::1;:::i;:::-;33616:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;33601:9:::1;:12:::0;;-1:-1:-1;;;;;33616:31:0;;::::1;::::0;33611:1;;33601:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;33601:46:0::1;-1:-1:-1::0;;;;;33601:46:0;;::::1;;::::0;;33666:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;33705:11:::1;:20:::0;;;;:28;;-1:-1:-1;;33705:28:0::1;::::0;;33752:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;33752:15:0;;;;;-1:-1:-1;;;;;;33752:15:0::1;::::0;;;;;33491:327:::1;33346:479:::0;:::o;33553:254::-:1;33533:3:::0;::::1;::::0;::::1;:::i;:::-;;;;33491:327;;;;33346:479:::0;:::o;30937:218::-;8133:10;31025:4;31074:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;31074:34:0;;;;;;;;;;31025:4;;31042:83;;31065:7;;31074:50;;31113:10;31074:38;:50::i;35884:185::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;36023:37:::1;::::0;-1:-1:-1;;;36023:37:0;;36054:4:::1;36023:37;::::0;::::1;4003:51:1::0;-1:-1:-1;;;;;35986:21:0;::::1;::::0;::::1;::::0;36008:13;;35986:21;;36023:22:::1;::::0;3976:18:1;;36023:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35986:75;::::0;-1:-1:-1;;;;;;35986:75:0::1;::::0;;;;;;-1:-1:-1;;;;;4257:32:1;;;35986:75:0::1;::::0;::::1;4239:51:1::0;4306:18;;;4299:34;4212:18;;35986:75:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35884:185:::0;;:::o;31801:377::-;8133:10;31853:14;31902:19;;;:11;:19;;;;;;;;31901:20;31893:77;;;;-1:-1:-1;;;31893:77:0;;12820:2:1;31893:77:0;;;12802:21:1;12859:2;12839:18;;;12832:30;12898:34;12878:18;;;12871:62;-1:-1:-1;;;12949:18:1;;;12942:42;13001:19;;31893:77:0;12792:234:1;31893:77:0;31982:15;32006:19;32017:7;32006:10;:19::i;:::-;-1:-1:-1;;;;;;;;;32054:15:0;;;;;;:7;:15;;;;;;31981:44;;-1:-1:-1;32054:28:0;;:15;-1:-1:-1;31981:44:0;32054:19;:28::i;:::-;-1:-1:-1;;;;;32036:15:0;;;;;;:7;:15;;;;;:46;32103:7;;:20;;32115:7;32103:11;:20::i;:::-;32093:7;:30;32147:10;;:23;;32162:7;32147:14;:23::i;:::-;32134:10;:36;-1:-1:-1;;;31801:377:0:o;34489:111::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34558:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34558:34:0::1;34588:4;34558:34;::::0;;34489:111::o;32186:436::-;32276:7;32315;;32304;:18;;32296:62;;;;-1:-1:-1;;;32296:62:0;;8880:2:1;32296:62:0;;;8862:21:1;8919:2;8899:18;;;8892:30;8958:33;8938:18;;;8931:61;9009:18;;32296:62:0;8852:181:1;32296:62:0;32374:17;32369:246;;32409:15;32433:19;32444:7;32433:10;:19::i;:::-;-1:-1:-1;32408:44:0;;-1:-1:-1;32467:14:0;;-1:-1:-1;;;;;32467:14:0;32369:246;32516:23;32547:19;32558:7;32547:10;:19::i;:::-;-1:-1:-1;32514:52:0;;-1:-1:-1;32581:22:0;;-1:-1:-1;;;;;32581:22:0;35676:196;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;35822:9:::1;::::0;35814:50:::1;::::0;-1:-1:-1;;;;;35822:9:0;;::::1;::::0;35842:21:::1;35814:50:::0;::::1;;;::::0;35822:9:::1;35814:50:::0;35822:9;35814:50;35842:21;35822:9;35814:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35676:196::o:0;32891:447::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33088:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33087:21;33079:61;;;::::0;-1:-1:-1;;;33079:61:0;;8168:2:1;33079:61:0::1;::::0;::::1;8150:21:1::0;8207:2;8187:18;;;8180:30;8246:29;8226:18;;;8219:57;8293:18;;33079:61:0::1;8140:177:1::0;33079:61:0::1;-1:-1:-1::0;;;;;33154:16:0;::::1;33173:1;33154:16:::0;;;:7:::1;:16;::::0;;;;;:20;33151:108:::1;;-1:-1:-1::0;;;;;33230:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;33210:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;33191:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;33151:108:::1;-1:-1:-1::0;;;;;33269:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;33269:27:0::1;33292:4;33269:27:::0;;::::1;::::0;;;33307:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;33307:23:0::1;::::0;;::::1;::::0;;32891:447::o;35284:96::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;35352:11:::1;:20:::0;35284:96::o;34730:118::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;34809:15:::1;:31:::0;;-1:-1:-1;;;;;;34809:31:0::1;-1:-1:-1::0;;;;;34809:31:0;;;::::1;::::0;;;::::1;::::0;;34730:118::o;29915:198::-;-1:-1:-1;;;;;30005:20:0;;29981:7;30005:20;;;:11;:20;;;;;;;;30001:49;;;-1:-1:-1;;;;;;30034:16:0;;;;;:7;:16;;;;;;;29915:198::o;30001:49::-;-1:-1:-1;;;;;30088:16:0;;;;;;:7;:16;;;;;;30068:37;;:19;:37::i;16271:148::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;16378:1:::1;16362:6:::0;;16341:40:::1;::::0;-1:-1:-1;;;;;16362:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16341:40:0;16378:1;;16341:40:::1;16409:1;16392:19:::0;;-1:-1:-1;;;;;;16392:19:0::1;::::0;;16271:148::o;36081:144::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;36172:45:::1;::::0;-1:-1:-1;;;;;36172:22:0;::::1;::::0;36195:21:::1;36172:45:::0;::::1;;;::::0;::::1;::::0;;;36195:21;36172:22;:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;34968:98:::0;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;35037:10:::1;:19:::0;34968:98::o;29626:87::-;29665:13;29698:7;29691:14;;;;;:::i;31163:269::-;31256:4;31273:129;8133:10;31296:7;31305:96;31344:15;31305:96;;;;;;;;;;;;;;;;;8133:10;31305:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;31305:34:0;;;;;;;;;;;;:38;:96::i;36616:78::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;36671:8:::1;:15:::0;;-1:-1:-1;;36671:15:0::1;;;::::0;;36616:78::o;17293:305::-;17345:14;;-1:-1:-1;;;;;17345:14:0;17363:10;17345:28;17337:76;;;;-1:-1:-1;;;17337:76:0;;13233:2:1;17337:76:0;;;13215:21:1;13272:2;13252:18;;;13245:30;13311:34;13291:18;;;13284:62;-1:-1:-1;;;13362:18:1;;;13355:33;13405:19;;17337:76:0;13205:225:1;17337:76:0;17450:9;;17432:15;:27;17424:72;;;;-1:-1:-1;;;17424:72:0;;12460:2:1;17424:72:0;;;12442:21:1;12499:2;12479:18;;;12472:30;12538:33;12518:18;;;12511:61;12589:18;;17424:72:0;12432:181:1;17424:72:0;17541:14;;;17533:6;;17512:44;;-1:-1:-1;;;;;17541:14:0;;;;17533:6;;;;-1:-1:-1;;;;;;;;;;;17512:44:0;;17576:14;;;17567:23;;-1:-1:-1;;;;;;17567:23:0;-1:-1:-1;;;;;17576:14:0;;;17567:23;;;;;;17293:305::o;30121:167::-;30199:4;30216:42;8133:10;30240:9;30251:6;30216:9;:42::i;35072:102::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;35139:16:::1;:25:::0;35072:102::o;36702:171::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;36779:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;36779:32:0;;::::1;;::::0;;36827:38:::1;::::0;::::1;::::0;::::1;::::0;36803:8;5121:14:1;5114:22;5096:41;;5084:2;5069:18;;5051:92;36827:38:0::1;;;;;;;;36702:171:::0;:::o;16991:226::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;17072:6:::1;::::0;;;17055:23;;-1:-1:-1;;;;;;17055:23:0;;::::1;-1:-1:-1::0;;;;;17072:6:0;::::1;17055:23;::::0;;;17089:19:::1;::::0;;17131:22:::1;17149:4:::0;17131:15:::1;:22;:::i;:::-;17119:9;:34:::0;17206:1:::1;17190:6:::0;;17169:40:::1;::::0;-1:-1:-1;;;;;17190:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17169:40:0;17206:1;;17169:40:::1;16991:226:::0;:::o;34612:110::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34679:27:0::1;34709:5;34679:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34679:35:0::1;::::0;;34612:110::o;35180:98::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;35248:11:::1;:20:::0;35180:98::o;16574:244::-;15840:6;;-1:-1:-1;;;;;15840:6:0;8133:10;15840:22;15832:67;;;;-1:-1:-1;;;15832:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16663:22:0;::::1;16655:73;;;::::0;-1:-1:-1;;;16655:73:0;;7002:2:1;16655:73:0::1;::::0;::::1;6984:21:1::0;7041:2;7021:18;;;7014:30;7080:34;7060:18;;;7053:62;-1:-1:-1;;;7131:18:1;;;7124:36;7177:19;;16655:73:0::1;6974:228:1::0;16655:73:0::1;16765:6;::::0;;16744:38:::1;::::0;-1:-1:-1;;;;;16744:38:0;;::::1;::::0;16765:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16744:38:0;::::1;16793:6;:17:::0;;-1:-1:-1;;;;;;16793:17:0::1;-1:-1:-1::0;;;;;16793:17:0;;;::::1;::::0;;;::::1;::::0;;16574:244::o;40317:337::-;-1:-1:-1;;;;;40410:19:0;;40402:68;;;;-1:-1:-1;;;40402:68:0;;12055:2:1;40402:68:0;;;12037:21:1;12094:2;12074:18;;;12067:30;12133:34;12113:18;;;12106:62;-1:-1:-1;;;12184:18:1;;;12177:34;12228:19;;40402:68:0;12027:226:1;40402:68:0;-1:-1:-1;;;;;40489:21:0;;40481:68;;;;-1:-1:-1;;;40481:68:0;;7409:2:1;40481:68:0;;;7391:21:1;7448:2;7428:18;;;7421:30;7487:34;7467:18;;;7460:62;-1:-1:-1;;;7538:18:1;;;7531:32;7580:19;;40481:68:0;7381:224:1;40481:68:0;-1:-1:-1;;;;;40562:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;40614:32;;13581:25:1;;;40614:32:0;;13554:18:1;40614:32:0;;;;;;;40317:337;;;:::o;40662:2400::-;-1:-1:-1;;;;;40784:18:0;;40776:68;;;;-1:-1:-1;;;40776:68:0;;11649:2:1;40776:68:0;;;11631:21:1;11688:2;11668:18;;;11661:30;11727:34;11707:18;;;11700:62;-1:-1:-1;;;11778:18:1;;;11771:35;11823:19;;40776:68:0;11621:227:1;40776:68:0;-1:-1:-1;;;;;40863:16:0;;40855:64;;;;-1:-1:-1;;;40855:64:0;;6187:2:1;40855:64:0;;;6169:21:1;6226:2;6206:18;;;6199:30;6265:34;6245:18;;;6238:62;-1:-1:-1;;;6316:18:1;;;6309:33;6359:19;;40855:64:0;6159:225:1;40855:64:0;40947:1;40938:6;:10;40930:64;;;;-1:-1:-1;;;40930:64:0;;10834:2:1;40930:64:0;;;10816:21:1;10873:2;10853:18;;;10846:30;10912:34;10892:18;;;10885:62;-1:-1:-1;;;10963:18:1;;;10956:39;11012:19;;40930:64:0;10806:231:1;40930:64:0;15666:7;15693:6;-1:-1:-1;;;;;41008:15:0;;;15693:6;;41008:15;;;;:32;;-1:-1:-1;15666:7:0;15693:6;-1:-1:-1;;;;;41027:13:0;;;15693:6;;41027:13;;41008:32;41005:125;;;41073:12;;41063:6;:22;;41055:75;;;;-1:-1:-1;;;41055:75:0;;9240:2:1;41055:75:0;;;9222:21:1;9279:2;9259:18;;;9252:30;9318:34;9298:18;;;9291:62;-1:-1:-1;;;9369:18:1;;;9362:38;9417:19;;41055:75:0;9212:230:1;41055:75:0;41160:13;-1:-1:-1;;;;;41154:19:0;:2;-1:-1:-1;;;;;41154:19:0;;41151:147;;41227:14;;41218:6;41202:13;41212:2;41202:9;:13::i;:::-;:22;;;;:::i;:::-;:39;41194:88;;;;-1:-1:-1;;;41194:88:0;;11244:2:1;41194:88:0;;;11226:21:1;11283:2;11263:18;;;11256:30;11322:34;11302:18;;;11295:62;-1:-1:-1;;;11373:18:1;;;11366:34;11417:19;;41194:88:0;11216:226:1;41194:88:0;41590:28;41621:24;41639:4;41621:9;:24::i;:::-;41590:55;;41693:12;;41669:20;:36;41666:112;;-1:-1:-1;41754:12:0;;41666:112;41849:29;;41825:53;;;;;;;41907;;-1:-1:-1;41944:16:0;;;;41943:17;41907:53;:91;;;;;41985:13;-1:-1:-1;;;;;41977:21:0;:4;-1:-1:-1;;;;;41977:21:0;;;41907:91;:129;;;;-1:-1:-1;42015:21:0;;;;;;;41907:129;41889:318;;;42086:29;;42063:52;;42159:36;42174:20;42159:14;:36::i;:::-;-1:-1:-1;;;;;42415:24:0;;42288:12;42415:24;;;:18;:24;;;;;;42303:4;;42415:24;;;:50;;-1:-1:-1;;;;;;42443:22:0;;;;;;:18;:22;;;;;;;;42415:50;42412:96;;;-1:-1:-1;42491:5:0;42412:96;42563:13;-1:-1:-1;;;;;42555:21:0;:4;-1:-1:-1;;;;;42555:21:0;;:55;;;;;42594:15;-1:-1:-1;;;;;42580:30:0;:2;-1:-1:-1;;;;;42580:30:0;;;42555:55;42552:166;;;42647:16;;42631:13;:32;42692:10;;42682:7;:20;42552:166;42778:13;-1:-1:-1;;;;;42772:19:0;:2;-1:-1:-1;;;;;42772:19:0;;:55;;;;;42811:15;-1:-1:-1;;;;;42795:32:0;:4;-1:-1:-1;;;;;42795:32:0;;;42772:55;42768:162;;;42864:11;;42848:13;:27;42903:11;;42894:7;:20;42768:162;43016:38;43031:4;43036:2;43039:6;43046:7;43016:14;:38::i;:::-;40765:2297;;;40662:2400;;;:::o;4384:192::-;4470:7;4506:12;4498:6;;;;4490:29;;;;-1:-1:-1;;;4490:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4530:9:0;4542:5;4546:1;4542;:5;:::i;:::-;4530:17;4384:192;-1:-1:-1;;;;;4384:192:0:o;38336:163::-;38377:7;38398:15;38415;38434:19;:17;:19::i;:::-;38397:56;;-1:-1:-1;38397:56:0;-1:-1:-1;38471:20:0;38397:56;;38471:11;:20::i;:::-;38464:27;;;;38336:163;:::o;5782:132::-;5840:7;5867:39;5871:1;5874;5867:39;;;;;;;;;;;;;;;;;:3;:39::i;3481:181::-;3539:7;;3571:5;3575:1;3571;:5;:::i;:::-;3559:17;;3600:1;3595;:6;;3587:46;;;;-1:-1:-1;;;3587:46:0;;7812:2:1;3587:46:0;;;7794:21:1;7851:2;7831:18;;;7824:30;7890:29;7870:18;;;7863:57;7937:18;;3587:46:0;7784:177:1;37134:419:0;37193:7;37202;37211;37220;37229;37238;37259:23;37284:12;37298:18;37320:20;37332:7;37320:11;:20::i;:::-;37258:82;;;;;;37352:15;37369:23;37394:12;37410:50;37422:7;37431:4;37437:10;37449;:8;:10::i;:::-;37410:11;:50::i;:::-;37351:109;;;;-1:-1:-1;37351:109:0;;-1:-1:-1;37511:15:0;;-1:-1:-1;37528:4:0;;-1:-1:-1;37534:10:0;;-1:-1:-1;37134:419:0;;-1:-1:-1;;;;;37134:419:0:o;3945:136::-;4003:7;4030:43;4034:1;4037;4030:43;;;;;;;;;;;;;;;;;:3;:43::i;43072:1382::-;27820:16;:23;;-1:-1:-1;;27820:23:0;27839:4;27820:23;;;:16;43264:34:::1;43296:1;43264:27;:20:::0;43289:1:::1;43264:24;:27::i;:::-;:31:::0;::::1;:34::i;:::-;43241:57:::0;-1:-1:-1;43309:16:0::1;43328:38;:20:::0;43241:57;43328:24:::1;:38::i;:::-;43309:57:::0;-1:-1:-1;43673:21:0::1;43743:30;43760:12:::0;43743:16:::1;:30::i;:::-;43835:18;43856:41;:21;43882:14:::0;43856:25:::1;:41::i;:::-;43835:62:::0;-1:-1:-1;43908:22:0::1;43933:24;43955:1;43933:17;43835:62:::0;43948:1:::1;43933:14;:17::i;:24::-;43976:15;::::0;43968:49:::1;::::0;43908;;-1:-1:-1;;;;;;43976:15:0::1;::::0;43968:49;::::1;;;::::0;43908;;43976:15:::1;43968:49:::0;43976:15;43968:49;43908;43976:15;43968:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;44022:26:0::1;44051:30;:10:::0;44066:14;44051::::1;:30::i;:::-;44022:59:::0;-1:-1:-1;44086:23:0::1;44112:32;44142:1;44112:25;44022:59:::0;44135:1:::1;44112:22;:25::i;:32::-;44157:15;::::0;44149:49:::1;::::0;44086:58;;-1:-1:-1;;;;;;44157:15:0::1;::::0;44149:49;::::1;;;::::0;44183:14;;44157:15:::1;44149:49:::0;44157:15;44149:49;44183:14;44157:15;44149:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;44203:23:0::1;44229:39;:18:::0;44252:15;44229:22:::1;:39::i;:::-;44203:65;;44330:39;44343:8;44353:15;44330:12;:39::i;:::-;44395:51;::::0;;14804:25:1;;;14860:2;14845:18;;14838:34;;;14888:18;;;14881:34;;;44395:51:0::1;::::0;14792:2:1;14777:18;44395:51:0::1;;;;;;;-1:-1:-1::0;;27866:16:0;:24;;-1:-1:-1;;27866:24:0;;;-1:-1:-1;;;;;;;43072:1382:0:o;45653:1114::-;45764:8;;;;;;;45760:114;;15666:7;15693:6;-1:-1:-1;;;;;45796:17:0;;;15693:6;;45796:17;45788:26;;;;;;-1:-1:-1;;;;;45897:18:0;;;;;;:10;:18;;;;;;;;;:43;;-1:-1:-1;;;;;;45919:21:0;;;;;;:10;:21;;;;;;;;45897:43;45894:126;;;45964:12;;;;45956:52;;;;-1:-1:-1;;;45956:52:0;;8524:2:1;45956:52:0;;;8506:21:1;8563:2;8543:18;;;8536:30;8602:29;8582:18;;;8575:57;8649:18;;45956:52:0;8496:177:1;45956:52:0;46044:7;46040:40;;46066:14;:12;:14::i;:::-;-1:-1:-1;;;;;46105:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;46129:22:0;;;;;;:11;:22;;;;;;;;46128:23;46105:46;46101:597;;;46168:48;46190:6;46198:9;46209:6;46168:21;:48::i;:::-;46101:597;;;-1:-1:-1;;;;;46239:19:0;;;;;;:11;:19;;;;;;;;46238:20;:46;;;;-1:-1:-1;;;;;;46262:22:0;;;;;;:11;:22;;;;;;;;46238:46;46234:464;;;46301:46;46321:6;46329:9;46340:6;46301:19;:46::i;46234:464::-;-1:-1:-1;;;;;46370:19:0;;;;;;:11;:19;;;;;;;;46369:20;:47;;;;-1:-1:-1;;;;;;46394:22:0;;;;;;:11;:22;;;;;;;;46393:23;46369:47;46365:333;;;46433:44;46451:6;46459:9;46470:6;46433:17;:44::i;46365:333::-;-1:-1:-1;;;;;46499:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;46522:22:0;;;;;;:11;:22;;;;;;;;46499:45;46495:203;;;46561:48;46583:6;46591:9;46602:6;46561:21;:48::i;46495:203::-;46642:44;46660:6;46668:9;46679:6;46642:17;:44::i;:::-;46722:7;46718:41;;46744:15;40103;;40093:7;:25;40145:21;;40129:13;:37;40049:125;46744:15;45653:1114;;;;:::o;38507:561::-;38604:7;;38640;;38557;;;;;38664:289;38688:9;:16;38684:20;;38664:289;;;38754:7;38730;:21;38738:9;38748:1;38738:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38738:12:0;38730:21;;;;;;;;;;;;;:31;;:66;;;38789:7;38765;:21;38773:9;38783:1;38773:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38773:12:0;38765:21;;;;;;;;;;;;;:31;38730:66;38726:97;;;38806:7;;38815;;38798:25;;;;;;;38507:561;;:::o;38726:97::-;38848:34;38860:7;:21;38868:9;38878:1;38868:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38868:12:0;38860:21;;;;;;;;;;;;;38848:7;;:11;:34::i;:::-;38838:44;;38907:34;38919:7;:21;38927:9;38937:1;38927:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38927:12:0;38919:21;;;;;;;;;;;;;38907:7;;:11;:34::i;:::-;38897:44;-1:-1:-1;38706:3:0;;;;:::i;:::-;;;;38664:289;;;-1:-1:-1;38989:7:0;;38977;;:20;;:11;:20::i;:::-;38967:7;:30;38963:61;;;39007:7;;39016;;38999:25;;;;;;38507:561;;:::o;38963:61::-;39043:7;;39052;;-1:-1:-1;38507:561:0;-1:-1:-1;38507:561:0:o;6410:278::-;6496:7;6531:12;6524:5;6516:28;;;;-1:-1:-1;;;6516:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6555:9:0;6567:5;6571:1;6567;:5;:::i;37561:330::-;37621:7;37630;37639;37659:12;37674:24;37690:7;37674:15;:24::i;:::-;37659:39;;37709:18;37730:30;37752:7;37730:21;:30::i;:::-;37709:51;-1:-1:-1;37771:23:0;37797:33;37709:51;37797:17;:7;37809:4;37797:11;:17::i;:::-;:21;;:33::i;:::-;37771:59;37866:4;;-1:-1:-1;37872:10:0;;-1:-1:-1;37561:330:0;;-1:-1:-1;;;37561:330:0:o;37899:429::-;38014:7;;;;38070:24;:7;38082:11;38070;:24::i;:::-;38052:42;-1:-1:-1;38105:12:0;38120:21;:4;38129:11;38120:8;:21::i;:::-;38105:36;-1:-1:-1;38152:18:0;38173:27;:10;38188:11;38173:14;:27::i;:::-;38152:48;-1:-1:-1;38211:23:0;38237:33;38152:48;38237:17;:7;38249:4;38237:11;:17::i;:33::-;38289:7;;;;-1:-1:-1;38315:4:0;;-1:-1:-1;37899:429:0;;-1:-1:-1;;;;;;;37899:429:0:o;4835:471::-;4893:7;5138:6;5134:47;;-1:-1:-1;5168:1:0;5161:8;;5134:47;5193:9;5205:5;5209:1;5205;:5;:::i;:::-;5193:17;-1:-1:-1;5238:1:0;5229:5;5233:1;5193:17;5229:5;:::i;:::-;:10;5221:56;;;;-1:-1:-1;;;5221:56:0;;10071:2:1;5221:56:0;;;10053:21:1;10110:2;10090:18;;;10083:30;10149:34;10129:18;;;10122:62;-1:-1:-1;;;10200:18:1;;;10193:31;10241:19;;5221:56:0;10043:223:1;44462:589:0;44612:16;;;44626:1;44612:16;;;;;;;;44588:21;;44612:16;;;;;;;;;;-1:-1:-1;44612:16:0;44588:40;;44657:4;44639;44644:1;44639:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;44639:23:0;;;-1:-1:-1;;;;;44639:23:0;;;;;44683:15;-1:-1:-1;;;;;44683:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44673:4;44678:1;44673:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;44673:32:0;;;-1:-1:-1;;;;;44673:32:0;;;;;44718:62;44735:4;44750:15;44768:11;44718:8;:62::i;:::-;44819:224;;-1:-1:-1;;;44819:224:0;;-1:-1:-1;;;;;44819:15:0;:66;;;;:224;;44900:11;;44926:1;;44970:4;;44997;;45017:15;;44819:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45059:513;45207:62;45224:4;45239:15;45257:11;45207:8;:62::i;:::-;45312:15;-1:-1:-1;;;;;45312:31:0;;45351:9;45384:4;45404:11;45430:1;45473;45516:7;15666;15693:6;-1:-1:-1;;;;;15693:6:0;;15628:79;45516:7;45312:252;;;;;;-1:-1:-1;;;;;;45312:252:0;;;-1:-1:-1;;;;;4703:15:1;;;45312:252:0;;;4685:34:1;4735:18;;;4728:34;;;;4778:18;;;4771:34;;;;4821:18;;;4814:34;4885:15;;;4864:19;;;4857:44;45538:15:0;4917:19:1;;;4910:35;4619:19;;45312:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45059:513;;:::o;39787:250::-;39833:7;;:12;:34;;;;-1:-1:-1;39849:13:0;;:18;39833:34;39830:46;;;39787:250::o;39830:46::-;39914:7;;;39896:15;:25;39956:13;;;39932:21;:37;-1:-1:-1;39990:11:0;;;;40012:17;39787:250::o;47879:566::-;47982:15;47999:23;48024:12;48038:23;48063:12;48077:18;48099:19;48110:7;48099:10;:19::i;:::-;-1:-1:-1;;;;;48147:15:0;;;;;;:7;:15;;;;;;47981:137;;-1:-1:-1;47981:137:0;;-1:-1:-1;47981:137:0;;-1:-1:-1;47981:137:0;-1:-1:-1;47981:137:0;-1:-1:-1;47981:137:0;-1:-1:-1;48147:28:0;;48167:7;48147:19;:28::i;:::-;-1:-1:-1;;;;;48129:15:0;;;;;;:7;:15;;;;;;;;:46;;;;48204:7;:15;;;;:28;;48224:7;48204:19;:28::i;:::-;-1:-1:-1;;;;;48186:15:0;;;;;;;:7;:15;;;;;;:46;;;;48264:18;;;;;;;:39;;48287:15;48264:22;:39::i;:::-;-1:-1:-1;;;;;48243:18:0;;;;;;:7;:18;;;;;:60;48317:26;48332:10;48317:14;:26::i;:::-;48354:23;48366:4;48372;48354:11;:23::i;:::-;48410:9;-1:-1:-1;;;;;48393:44:0;48402:6;-1:-1:-1;;;;;48393:44:0;;48421:15;48393:44;;;;13581:25:1;;13569:2;13554:18;;13536:76;48393:44:0;;;;;;;;47970:475;;;;;;47879:566;;;:::o;47285:586::-;47386:15;47403:23;47428:12;47442:23;47467:12;47481:18;47503:19;47514:7;47503:10;:19::i;:::-;-1:-1:-1;;;;;47551:15:0;;;;;;:7;:15;;;;;;47385:137;;-1:-1:-1;47385:137:0;;-1:-1:-1;47385:137:0;;-1:-1:-1;47385:137:0;-1:-1:-1;47385:137:0;-1:-1:-1;47385:137:0;-1:-1:-1;47551:28:0;;47385:137;47551:19;:28::i;:::-;-1:-1:-1;;;;;47533:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;47611:18;;;;;:7;:18;;;;;:39;;47634:15;47611:22;:39::i;:::-;-1:-1:-1;;;;;47590:18:0;;;;;;:7;:18;;;;;;;;:60;;;;47682:7;:18;;;;:39;;47705:15;47682:22;:39::i;46775:502::-;46874:15;46891:23;46916:12;46930:23;46955:12;46969:18;46991:19;47002:7;46991:10;:19::i;:::-;-1:-1:-1;;;;;47039:15:0;;;;;;:7;:15;;;;;;46873:137;;-1:-1:-1;46873:137:0;;-1:-1:-1;46873:137:0;;-1:-1:-1;46873:137:0;-1:-1:-1;46873:137:0;-1:-1:-1;46873:137:0;-1:-1:-1;47039:28:0;;46873:137;47039:19;:28::i;33835:642::-;33938:15;33955:23;33980:12;33994:23;34019:12;34033:18;34055:19;34066:7;34055:10;:19::i;:::-;-1:-1:-1;;;;;34103:15:0;;;;;;:7;:15;;;;;;33937:137;;-1:-1:-1;33937:137:0;;-1:-1:-1;33937:137:0;;-1:-1:-1;33937:137:0;-1:-1:-1;33937:137:0;-1:-1:-1;33937:137:0;-1:-1:-1;34103:28:0;;34123:7;34103:19;:28::i;:::-;-1:-1:-1;;;;;34085:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34160:7;:15;;;;:28;;34180:7;34160:19;:28::i;39447:154::-;39511:7;39538:55;39577:5;39538:20;39550:7;;39538;:11;;:20;;;;:::i;:::-;:24;;:55::i;39609:166::-;39679:7;39706:61;39751:5;39706:26;39718:13;;39706:7;:11;;:26;;;;:::i;39080:355::-;39143:19;39166:10;:8;:10::i;:::-;39143:33;-1:-1:-1;39187:18:0;39208:27;:10;39143:33;39208:14;:27::i;:::-;39287:4;39271:22;;;;:7;:22;;;;;;39187:48;;-1:-1:-1;39271:38:0;;39187:48;39271:26;:38::i;:::-;39262:4;39246:22;;;;:7;:22;;;;;;;;:63;;;;39323:11;:26;;;;;;39320:107;;;39405:4;39389:22;;;;:7;:22;;;;;;:38;;39416:10;39389:26;:38::i;:::-;39380:4;39364:22;;;;:7;:22;;;;;:63;39132:303;;39080:355;:::o;36979:147::-;37057:7;;:17;;37069:4;37057:11;:17::i;:::-;37047:7;:27;37098:10;;:20;;37113:4;37098:14;:20::i;:::-;37085:10;:33;-1:-1:-1;;36979:147:0:o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;142:1;139;132:12;94:2;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:2;;;405:1;402;395:12;357:2;437:9;431:16;456:31;481:5;456:31;:::i;782:388::-;850:6;858;911:2;899:9;890:7;886:23;882:32;879:2;;;927:1;924;917:12;879:2;966:9;953:23;985:31;1010:5;985:31;:::i;:::-;1035:5;-1:-1:-1;1092:2:1;1077:18;;1064:32;1105:33;1064:32;1105:33;:::i;:::-;1157:7;1147:17;;;869:301;;;;;:::o;1175:456::-;1252:6;1260;1268;1321:2;1309:9;1300:7;1296:23;1292:32;1289:2;;;1337:1;1334;1327:12;1289:2;1376:9;1363:23;1395:31;1420:5;1395:31;:::i;:::-;1445:5;-1:-1:-1;1502:2:1;1487:18;;1474:32;1515:33;1474:32;1515:33;:::i;:::-;1279:352;;1567:7;;-1:-1:-1;;;1621:2:1;1606:18;;;;1593:32;;1279:352::o;1636:315::-;1704:6;1712;1765:2;1753:9;1744:7;1740:23;1736:32;1733:2;;;1781:1;1778;1771:12;1733:2;1820:9;1807:23;1839:31;1864:5;1839:31;:::i;:::-;1889:5;1941:2;1926:18;;;;1913:32;;-1:-1:-1;;;1723:228:1:o;1956:241::-;2012:6;2065:2;2053:9;2044:7;2040:23;2036:32;2033:2;;;2081:1;2078;2071:12;2033:2;2120:9;2107:23;2139:28;2161:5;2139:28;:::i;2202:245::-;2269:6;2322:2;2310:9;2301:7;2297:23;2293:32;2290:2;;;2338:1;2335;2328:12;2290:2;2370:9;2364:16;2389:28;2411:5;2389:28;:::i;2858:180::-;2917:6;2970:2;2958:9;2949:7;2945:23;2941:32;2938:2;;;2986:1;2983;2976:12;2938:2;-1:-1:-1;3009:23:1;;2928:110;-1:-1:-1;2928:110:1:o;3043:184::-;3113:6;3166:2;3154:9;3145:7;3141:23;3137:32;3134:2;;;3182:1;3179;3172:12;3134:2;-1:-1:-1;3205:16:1;;3124:103;-1:-1:-1;3124:103:1:o;3232:309::-;3297:6;3305;3358:2;3346:9;3337:7;3333:23;3329:32;3326:2;;;3374:1;3371;3364:12;3326:2;3410:9;3397:23;3387:33;;3470:2;3459:9;3455:18;3442:32;3483:28;3505:5;3483:28;:::i;3546:306::-;3634:6;3642;3650;3703:2;3691:9;3682:7;3678:23;3674:32;3671:2;;;3719:1;3716;3709:12;3671:2;3748:9;3742:16;3732:26;;3798:2;3787:9;3783:18;3777:25;3767:35;;3842:2;3831:9;3827:18;3821:25;3811:35;;3661:191;;;;;:::o;5383:597::-;5495:4;5524:2;5553;5542:9;5535:21;5585:6;5579:13;5628:6;5623:2;5612:9;5608:18;5601:34;5653:1;5663:140;5677:6;5674:1;5671:13;5663:140;;;5772:14;;;5768:23;;5762:30;5738:17;;;5757:2;5734:26;5727:66;5692:10;;5663:140;;;5821:6;5818:1;5815:13;5812:2;;;5891:1;5886:2;5877:6;5866:9;5862:22;5858:31;5851:42;5812:2;-1:-1:-1;5964:2:1;5943:15;-1:-1:-1;;5939:29:1;5924:45;;;;5971:2;5920:54;;5504:476;-1:-1:-1;;;5504:476:1:o;10271:356::-;10473:2;10455:21;;;10492:18;;;10485:30;10551:34;10546:2;10531:18;;10524:62;10618:2;10603:18;;10445:182::o;13617:980::-;13879:4;13927:3;13916:9;13912:19;13958:6;13947:9;13940:25;13984:2;14022:6;14017:2;14006:9;14002:18;13995:34;14065:3;14060:2;14049:9;14045:18;14038:31;14089:6;14124;14118:13;14155:6;14147;14140:22;14193:3;14182:9;14178:19;14171:26;;14232:2;14224:6;14220:15;14206:29;;14253:1;14263:195;14277:6;14274:1;14271:13;14263:195;;;14342:13;;-1:-1:-1;;;;;14338:39:1;14326:52;;14433:15;;;;14398:12;;;;14374:1;14292:9;14263:195;;;-1:-1:-1;;;;;;;14514:32:1;;;;14509:2;14494:18;;14487:60;-1:-1:-1;;;14578:3:1;14563:19;14556:35;14475:3;13888:709;-1:-1:-1;;;13888:709:1:o;15115:128::-;15155:3;15186:1;15182:6;15179:1;15176:13;15173:2;;;15192:18;;:::i;:::-;-1:-1:-1;15228:9:1;;15163:80::o;15248:217::-;15288:1;15314;15304:2;;15358:10;15353:3;15349:20;15346:1;15339:31;15393:4;15390:1;15383:15;15421:4;15418:1;15411:15;15304:2;-1:-1:-1;15450:9:1;;15294:171::o;15470:168::-;15510:7;15576:1;15572;15568:6;15564:14;15561:1;15558:21;15553:1;15546:9;15539:17;15535:45;15532:2;;;15583:18;;:::i;:::-;-1:-1:-1;15623:9:1;;15522:116::o;15643:125::-;15683:4;15711:1;15708;15705:8;15702:2;;;15716:18;;:::i;:::-;-1:-1:-1;15753:9:1;;15692:76::o;15773:380::-;15852:1;15848:12;;;;15895;;;15916:2;;15970:4;15962:6;15958:17;15948:27;;15916:2;16023;16015:6;16012:14;15992:18;15989:38;15986:2;;;16069:10;16064:3;16060:20;16057:1;16050:31;16104:4;16101:1;16094:15;16132:4;16129:1;16122:15;15986:2;;15828:325;;;:::o;16158:135::-;16197:3;-1:-1:-1;;16218:17:1;;16215:2;;;16238:18;;:::i;:::-;-1:-1:-1;16285:1:1;16274:13;;16205:88::o;16298:127::-;16359:10;16354:3;16350:20;16347:1;16340:31;16390:4;16387:1;16380:15;16414:4;16411:1;16404:15;16430:127;16491:10;16486:3;16482:20;16479:1;16472:31;16522:4;16519:1;16512:15;16546:4;16543:1;16536:15;16562:127;16623:10;16618:3;16614:20;16611:1;16604:31;16654:4;16651:1;16644:15;16678:4;16675:1;16668:15;16826:131;-1:-1:-1;;;;;16901:31:1;;16891:42;;16881:2;;16947:1;16944;16937:12;16962:118;17048:5;17041:13;17034:21;17027:5;17024:32;17014:2;;17070:1;17067;17060:12

Swarm Source

ipfs://658fe4e757e61e758e04c364f77c08610ba7deeadd09c59ee98ead58acf29c8b
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.