ETH Price: $2,450.00 (+1.52%)
 

Overview

Max Total Supply

1,000,000,000,000 HIPPO

Holders

23

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 11 Decimals)

Balance
33,187,546,208.74842527621 HIPPO

Value
$0.00
0x61969cc58d2cc52ba31826ac3771c3ae632d9dac
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:
HIPPOGAMING

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.7;

// SPDX-License-Identifier: UNLICENSED

interface IBEP20 {
  function totalSupply() external view returns (uint256);   
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}


interface IPancakeERC20 {
    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;
}

interface IPancakeFactory {
    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 IPancakeRouter01 {
    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 factory() external pure returns (address);
    function WETH() external pure returns (address);
    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 IPancakeRouter02 is IPancakeRouter01 {
    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;
}


abstract contract Ownable {
    address private _owner;

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

    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }


    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


library Address {

    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // 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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

contract HIPPOGAMING is IBEP20, Ownable
{
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;
    
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private _sellLock;

    EnumerableSet.AddressSet private _excluded;
    EnumerableSet.AddressSet private _excludedFromStaking;

    string private constant _name = "Hippo Gaming";
    string private constant _symbol = "HIPPO";
    uint8 private constant _decimals = 11;
    uint256 public constant InitialSupply=  1000000000000 * 10**_decimals;


    uint256 private constant DefaultLiquidityLockTime= 0;
    
    address public constant TeamWallet=0xd9F0cd1cC9cDD9b243458143bB1b2b0AdEA9B584;
    address public constant Wallet1=0xd7eC668b1c4010ED9b4886383A7275A9BF33F3e5;
    address public constant Wallet2=0x775967eB2aDd5Ac1e9c200ce4100ca88843cd07B;
    address public constant Wallet3=0xA5797c361420A073b05Dd46a18B129FF8c53585E;
    address public constant Wallet4=0x61969Cc58d2Cc52ba31826ac3771c3ae632d9dAc;
    address private constant PancakeRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;


    uint256 private _circulatingSupply =InitialSupply;
    uint256 public  balanceLimit = 900000000000 * 10**_decimals;
    uint256 public  sellLimit = 10000000 * 10**_decimals;
    uint256 public  buyLimit = 900000000000 * 10**_decimals;
    

    uint8 private _buyTax;
    uint8 private _sellTax;
    uint8 private _transferTax;

    uint8 private _burnTax;
    uint8 private _liquidityTax;
    uint8 private _stakingTax;
    uint8 private _marketingTax;

       
    address private _pancakePairAddress; 
    IPancakeRouter02 private  _pancakeRouter;
    

    constructor () {
        uint256 deployerBalance=_circulatingSupply;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);

        _pancakeRouter = IPancakeRouter02(PancakeRouter);
        _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this), _pancakeRouter.WETH());


        _buyTax=6;
        _sellTax=8;
        
        _transferTax=50;

        _burnTax=0;
        _liquidityTax=8;
        _stakingTax=0;
        _marketingTax=0;


        _excluded.add(TeamWallet);
        _excluded.add(Wallet1);
        _excluded.add(Wallet2);
        _excluded.add(Wallet3);
        _excluded.add(Wallet4);
        _excluded.add(msg.sender);
    }
    
    function changeTax(uint8 buyTax, uint8 sellTax) public onlyOwner{
        _buyTax=buyTax;
        _sellTax=sellTax;
    }


    function _transfer(address sender, address recipient, uint256 amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");
        

        bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient));
        
        bool isContractTransfer=(sender==address(this) || recipient==address(this));

        address pancakeRouter=address(_pancakeRouter);
        bool isLiquidityTransfer = ((sender == _pancakePairAddress && recipient == pancakeRouter) 
        || (recipient == _pancakePairAddress && sender == pancakeRouter));

        bool isBuy=sender==_pancakePairAddress|| sender == pancakeRouter;
        bool isSell=recipient==_pancakePairAddress|| recipient == pancakeRouter;

        if(isContractTransfer || isLiquidityTransfer || isExcluded){
            _feelessTransfer(sender, recipient, amount);
        }
        else{ 
            require(tradingEnabled,"trading not yet enabled");
            _taxedTransfer(sender,recipient,amount,isBuy,isSell);
        }
    }

    function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{
        uint256 recipientBalance = _balances[recipient];
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");

        uint8 tax;
        if(isSell){
            require(amount<=sellLimit,"Dump protection");
            tax=_sellTax;

        } else if(isBuy){
            require(amount<=buyLimit,"Buy LIMIT");
            require(recipientBalance+amount<=balanceLimit,"whale protection");
            tax=_buyTax;

        } else {
            require(recipientBalance+amount<=balanceLimit,"whale protection");
            tax=_transferTax;

        }     

        if((sender!=_pancakePairAddress)&&(!manualConversion)&&(!_isSwappingContractModifier)&&isSell)
            _swapContractToken();
        uint256 tokensToBeBurnt=_calculateFee(amount, tax, _burnTax);
        uint256 contractToken=_calculateFee(amount, tax, _stakingTax+_liquidityTax);
        uint256 taxedAmount=amount-(tokensToBeBurnt + contractToken);

        _removeToken(sender,amount);
        
        _balances[address(this)] += contractToken;
        _circulatingSupply-=tokensToBeBurnt;

        _addToken(recipient, taxedAmount);
        
        emit Transfer(sender,recipient,taxedAmount);

    }

    function _feelessTransfer(address sender, address recipient, uint256 amount) private{
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        _removeToken(sender,amount);
        _addToken(recipient, amount);
        
        emit Transfer(sender,recipient,amount);

    }
  
    function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) {
        return (amount*tax*taxPercent) / 10000;
    }


    function _addToken(address addr, uint256 amount) private {
        uint256 newAmount=_balances[addr]+amount;
        _balances[addr]=newAmount;
    }
    

    function _removeToken(address addr, uint256 amount) private {
        uint256 newAmount=_balances[addr]-amount;
        _balances[addr]=newAmount;
    }
    

    uint256 public totalLPBNB;
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    function _swapContractToken() private lockTheSwap{
        uint256 contractBalance=_balances[address(this)];
        uint16 totalTax=_liquidityTax+_stakingTax;
        uint256 tokenToSwap=sellLimit / 5;

        if(contractBalance<tokenToSwap||totalTax==0){
            return;
        }

        uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax;
        uint256 tokenForMarketing= tokenToSwap-tokenForLiquidity;


        uint256 liqToken=tokenForLiquidity/2;
        uint256 liqBNBToken=tokenForLiquidity-liqToken;

        uint256 swapToken=liqBNBToken+tokenForMarketing;
        uint256 initialBNBBalance = address(this).balance;
        _swapTokenForBNB(swapToken);
        uint256 newBNB=(address(this).balance - initialBNBBalance);
        uint256 liqBNB = (newBNB*liqBNBToken)/swapToken;
        _addLiquidity(liqToken, liqBNB);
        uint256 distributeBNB=(address(this).balance - initialBNBBalance);
        (bool tmpSuccess,) = payable(TeamWallet).call{value: distributeBNB, gas: 30000}("");
        tmpSuccess = false;
    }

    function _swapTokenForBNB(uint256 amount) private {
        _approve(address(this), address(_pancakeRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _pancakeRouter.WETH();

        _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

   function _addLiquidity(uint256 tokenamount, uint256 bnbamount) private {
        totalLPBNB+=bnbamount;
        _approve(address(this), address(_pancakeRouter), tokenamount);
        _pancakeRouter.addLiquidityETH{value: bnbamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }


    function getLiquidityReleaseTimeInSeconds() public view returns (uint256){
        if(block.timestamp<_liquidityUnlockTime){
            return _liquidityUnlockTime-block.timestamp;
        }
        return 0;
    }

    function getBurnedTokens() public view returns(uint256){
        return (InitialSupply-_circulatingSupply)/10**_decimals;
    }

    function getLimits() public view returns(uint256 balance, uint256 sell){
        return(balanceLimit/10**_decimals, sellLimit/10**_decimals);
    }

    function getTaxes() public view returns(uint256 burnTax,uint256 liquidityTax,uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){
        return (_burnTax,_liquidityTax,_stakingTax,_buyTax,_sellTax,_transferTax);
    }


    function getAddressSellLockTimeInSeconds(address AddressToCheck) public view returns (uint256){
       uint256 lockTime=_sellLock[AddressToCheck];
       if(lockTime<=block.timestamp)
       {
           return 0;
       }
       return lockTime-block.timestamp;
    }
    function getSellLockTimeInSeconds() public view returns(uint256){
        return sellLockTime;
    }
    

    function AddressResetSellLock() public{
        _sellLock[msg.sender]=block.timestamp+sellLockTime;
    }


    bool public sellLockDisabled;
    bool public sellLockEnabled;
    uint256 public sellLockTime;
    bool public manualConversion; 


    function TeamSwitchManualBNBConversion(bool manual) public onlyOwner{
        manualConversion=manual;
    }


    function TeamDisableSellLock(bool disabled) public onlyOwner{
        sellLockDisabled=disabled;
    }

    function TeamEnableSellLock(bool enabled) public onlyOwner{
        sellLockEnabled=enabled;
    }

    function TeamSetTaxes(uint8 burnTaxes, uint8 liquidityTaxes, uint8 stakingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public onlyOwner{
        uint8 totalTax=burnTaxes+liquidityTaxes+stakingTaxes;
        require(totalTax==100, "burn+liq+marketing needs to equal 100%");

        _burnTax=burnTaxes;
        _liquidityTax=liquidityTaxes;
        _stakingTax=stakingTaxes;
        
        _buyTax=buyTax;
        _sellTax=sellTax;
        _transferTax=transferTax;
    }


    function TeamCreateLPandBNB() public onlyOwner{
    _swapContractToken();
    }
    

    function TeamUpdateLimits(uint256 newBalanceLimit, uint256 newSellLimit, uint256 newBuyLimit) public onlyOwner{
        newBalanceLimit=newBalanceLimit*10**_decimals;
        newSellLimit=newSellLimit*10**_decimals;
        newBuyLimit=newBuyLimit*10**_decimals;

        balanceLimit = newBalanceLimit;
        sellLimit = newSellLimit; 
        buyLimit = newBuyLimit;
    }

    

    bool public tradingEnabled;
    address private _liquidityTokenAddress;

    function SetupEnableTrading() public onlyOwner{
        tradingEnabled=true;
    }

    function SetupDisableTrading() public onlyOwner{
        tradingEnabled=false;
    }

    function SetupLiquidityTokenAddress(address liquidityTokenAddress) public onlyOwner{
        _liquidityTokenAddress=liquidityTokenAddress;
    }


    uint256 private _liquidityUnlockTime;



    function burnLiq() public onlyOwner{
        IPancakeERC20 liquidityToken = IPancakeERC20(_liquidityTokenAddress);
        uint256 amount = liquidityToken.balanceOf(address(this));

        liquidityToken.approve(address(_pancakeRouter),amount);
        _pancakeRouter.removeLiquidityETHSupportingFeeOnTransferTokens(
            address(this),
            amount,
            0,
            0,
            address(this),
            block.timestamp
            );


    }

    function sendBNB() public onlyOwner{
        (bool sent,) =TeamWallet.call{value: (address(this).balance)}("");
        require(sent);
    }

    receive() external payable {}
    fallback() external payable {}

    function getOwner() external view override returns (address) {
        return owner();
    }

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

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

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

    function totalSupply() external view override returns (uint256) {
        return _circulatingSupply;
    }

    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

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

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

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }
    

}

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"AddressResetSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SetupDisableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"SetupLiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamCreateLPandBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"TeamDisableSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"TeamEnableSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"burnTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"stakingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"TeamSetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"TeamSwitchManualBNBConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"},{"internalType":"uint256","name":"newBuyLimit","type":"uint256"}],"name":"TeamUpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Wallet1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Wallet2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Wallet3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Wallet4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"}],"name":"changeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"getAddressSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReleaseTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"burnTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","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":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalLPBNB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"stateMutability":"payable","type":"receive"}]

608060405262000012600b600a62000590565b620000239064e8d4a51000620005a1565b60085562000034600b600a62000590565b620000459064d18c2e2800620005a1565b60095562000056600b600a62000590565b620000659062989680620005a1565b600a55600b600a62000078919062000590565b620000899064d18c2e2800620005a1565b600b553480156200009957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600854336000818152600160209081526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000187573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ad9190620005c3565b6001600160a01b031663c9c6539630600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000210573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002369190620005c3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000284573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002aa9190620005c3565b600c805466ffffffffffff001960ff196001600160a01b0394909416670100000000000000029390931666ffffffffffff01600160d81b0319909116176006179190911664080032080017905562000327600473d9f0cd1cc9cdd9b243458143bb1b2b0adea9b5846200139a6200040b602090811b91909117901c565b506200035773d7ec668b1c4010ed9b4886383a7275a9bf33f3e560046200040b60201b6200139a1790919060201c565b506200038773775967eb2add5ac1e9c200ce4100ca88843cd07b60046200040b60201b6200139a1790919060201c565b50620003b773a5797c361420a073b05dd46a18b129ff8c53585e60046200040b60201b6200139a1790919060201c565b50620003e77361969cc58d2cc52ba31826ac3771c3ae632d9dac60046200040b60201b6200139a1790919060201c565b50620004033360046200040b60201b6200139a1790919060201c565b5050620005f5565b600062000422836001600160a01b0384166200042b565b90505b92915050565b6000818152600183016020526040812054620004745750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000425565b50600062000425565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004d4578160001904821115620004b857620004b86200047d565b80851615620004c657918102915b93841c939080029062000498565b509250929050565b600082620004ed5750600162000425565b81620004fc5750600062000425565b8160018114620005155760028114620005205762000540565b600191505062000425565b60ff8411156200053457620005346200047d565b50506001821b62000425565b5060208310610133831016604e8410600b841016171562000565575081810a62000425565b62000571838362000493565b80600019048211156200058857620005886200047d565b029392505050565b60006200042260ff841683620004dc565b6000816000190483118215151615620005be57620005be6200047d565b500290565b600060208284031215620005d657600080fd5b81516001600160a01b0381168114620005ee57600080fd5b9392505050565b61254480620006056000396000f3fe6080604052600436106102965760003560e01c8063715018a6116101665780638da5cb5b116100d3578063b7f723dd1161008f578063dd62ed3e1161006c578063dd62ed3e14610864578063f2fde38b146108aa578063f88b0e46146108ca578063ffcfadde146108e057005b8063b7f723dd1461081a578063c3a3c0321461083a578063c3f4f54f1461084f57005b80638da5cb5b146106b357806395d89b411461075c5780639c561a421461078a578063a457c2d7146107b2578063a9059cbb146107d2578063aaf13d10146107f257005b8063893d20e811610122578063893d20e8146106b357806389eb4a91146106d15780638af8c38d146106f15780638bfa3151146107065780638d060d77146107265780638d2c50391461073c57005b8063715018a61461061a578063762bb2821461062f5780637b9e987a1461064557806386d0ada81461065a5780638728ecd114610674578063887c60fb1461069457005b806339509351116102045780634f91e48c116101c05780634f91e48c1461054657806357ad67d11461055c578063589210d91461057c578063677a8870146105925780636f89e409146105ba57806370a08231146105e457005b8063395093511461049d57806339bf3648146104bd5780633c85ca3c146104dd57806348e53164146104f25780634ada218b146105075780634cdaf0ae1461052657005b806318eeef801161025357806318eeef80146103a65780631dffb940146103ce5780631eb25d13146103e357806323b872dd146103f85780632973ef2d14610418578063313ce5671461048157005b8062f54f0a1461029f57806306fdde03146102e4578063095ea7b3146103225780631285073c1461035257806314e913771461037157806318160ddd1461039157005b3661029d57005b005b3480156102ab57600080fd5b506102c773775967eb2add5ac1e9c200ce4100ca88843cd07b81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102f057600080fd5b5060408051808201909152600c81526b486970706f2047616d696e6760a01b60208201525b6040516102db9190611fb7565b34801561032e57600080fd5b5061034261033d366004612021565b6108f5565b60405190151581526020016102db565b34801561035e57600080fd5b506010545b6040519081526020016102db565b34801561037d57600080fd5b5061029d61038c36600461205b565b61090c565b34801561039d57600080fd5b50600854610363565b3480156103b257600080fd5b506102c773d7ec668b1c4010ed9b4886383a7275a9bf33f3e581565b3480156103da57600080fd5b5061029d610968565b3480156103ef57600080fd5b506103636109ae565b34801561040457600080fd5b50610342610413366004612078565b6109cc565b34801561042457600080fd5b50600c546040805160ff6301000000840481168252640100000000840481166020830152600160281b84048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c0016102db565b34801561048d57600080fd5b50604051600b81526020016102db565b3480156104a957600080fd5b506103426104b8366004612021565b610a63565b3480156104c957600080fd5b50600f546103429062010000900460ff1681565b3480156104e957600080fd5b5061029d610a9a565b3480156104fe57600080fd5b5061029d610b3f565b34801561051357600080fd5b5060115461034290610100900460ff1681565b34801561053257600080fd5b5061029d6105413660046120b9565b610b5e565b34801561055257600080fd5b50610363600a5481565b34801561056857600080fd5b5061029d6105773660046120ec565b610bc1565b34801561058857600080fd5b50610363600b5481565b34801561059e57600080fd5b506102c773d9f0cd1cc9cdd9b243458143bb1b2b0adea9b58481565b3480156105c657600080fd5b506105cf610cf4565b604080519283526020830191909152016102db565b3480156105f057600080fd5b506103636105ff3660046120b9565b6001600160a01b031660009081526001602052604090205490565b34801561062657600080fd5b5061029d610d31565b34801561063b57600080fd5b5061036360095481565b34801561065157600080fd5b5061029d610db4565b34801561066657600080fd5b506011546103429060ff1681565b34801561068057600080fd5b5061036361068f3660046120b9565b610dfe565b3480156106a057600080fd5b50600f5461034290610100900460ff1681565b3480156106bf57600080fd5b506000546001600160a01b03166102c7565b3480156106dd57600080fd5b5061029d6106ec366004612160565b610e3d565b3480156106fd57600080fd5b5061029d610e9a565b34801561071257600080fd5b5061029d610721366004612193565b611046565b34801561073257600080fd5b50610363600e5481565b34801561074857600080fd5b5061029d61075736600461205b565b6110d4565b34801561076857600080fd5b50604080518082019091526005815264484950504f60d81b6020820152610315565b34801561079657600080fd5b506102c77361969cc58d2cc52ba31826ac3771c3ae632d9dac81565b3480156107be57600080fd5b506103426107cd366004612021565b611120565b3480156107de57600080fd5b506103426107ed366004612021565b61119c565b3480156107fe57600080fd5b506102c773a5797c361420a073b05dd46a18b129ff8c53585e81565b34801561082657600080fd5b5061029d61083536600461205b565b6111a9565b34801561084657600080fd5b506103636111fe565b34801561085b57600080fd5b5061036361121e565b34801561087057600080fd5b5061036361087f3660046121bf565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108b657600080fd5b5061029d6108c53660046120b9565b61125e565b3480156108d657600080fd5b5061036360105481565b3480156108ec57600080fd5b5061029d611357565b60006109023384846113af565b5060015b92915050565b3361091f6000546001600160a01b031690565b6001600160a01b03161461094e5760405162461bcd60e51b8152600401610945906121f8565b60405180910390fd5b600f80549115156101000261ff0019909216919091179055565b3361097b6000546001600160a01b031690565b6001600160a01b0316146109a15760405162461bcd60e51b8152600401610945906121f8565b6011805461ff0019169055565b6109ba600b600a612327565b6109c99064e8d4a51000612336565b81565b60006109d98484846114a2565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610a445760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610945565b610a588533610a538685612355565b6113af565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610902918590610a5390869061236c565b33610aad6000546001600160a01b031690565b6001600160a01b031614610ad35760405162461bcd60e51b8152600401610945906121f8565b60405160009073d9f0cd1cc9cdd9b243458143bb1b2b0adea9b5849047908381818185875af1925050503d8060008114610b29576040519150601f19603f3d011682016040523d82523d6000602084013e610b2e565b606091505b5050905080610b3c57600080fd5b50565b601054610b4c904261236c565b33600090815260036020526040902055565b33610b716000546001600160a01b031690565b6001600160a01b031614610b975760405162461bcd60e51b8152600401610945906121f8565b601180546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b33610bd46000546001600160a01b031690565b6001600160a01b031614610bfa5760405162461bcd60e51b8152600401610945906121f8565b600084610c078789612384565b610c119190612384565b90508060ff16606414610c755760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610945565b50600c805460ff928316620100000262ff0000199484166101000261ffff19978516600160281b029790971665ff000000ffff199885166401000000000264ff00000000199a86166301000000029a909a1664ffff00000019909316929092179890981796909616959095179216919091179190911716919091179055565b600080610d03600b600a612327565b600954610d1091906123a9565b610d1c600b600a612327565b600a54610d2991906123a9565b915091509091565b33610d446000546001600160a01b031690565b6001600160a01b031614610d6a5760405162461bcd60e51b8152600401610945906121f8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b33610dc76000546001600160a01b031690565b6001600160a01b031614610ded5760405162461bcd60e51b8152600401610945906121f8565b6011805461ff001916610100179055565b6001600160a01b038116600090815260036020526040812054428111610e275750600092915050565b610e314282612355565b9392505050565b905090565b33610e506000546001600160a01b031690565b6001600160a01b031614610e765760405162461bcd60e51b8152600401610945906121f8565b600c805460ff9283166101000261ffff199091169290931691909117919091179055565b33610ead6000546001600160a01b031690565b6001600160a01b031614610ed35760405162461bcd60e51b8152600401610945906121f8565b6011546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a0823190602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4991906123cb565b600d5460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b3906044016020604051808303816000875af1158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc291906123e4565b50600d5460405163af2979eb60e01b81526001600160a01b039091169063af2979eb90610ffe9030908590600090819084904290600401612401565b6020604051808303816000875af115801561101d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104191906123cb565b505050565b336110596000546001600160a01b031690565b6001600160a01b03161461107f5760405162461bcd60e51b8152600401610945906121f8565b61108b600b600a612327565b6110959084612336565b92506110a3600b600a612327565b6110ad9083612336565b91506110bb600b600a612327565b6110c59082612336565b60099390935550600a55600b55565b336110e76000546001600160a01b031690565b6001600160a01b03161461110d5760405162461bcd60e51b8152600401610945906121f8565b6011805460ff1916911515919091179055565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156111835760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610945565b6111923385610a538685612355565b5060019392505050565b60006109023384846114a2565b336111bc6000546001600160a01b031690565b6001600160a01b0316146111e25760405162461bcd60e51b8152600401610945906121f8565b600f8054911515620100000262ff000019909216919091179055565b60006012544210156112185742601254610e389190612355565b50600090565b600061122c600b600a612327565b60085461123b600b600a612327565b61124a9064e8d4a51000612336565b6112549190612355565b610e3891906123a9565b336112716000546001600160a01b031690565b6001600160a01b0316146112975760405162461bcd60e51b8152600401610945906121f8565b6001600160a01b0381166112fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610945565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3361136a6000546001600160a01b031690565b6001600160a01b0316146113905760405162461bcd60e51b8152600401610945906121f8565b6113986116ff565b565b6000610e31836001600160a01b0384166118a7565b6001600160a01b0383166113f95760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610945565b6001600160a01b0382166114415760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610945565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114ed5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610945565b6001600160a01b0382166115365760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610945565b60006115436004856118f6565b8061155457506115546004846118f6565b905060006001600160a01b03851630148061157757506001600160a01b03841630145b600d54600c549192506001600160a01b0390811691600091888116600160381b909204161480156115b95750816001600160a01b0316866001600160a01b0316145b806115f45750600c546001600160a01b03878116600160381b909204161480156115f45750816001600160a01b0316876001600160a01b0316145b600c549091506000906001600160a01b03898116600160381b90920416148061162e5750826001600160a01b0316886001600160a01b0316145b600c549091506000906001600160a01b03898116600160381b9092041614806116685750836001600160a01b0316886001600160a01b0316145b905084806116735750825b8061167b5750855b156116905761168b898989611918565b6116f4565b601154610100900460ff166116e75760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610945565b6116f489898985856119e3565b505050505050505050565b600f805460ff191660019081179091553060009081526020919091526040812054600c5490919061174590600160281b810460ff90811691640100000000900416612384565b60ff16905060006005600a5461175b91906123a9565b90508083108061176d575061ffff8216155b1561177a5750505061189b565b600c5460009061ffff84169061179b90640100000000900460ff1684612336565b6117a591906123a9565b905060006117b38284612355565b905060006117c26002846123a9565b905060006117d08285612355565b905060006117de848361236c565b9050476117ea82611d0b565b60006117f68247612355565b90506000836118058684612336565b61180f91906123a9565b905061181b8682611e64565b60006118278447612355565b60405190915060009073d9f0cd1cc9cdd9b243458143bb1b2b0adea9b5849061753090849084818181858888f193505050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b505050505050505050505050505050505b600f805460ff19169055565b60008181526001830160205260408120546118ee57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610906565b506000610906565b6001600160a01b03811660009081526001830160205260408120541515610e31565b6001600160a01b0383166000908152600160205260409020548181101561197c5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610945565b6119868483611f1a565b6119908383611f5f565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119d591815260200190565b60405180910390a350505050565b6001600160a01b0380851660009081526001602052604080822054928816825290205484811015611a515760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610945565b60008315611aae57600a54861115611a9d5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610945565b50600c54610100900460ff16611ba8565b8415611b4c57600b54861115611af25760405162461bcd60e51b8152602060048201526009602482015268109d5e48131253525560ba1b6044820152606401610945565b600954611aff878561236c565b1115611b405760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610945565b50600c5460ff16611ba8565b600954611b59878561236c565b1115611b9a5760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610945565b50600c5462010000900460ff165b600c546001600160a01b03898116600160381b9092041614801590611bd0575060115460ff16155b8015611bdf5750600f5460ff16155b8015611be85750835b15611bf557611bf56116ff565b6000611c118783600c60039054906101000a900460ff16611f83565b600c54909150600090611c459089908590611c409060ff6401000000008204811691600160281b900416612384565b611f83565b90506000611c53828461236c565b611c5d908a612355565b9050611c698b8a611f1a565b3060009081526001602052604081208054849290611c8890849061236c565b925050819055508260086000828254611ca19190612355565b90915550611cb190508a82611f5f565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cf691815260200190565b60405180910390a35050505050505050505050565b600d54611d239030906001600160a01b0316836113af565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d5857611d5861243c565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd59190612452565b81600181518110611de857611de861243c565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b815291169063791ac94790611e2e90859060009086903090429060040161246f565b600060405180830381600087803b158015611e4857600080fd5b505af1158015611e5c573d6000803e3d6000fd5b505050505050565b80600e6000828254611e76919061236c565b9091555050600d54611e939030906001600160a01b0316846113af565b600d5460405163f305d71960e01b81526001600160a01b039091169063f305d719908390611ed09030908790600090819084904290600401612401565b60606040518083038185885af1158015611eee573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f1391906124e0565b5050505050565b6001600160a01b038216600090815260016020526040812054611f3e908390612355565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054611f3e90839061236c565b60006127108260ff168460ff1686611f9b9190612336565b611fa59190612336565b611faf91906123a9565b949350505050565b600060208083528351808285015260005b81811015611fe457858101830151858201604001528201611fc8565b81811115611ff6576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610b3c57600080fd5b6000806040838503121561203457600080fd5b823561203f8161200c565b946020939093013593505050565b8015158114610b3c57600080fd5b60006020828403121561206d57600080fd5b8135610e318161204d565b60008060006060848603121561208d57600080fd5b83356120988161200c565b925060208401356120a88161200c565b929592945050506040919091013590565b6000602082840312156120cb57600080fd5b8135610e318161200c565b803560ff811681146120e757600080fd5b919050565b60008060008060008060c0878903121561210557600080fd5b61210e876120d6565b955061211c602088016120d6565b945061212a604088016120d6565b9350612138606088016120d6565b9250612146608088016120d6565b915061215460a088016120d6565b90509295509295509295565b6000806040838503121561217357600080fd5b61217c836120d6565b915061218a602084016120d6565b90509250929050565b6000806000606084860312156121a857600080fd5b505081359360208301359350604090920135919050565b600080604083850312156121d257600080fd5b82356121dd8161200c565b915060208301356121ed8161200c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561227e5781600019048211156122645761226461222d565b8085161561227157918102915b93841c9390800290612248565b509250929050565b60008261229557506001610906565b816122a257506000610906565b81600181146122b857600281146122c2576122de565b6001915050610906565b60ff8411156122d3576122d361222d565b50506001821b610906565b5060208310610133831016604e8410600b8410161715612301575081810a610906565b61230b8383612243565b806000190482111561231f5761231f61222d565b029392505050565b6000610e3160ff841683612286565b60008160001904831182151516156123505761235061222d565b500290565b6000828210156123675761236761222d565b500390565b6000821982111561237f5761237f61222d565b500190565b600060ff821660ff84168060ff038211156123a1576123a161222d565b019392505050565b6000826123c657634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156123dd57600080fd5b5051919050565b6000602082840312156123f657600080fd5b8151610e318161204d565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561246457600080fd5b8151610e318161200c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124bf5784516001600160a01b03168352938301939183019160010161249a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156124f557600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122066250bc70bb0171055dc50feaf19836d6ad9579e59b45a66a44571369455013364736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102965760003560e01c8063715018a6116101665780638da5cb5b116100d3578063b7f723dd1161008f578063dd62ed3e1161006c578063dd62ed3e14610864578063f2fde38b146108aa578063f88b0e46146108ca578063ffcfadde146108e057005b8063b7f723dd1461081a578063c3a3c0321461083a578063c3f4f54f1461084f57005b80638da5cb5b146106b357806395d89b411461075c5780639c561a421461078a578063a457c2d7146107b2578063a9059cbb146107d2578063aaf13d10146107f257005b8063893d20e811610122578063893d20e8146106b357806389eb4a91146106d15780638af8c38d146106f15780638bfa3151146107065780638d060d77146107265780638d2c50391461073c57005b8063715018a61461061a578063762bb2821461062f5780637b9e987a1461064557806386d0ada81461065a5780638728ecd114610674578063887c60fb1461069457005b806339509351116102045780634f91e48c116101c05780634f91e48c1461054657806357ad67d11461055c578063589210d91461057c578063677a8870146105925780636f89e409146105ba57806370a08231146105e457005b8063395093511461049d57806339bf3648146104bd5780633c85ca3c146104dd57806348e53164146104f25780634ada218b146105075780634cdaf0ae1461052657005b806318eeef801161025357806318eeef80146103a65780631dffb940146103ce5780631eb25d13146103e357806323b872dd146103f85780632973ef2d14610418578063313ce5671461048157005b8062f54f0a1461029f57806306fdde03146102e4578063095ea7b3146103225780631285073c1461035257806314e913771461037157806318160ddd1461039157005b3661029d57005b005b3480156102ab57600080fd5b506102c773775967eb2add5ac1e9c200ce4100ca88843cd07b81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102f057600080fd5b5060408051808201909152600c81526b486970706f2047616d696e6760a01b60208201525b6040516102db9190611fb7565b34801561032e57600080fd5b5061034261033d366004612021565b6108f5565b60405190151581526020016102db565b34801561035e57600080fd5b506010545b6040519081526020016102db565b34801561037d57600080fd5b5061029d61038c36600461205b565b61090c565b34801561039d57600080fd5b50600854610363565b3480156103b257600080fd5b506102c773d7ec668b1c4010ed9b4886383a7275a9bf33f3e581565b3480156103da57600080fd5b5061029d610968565b3480156103ef57600080fd5b506103636109ae565b34801561040457600080fd5b50610342610413366004612078565b6109cc565b34801561042457600080fd5b50600c546040805160ff6301000000840481168252640100000000840481166020830152600160281b84048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c0016102db565b34801561048d57600080fd5b50604051600b81526020016102db565b3480156104a957600080fd5b506103426104b8366004612021565b610a63565b3480156104c957600080fd5b50600f546103429062010000900460ff1681565b3480156104e957600080fd5b5061029d610a9a565b3480156104fe57600080fd5b5061029d610b3f565b34801561051357600080fd5b5060115461034290610100900460ff1681565b34801561053257600080fd5b5061029d6105413660046120b9565b610b5e565b34801561055257600080fd5b50610363600a5481565b34801561056857600080fd5b5061029d6105773660046120ec565b610bc1565b34801561058857600080fd5b50610363600b5481565b34801561059e57600080fd5b506102c773d9f0cd1cc9cdd9b243458143bb1b2b0adea9b58481565b3480156105c657600080fd5b506105cf610cf4565b604080519283526020830191909152016102db565b3480156105f057600080fd5b506103636105ff3660046120b9565b6001600160a01b031660009081526001602052604090205490565b34801561062657600080fd5b5061029d610d31565b34801561063b57600080fd5b5061036360095481565b34801561065157600080fd5b5061029d610db4565b34801561066657600080fd5b506011546103429060ff1681565b34801561068057600080fd5b5061036361068f3660046120b9565b610dfe565b3480156106a057600080fd5b50600f5461034290610100900460ff1681565b3480156106bf57600080fd5b506000546001600160a01b03166102c7565b3480156106dd57600080fd5b5061029d6106ec366004612160565b610e3d565b3480156106fd57600080fd5b5061029d610e9a565b34801561071257600080fd5b5061029d610721366004612193565b611046565b34801561073257600080fd5b50610363600e5481565b34801561074857600080fd5b5061029d61075736600461205b565b6110d4565b34801561076857600080fd5b50604080518082019091526005815264484950504f60d81b6020820152610315565b34801561079657600080fd5b506102c77361969cc58d2cc52ba31826ac3771c3ae632d9dac81565b3480156107be57600080fd5b506103426107cd366004612021565b611120565b3480156107de57600080fd5b506103426107ed366004612021565b61119c565b3480156107fe57600080fd5b506102c773a5797c361420a073b05dd46a18b129ff8c53585e81565b34801561082657600080fd5b5061029d61083536600461205b565b6111a9565b34801561084657600080fd5b506103636111fe565b34801561085b57600080fd5b5061036361121e565b34801561087057600080fd5b5061036361087f3660046121bf565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108b657600080fd5b5061029d6108c53660046120b9565b61125e565b3480156108d657600080fd5b5061036360105481565b3480156108ec57600080fd5b5061029d611357565b60006109023384846113af565b5060015b92915050565b3361091f6000546001600160a01b031690565b6001600160a01b03161461094e5760405162461bcd60e51b8152600401610945906121f8565b60405180910390fd5b600f80549115156101000261ff0019909216919091179055565b3361097b6000546001600160a01b031690565b6001600160a01b0316146109a15760405162461bcd60e51b8152600401610945906121f8565b6011805461ff0019169055565b6109ba600b600a612327565b6109c99064e8d4a51000612336565b81565b60006109d98484846114a2565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610a445760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610945565b610a588533610a538685612355565b6113af565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610902918590610a5390869061236c565b33610aad6000546001600160a01b031690565b6001600160a01b031614610ad35760405162461bcd60e51b8152600401610945906121f8565b60405160009073d9f0cd1cc9cdd9b243458143bb1b2b0adea9b5849047908381818185875af1925050503d8060008114610b29576040519150601f19603f3d011682016040523d82523d6000602084013e610b2e565b606091505b5050905080610b3c57600080fd5b50565b601054610b4c904261236c565b33600090815260036020526040902055565b33610b716000546001600160a01b031690565b6001600160a01b031614610b975760405162461bcd60e51b8152600401610945906121f8565b601180546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b33610bd46000546001600160a01b031690565b6001600160a01b031614610bfa5760405162461bcd60e51b8152600401610945906121f8565b600084610c078789612384565b610c119190612384565b90508060ff16606414610c755760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610945565b50600c805460ff928316620100000262ff0000199484166101000261ffff19978516600160281b029790971665ff000000ffff199885166401000000000264ff00000000199a86166301000000029a909a1664ffff00000019909316929092179890981796909616959095179216919091179190911716919091179055565b600080610d03600b600a612327565b600954610d1091906123a9565b610d1c600b600a612327565b600a54610d2991906123a9565b915091509091565b33610d446000546001600160a01b031690565b6001600160a01b031614610d6a5760405162461bcd60e51b8152600401610945906121f8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b33610dc76000546001600160a01b031690565b6001600160a01b031614610ded5760405162461bcd60e51b8152600401610945906121f8565b6011805461ff001916610100179055565b6001600160a01b038116600090815260036020526040812054428111610e275750600092915050565b610e314282612355565b9392505050565b905090565b33610e506000546001600160a01b031690565b6001600160a01b031614610e765760405162461bcd60e51b8152600401610945906121f8565b600c805460ff9283166101000261ffff199091169290931691909117919091179055565b33610ead6000546001600160a01b031690565b6001600160a01b031614610ed35760405162461bcd60e51b8152600401610945906121f8565b6011546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a0823190602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4991906123cb565b600d5460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b3906044016020604051808303816000875af1158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc291906123e4565b50600d5460405163af2979eb60e01b81526001600160a01b039091169063af2979eb90610ffe9030908590600090819084904290600401612401565b6020604051808303816000875af115801561101d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104191906123cb565b505050565b336110596000546001600160a01b031690565b6001600160a01b03161461107f5760405162461bcd60e51b8152600401610945906121f8565b61108b600b600a612327565b6110959084612336565b92506110a3600b600a612327565b6110ad9083612336565b91506110bb600b600a612327565b6110c59082612336565b60099390935550600a55600b55565b336110e76000546001600160a01b031690565b6001600160a01b03161461110d5760405162461bcd60e51b8152600401610945906121f8565b6011805460ff1916911515919091179055565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156111835760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610945565b6111923385610a538685612355565b5060019392505050565b60006109023384846114a2565b336111bc6000546001600160a01b031690565b6001600160a01b0316146111e25760405162461bcd60e51b8152600401610945906121f8565b600f8054911515620100000262ff000019909216919091179055565b60006012544210156112185742601254610e389190612355565b50600090565b600061122c600b600a612327565b60085461123b600b600a612327565b61124a9064e8d4a51000612336565b6112549190612355565b610e3891906123a9565b336112716000546001600160a01b031690565b6001600160a01b0316146112975760405162461bcd60e51b8152600401610945906121f8565b6001600160a01b0381166112fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610945565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3361136a6000546001600160a01b031690565b6001600160a01b0316146113905760405162461bcd60e51b8152600401610945906121f8565b6113986116ff565b565b6000610e31836001600160a01b0384166118a7565b6001600160a01b0383166113f95760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610945565b6001600160a01b0382166114415760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610945565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114ed5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610945565b6001600160a01b0382166115365760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610945565b60006115436004856118f6565b8061155457506115546004846118f6565b905060006001600160a01b03851630148061157757506001600160a01b03841630145b600d54600c549192506001600160a01b0390811691600091888116600160381b909204161480156115b95750816001600160a01b0316866001600160a01b0316145b806115f45750600c546001600160a01b03878116600160381b909204161480156115f45750816001600160a01b0316876001600160a01b0316145b600c549091506000906001600160a01b03898116600160381b90920416148061162e5750826001600160a01b0316886001600160a01b0316145b600c549091506000906001600160a01b03898116600160381b9092041614806116685750836001600160a01b0316886001600160a01b0316145b905084806116735750825b8061167b5750855b156116905761168b898989611918565b6116f4565b601154610100900460ff166116e75760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610945565b6116f489898985856119e3565b505050505050505050565b600f805460ff191660019081179091553060009081526020919091526040812054600c5490919061174590600160281b810460ff90811691640100000000900416612384565b60ff16905060006005600a5461175b91906123a9565b90508083108061176d575061ffff8216155b1561177a5750505061189b565b600c5460009061ffff84169061179b90640100000000900460ff1684612336565b6117a591906123a9565b905060006117b38284612355565b905060006117c26002846123a9565b905060006117d08285612355565b905060006117de848361236c565b9050476117ea82611d0b565b60006117f68247612355565b90506000836118058684612336565b61180f91906123a9565b905061181b8682611e64565b60006118278447612355565b60405190915060009073d9f0cd1cc9cdd9b243458143bb1b2b0adea9b5849061753090849084818181858888f193505050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b505050505050505050505050505050505b600f805460ff19169055565b60008181526001830160205260408120546118ee57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610906565b506000610906565b6001600160a01b03811660009081526001830160205260408120541515610e31565b6001600160a01b0383166000908152600160205260409020548181101561197c5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610945565b6119868483611f1a565b6119908383611f5f565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119d591815260200190565b60405180910390a350505050565b6001600160a01b0380851660009081526001602052604080822054928816825290205484811015611a515760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610945565b60008315611aae57600a54861115611a9d5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610945565b50600c54610100900460ff16611ba8565b8415611b4c57600b54861115611af25760405162461bcd60e51b8152602060048201526009602482015268109d5e48131253525560ba1b6044820152606401610945565b600954611aff878561236c565b1115611b405760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610945565b50600c5460ff16611ba8565b600954611b59878561236c565b1115611b9a5760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610945565b50600c5462010000900460ff165b600c546001600160a01b03898116600160381b9092041614801590611bd0575060115460ff16155b8015611bdf5750600f5460ff16155b8015611be85750835b15611bf557611bf56116ff565b6000611c118783600c60039054906101000a900460ff16611f83565b600c54909150600090611c459089908590611c409060ff6401000000008204811691600160281b900416612384565b611f83565b90506000611c53828461236c565b611c5d908a612355565b9050611c698b8a611f1a565b3060009081526001602052604081208054849290611c8890849061236c565b925050819055508260086000828254611ca19190612355565b90915550611cb190508a82611f5f565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cf691815260200190565b60405180910390a35050505050505050505050565b600d54611d239030906001600160a01b0316836113af565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d5857611d5861243c565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd59190612452565b81600181518110611de857611de861243c565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b815291169063791ac94790611e2e90859060009086903090429060040161246f565b600060405180830381600087803b158015611e4857600080fd5b505af1158015611e5c573d6000803e3d6000fd5b505050505050565b80600e6000828254611e76919061236c565b9091555050600d54611e939030906001600160a01b0316846113af565b600d5460405163f305d71960e01b81526001600160a01b039091169063f305d719908390611ed09030908790600090819084904290600401612401565b60606040518083038185885af1158015611eee573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f1391906124e0565b5050505050565b6001600160a01b038216600090815260016020526040812054611f3e908390612355565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054611f3e90839061236c565b60006127108260ff168460ff1686611f9b9190612336565b611fa59190612336565b611faf91906123a9565b949350505050565b600060208083528351808285015260005b81811015611fe457858101830151858201604001528201611fc8565b81811115611ff6576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610b3c57600080fd5b6000806040838503121561203457600080fd5b823561203f8161200c565b946020939093013593505050565b8015158114610b3c57600080fd5b60006020828403121561206d57600080fd5b8135610e318161204d565b60008060006060848603121561208d57600080fd5b83356120988161200c565b925060208401356120a88161200c565b929592945050506040919091013590565b6000602082840312156120cb57600080fd5b8135610e318161200c565b803560ff811681146120e757600080fd5b919050565b60008060008060008060c0878903121561210557600080fd5b61210e876120d6565b955061211c602088016120d6565b945061212a604088016120d6565b9350612138606088016120d6565b9250612146608088016120d6565b915061215460a088016120d6565b90509295509295509295565b6000806040838503121561217357600080fd5b61217c836120d6565b915061218a602084016120d6565b90509250929050565b6000806000606084860312156121a857600080fd5b505081359360208301359350604090920135919050565b600080604083850312156121d257600080fd5b82356121dd8161200c565b915060208301356121ed8161200c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561227e5781600019048211156122645761226461222d565b8085161561227157918102915b93841c9390800290612248565b509250929050565b60008261229557506001610906565b816122a257506000610906565b81600181146122b857600281146122c2576122de565b6001915050610906565b60ff8411156122d3576122d361222d565b50506001821b610906565b5060208310610133831016604e8410600b8410161715612301575081810a610906565b61230b8383612243565b806000190482111561231f5761231f61222d565b029392505050565b6000610e3160ff841683612286565b60008160001904831182151516156123505761235061222d565b500290565b6000828210156123675761236761222d565b500390565b6000821982111561237f5761237f61222d565b500190565b600060ff821660ff84168060ff038211156123a1576123a161222d565b019392505050565b6000826123c657634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156123dd57600080fd5b5051919050565b6000602082840312156123f657600080fd5b8151610e318161204d565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561246457600080fd5b8151610e318161200c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124bf5784516001600160a01b03168352938301939183019160010161249a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156124f557600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122066250bc70bb0171055dc50feaf19836d6ad9579e59b45a66a44571369455013364736f6c634300080f0033

Deployed Bytecode Sourcemap

25434:14644:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26325:74;;;;;;;;;;;;26357:42;26325:74;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;26325:74:0;;;;;;;;37753:94;;;;;;;;;;-1:-1:-1;37834:5:0;;;;;;;;;;;;-1:-1:-1;;;37834:5:0;;;;37753:94;;;;;;;:::i;38638:161::-;;;;;;;;;;-1:-1:-1;38638:161:0;;;;;:::i;:::-;;:::i;:::-;;;1445:14:1;;1438:22;1420:41;;1408:2;1393:18;38638:161:0;1280:187:1;34748:102:0;;;;;;;;;;-1:-1:-1;34830:12:0;;34748:102;;;1618:25:1;;;1606:2;1591:18;34748:102:0;1472:177:1;35244:104:0;;;;;;;;;;-1:-1:-1;35244:104:0;;;;;:::i;:::-;;:::i;38063:108::-;;;;;;;;;;-1:-1:-1;38145:18:0;;38063:108;;26244:74;;;;;;;;;;;;26276:42;26244:74;;36633:86;;;;;;;;;;;;;:::i;26015:69::-;;;;;;;;;;;;;:::i;39112:392::-;;;;;;;;;;-1:-1:-1;39112:392:0;;;;;:::i;:::-;;:::i;34213:244::-;;;;;;;;;;-1:-1:-1;34384:8:0;;34213:244;;;34384:8;;;;;;2771:25:1;;34393:13:0;;;;;2827:2:1;2812:18;;2805:34;-1:-1:-1;;;34407:11:0;;;;2855:18:1;;;2848:34;;;;34419:7:0;;;2913:2:1;2898:18;;2891:34;34384:8:0;34427;;;;2956:3:1;2941:19;;2934:35;34436:12:0;;;;;3000:3:1;2985:19;;2978:35;2758:3;2743:19;34213:244:0;2484:535:1;37961:94:0;;;;;;;;;;-1:-1:-1;37961:94:0;;26006:2;3166:36:1;;3154:2;3139:18;37961:94:0;3024:184:1;39512:205:0;;;;;;;;;;-1:-1:-1;39512:205:0;;;;;:::i;:::-;;:::i;35016:27::-;;;;;;;;;;-1:-1:-1;35016:27:0;;;;;;;;;;;37427:143;;;;;;;;;;;;;:::i;34864:107::-;;;;;;;;;;;;;:::i;36461:26::-;;;;;;;;;;-1:-1:-1;36461:26:0;;;;;;;;;;;36727:146;;;;;;;;;;-1:-1:-1;36727:146:0;;;;;:::i;:::-;;:::i;26782:52::-;;;;;;;;;;;;;;;;35464:492;;;;;;;;;;-1:-1:-1;35464:492:0;;;;;:::i;:::-;;:::i;26841:55::-;;;;;;;;;;;;;;;;26160:77;;;;;;;;;;;;26195:42;26160:77;;34056:149;;;;;;;;;;;;;:::i;:::-;;;;4340:25:1;;;4396:2;4381:18;;4374:34;;;;4313:18;34056:149:0;4166:248:1;38179:121:0;;;;;;;;;;-1:-1:-1;38179:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;38274:18:0;38247:7;38274:18;;;:9;:18;;;;;;;38179:121;8129:140;;;;;;;;;;;;;:::i;26716:59::-;;;;;;;;;;;;;;;;36541:84;;;;;;;;;;;;;:::i;35084:28::-;;;;;;;;;;-1:-1:-1;35084:28:0;;;;;;;;34467:275;;;;;;;;;;-1:-1:-1;34467:275:0;;;;;:::i;:::-;;:::i;34981:28::-;;;;;;;;;;-1:-1:-1;34981:28:0;;;;;;;;;;;37651:94;;;;;;;;;;-1:-1:-1;37703:7:0;7979:6;-1:-1:-1;;;;;7979:6:0;37651:94;;28016:124;;;;;;;;;;-1:-1:-1;28016:124:0;;;;;:::i;:::-;;:::i;36932:487::-;;;;;;;;;;;;;:::i;36061:384::-;;;;;;;;;;-1:-1:-1;36061:384:0;;;;;:::i;:::-;;:::i;31518:25::-;;;;;;;;;;;;;;;;35124:110;;;;;;;;;;-1:-1:-1;35124:110:0;;;;;:::i;:::-;;:::i;37855:98::-;;;;;;;;;;-1:-1:-1;37938:7:0;;;;;;;;;;;;-1:-1:-1;;;37938:7:0;;;;37855:98;;26487:74;;;;;;;;;;;;26519:42;26487:74;;39725:342;;;;;;;;;;-1:-1:-1;39725:342:0;;;;;:::i;:::-;;:::i;38308:167::-;;;;;;;;;;-1:-1:-1;38308:167:0;;;;;:::i;:::-;;:::i;26406:74::-;;;;;;;;;;;;26438:42;26406:74;;35356:100;;;;;;;;;;-1:-1:-1;35356:100:0;;;;;:::i;:::-;;:::i;33691:220::-;;;;;;;;;;;;;:::i;33919:129::-;;;;;;;;;;;;;:::i;38483:147::-;;;;;;;;;;-1:-1:-1;38483:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;38594:19:0;;;38567:7;38594:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;38483:147;8277:236;;;;;;;;;;-1:-1:-1;8277:236:0;;;;;:::i;:::-;;:::i;35050:27::-;;;;;;;;;;;;;;;;35966:81;;;;;;;;;;;;;:::i;38638:161::-;38715:4;38732:37;38741:10;38753:7;38762:6;38732:8;:37::i;:::-;-1:-1:-1;38787:4:0;38638:161;;;;;:::o;35244:104::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;;;;;;;;;35315:16:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;35315:25:0;;::::1;::::0;;;::::1;::::0;;35244:104::o;36633:86::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;36691:14:::1;:20:::0;;-1:-1:-1;;36691:20:0::1;::::0;;36633:86::o;26015:69::-;26071:13;26006:2;26071;:13;:::i;:::-;26055:29;;:13;:29;:::i;:::-;26015:69;:::o;39112:392::-;39212:4;39229:36;39239:6;39247:9;39258:6;39229:9;:36::i;:::-;-1:-1:-1;;;;;39305:19:0;;39278:24;39305:19;;;:11;:19;;;;;;;;39325:10;39305:31;;;;;;;;39355:26;;;;39347:59;;;;-1:-1:-1;;;39347:59:0;;7641:2:1;39347:59:0;;;7623:21:1;7680:2;7660:18;;;7653:30;-1:-1:-1;;;7699:18:1;;;7692:50;7759:18;;39347:59:0;7439:344:1;39347:59:0;39419:55;39428:6;39436:10;39448:25;39467:6;39448:16;:25;:::i;:::-;39419:8;:55::i;:::-;-1:-1:-1;39492:4:0;;39112:392;-1:-1:-1;;;;39112:392:0:o;39512:205::-;39620:10;39594:4;39641:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;39641:32:0;;;;;;;;;;39594:4;;39611:76;;39632:7;;39641:45;;39676:10;;39641:45;:::i;37427:143::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;37487:51:::1;::::0;37474:9:::1;::::0;26195:42:::1;::::0;37511:21:::1;::::0;37474:9;37487:51;37474:9;37487:51;37511:21;26195:42;37487:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37473:65;;;37557:4;37549:13;;;::::0;::::1;;37462:108;37427:143::o:0;34864:107::-;34951:12;;34935:28;;:15;:28;:::i;:::-;34923:10;34913:21;;;;:9;:21;;;;;:50;34864:107::o;36727:146::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;36821:22:::1;:44:::0;;-1:-1:-1;;;;;36821:44:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;36821:44:0;;::::1;::::0;;;::::1;::::0;;36727:146::o;35464:492::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;35619:14:::1;35659:12:::0;35634:24:::1;35644:14:::0;35634:9;:24:::1;:::i;:::-;:37;;;;:::i;:::-;35619:52;;35690:8;:13;;35700:3;35690:13;35682:64;;;::::0;-1:-1:-1;;;35682:64:0;;8672:2:1;35682:64:0::1;::::0;::::1;8654:21:1::0;8711:2;8691:18;;;8684:30;8750:34;8730:18;;;8723:62;-1:-1:-1;;;8801:18:1;;;8794:36;8847:19;;35682:64:0::1;8470:402:1::0;35682:64:0::1;-1:-1:-1::0;35759:8:0::1;:18:::0;;::::1;35924:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;35897:16:0;;::::1;35759:18;35897:16;-1:-1:-1::0;;35827:24:0;;::::1;-1:-1:-1::0;;;35827:24:0::1;35897:16:::0;;;;-1:-1:-1;;35788:28:0;;::::1;::::0;::::1;-1:-1:-1::0;;35759:18:0;;::::1;::::0;::::1;35788:28:::0;;;;-1:-1:-1;;35788:28:0;;;;;;;;;;::::1;35897:16:::0;;;;;;;;35872:14;::::1;35897:16:::0;;;;;;;::::1;35924:24;::::0;;;::::1;::::0;;35464:492::o;34056:149::-;34097:15;;34158:13;26006:2;34158;:13;:::i;:::-;34145:12;;:26;;;;:::i;:::-;34183:13;26006:2;34183;:13;:::i;:::-;34173:9;;:23;;;;:::i;:::-;34138:59;;;;34056:149;;:::o;8129:140::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;8228:1:::1;8212:6:::0;;8191:40:::1;::::0;-1:-1:-1;;;;;8212:6:0;;::::1;::::0;8191:40:::1;::::0;8228:1;;8191:40:::1;8259:1;8242:19:::0;;-1:-1:-1;;;;;;8242:19:0::1;::::0;;8129:140::o;36541:84::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;36598:14:::1;:19:::0;;-1:-1:-1;;36598:19:0::1;;;::::0;;36541:84::o;34467:275::-;-1:-1:-1;;;;;34588:25:0;;34553:7;34588:25;;;:9;:25;;;;;;34636:15;34626:25;;34623:71;;-1:-1:-1;34682:1:0;;34467:275;-1:-1:-1;;34467:275:0:o;34623:71::-;34710:24;34719:15;34710:8;:24;:::i;:::-;34703:31;34467:275;-1:-1:-1;;;34467:275:0:o;37730:7::-;37723:14;;37651:94;:::o;28016:124::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;28091:7:::1;:14:::0;;::::1;28116:16:::0;;::::1;28091:14;28116:16;-1:-1:-1::0;;28116:16:0;;;28091:14;;;::::1;28116:16:::0;;;;;;;::::1;::::0;;28016:124::o;36932:487::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;37023:22:::1;::::0;37074:39:::1;::::0;-1:-1:-1;;;37074:39:0;;37107:4:::1;37074:39;::::0;::::1;160:51:1::0;37023:22:0;;;::::1;-1:-1:-1::0;;;;;37023:22:0::1;::::0;36978:28:::1;::::0;37023:22;;37074:24:::1;::::0;133:18:1;;37074:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37157:14;::::0;37126:54:::1;::::0;-1:-1:-1;;;37126:54:0;;-1:-1:-1;;;;;37157:14:0;;::::1;37126:54;::::0;::::1;9462:51:1::0;9529:18;;;9522:34;;;37057:56:0;;-1:-1:-1;37126:22:0;::::1;::::0;::::1;::::0;9435:18:1;;37126:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;37191:14:0::1;::::0;:216:::1;::::0;-1:-1:-1;;;37191:216:0;;-1:-1:-1;;;;;37191:14:0;;::::1;::::0;:62:::1;::::0;:216:::1;::::0;37276:4:::1;::::0;37296:6;;37191:14:::1;::::0;;;37276:4;;37377:15:::1;::::0;37191:216:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36967:452;;36932:487::o:0;36061:384::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;36214:13:::1;26006:2;36214;:13;:::i;:::-;36198:29;::::0;:15;:29:::1;:::i;:::-;36182:45:::0;-1:-1:-1;36264:13:0::1;26006:2;36264;:13;:::i;:::-;36251:26;::::0;:12;:26:::1;:::i;:::-;36238:39:::0;-1:-1:-1;36312:13:0::1;26006:2;36312;:13;:::i;:::-;36300:25;::::0;:11;:25:::1;:::i;:::-;36338:12;:30:::0;;;;-1:-1:-1;36379:9:0::1;:24:::0;36415:8:::1;:22:::0;36061:384::o;35124:110::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;35203:16:::1;:23:::0;;-1:-1:-1;;35203:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35124:110::o;39725:342::-;39868:10;39812:4;39856:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;39856:32:0;;;;;;;;;;39907:35;;;;39899:60;;;;-1:-1:-1;;;39899:60:0;;10631:2:1;39899:60:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:42;10741:18;;39899:60:0;10429:336:1;39899:60:0;39972:65;39981:10;39993:7;40002:34;40021:15;40002:16;:34;:::i;39972:65::-;-1:-1:-1;40055:4:0;;39725:342;-1:-1:-1;;;39725:342:0:o;38308:167::-;38388:4;38405:40;38415:10;38427:9;38438:6;38405:9;:40::i;35356:100::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;35425:15:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35425:23:0;;::::1;::::0;;;::::1;::::0;;35356:100::o;33691:220::-;33756:7;33794:20;;33778:15;:36;33775:110;;;33858:15;33837:20;;:36;;;;:::i;33775:110::-;-1:-1:-1;33902:1:0;;33691:220::o;33919:129::-;33966:7;34027:13;26006:2;34027;:13;:::i;:::-;34007:18;;26071:13;26006:2;26071;:13;:::i;:::-;26055:29;;:13;:29;:::i;:::-;33993:32;;;;:::i;:::-;33992:48;;;;:::i;8277:236::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8358:22:0;::::1;8350:73;;;::::0;-1:-1:-1;;;8350:73:0;;10972:2:1;8350:73:0::1;::::0;::::1;10954:21:1::0;11011:2;10991:18;;;10984:30;11050:34;11030:18;;;11023:62;-1:-1:-1;;;11101:18:1;;;11094:36;11147:19;;8350:73:0::1;10770:402:1::0;8350:73:0::1;8460:6;::::0;;8439:38:::1;::::0;-1:-1:-1;;;;;8439:38:0;;::::1;::::0;8460:6;::::1;::::0;8439:38:::1;::::0;::::1;8488:6;:17:::0;;-1:-1:-1;;;;;;8488:17:0::1;-1:-1:-1::0;;;;;8488:17:0;;;::::1;::::0;;;::::1;::::0;;8277:236::o;35966:81::-;8052:10;8041:7;7952;7979:6;-1:-1:-1;;;;;7979:6:0;;7914:79;8041:7;-1:-1:-1;;;;;8041:21:0;;8033:66;;;;-1:-1:-1;;;8033:66:0;;;;;;;:::i;:::-;36019:20:::1;:18;:20::i;:::-;35966:81::o:0;22378:152::-;22448:4;22472:50;22477:3;-1:-1:-1;;;;;22497:23:0;;22472:4;:50::i;38805:299::-;-1:-1:-1;;;;;38898:19:0;;38890:49;;;;-1:-1:-1;;;38890:49:0;;11379:2:1;38890:49:0;;;11361:21:1;11418:2;11398:18;;;11391:30;-1:-1:-1;;;11437:18:1;;;11430:47;11494:18;;38890:49:0;11177:341:1;38890:49:0;-1:-1:-1;;;;;38958:21:0;;38950:49;;;;-1:-1:-1;;;38950:49:0;;11725:2:1;38950:49:0;;;11707:21:1;11764:2;11744:18;;;11737:30;-1:-1:-1;;;11783:18:1;;;11776:45;11838:18;;38950:49:0;11523:339:1;38950:49:0;-1:-1:-1;;;;;39012:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;39064:32;;1618:25:1;;;39064:32:0;;1591:18:1;39064:32:0;;;;;;;38805:299;;;:::o;28150:1100::-;-1:-1:-1;;;;;28246:20:0;;28238:51;;;;-1:-1:-1;;;28238:51:0;;12069:2:1;28238:51:0;;;12051:21:1;12108:2;12088:18;;;12081:30;-1:-1:-1;;;12127:18:1;;;12120:48;12185:18;;28238:51:0;11867:342:1;28238:51:0;-1:-1:-1;;;;;28308:23:0;;28300:52;;;;-1:-1:-1;;;28300:52:0;;12416:2:1;28300:52:0;;;12398:21:1;12455:2;12435:18;;;12428:30;-1:-1:-1;;;12474:18:1;;;12467:46;12530:18;;28300:52:0;12214:340:1;28300:52:0;28375:15;28394:26;:9;28413:6;28394:18;:26::i;:::-;:59;;;-1:-1:-1;28424:29:0;:9;28443;28424:18;:29::i;:::-;28375:79;-1:-1:-1;28475:23:0;-1:-1:-1;;;;;28500:21:0;;28516:4;28500:21;;:49;;-1:-1:-1;;;;;;28525:24:0;;28544:4;28525:24;28500:49;28593:14;;28658:19;;28475:75;;-1:-1:-1;;;;;;28593:14:0;;;;28563:21;;28648:29;;;-1:-1:-1;;;28658:19:0;;;;28648:29;:59;;;;;28694:13;-1:-1:-1;;;;;28681:26:0;:9;-1:-1:-1;;;;;28681:26:0;;28648:59;28647:136;;;-1:-1:-1;28736:19:0;;-1:-1:-1;;;;;28723:32:0;;;-1:-1:-1;;;28736:19:0;;;;28723:32;:59;;;;;28769:13;-1:-1:-1;;;;;28759:23:0;:6;-1:-1:-1;;;;;28759:23:0;;28723:59;28816:19;;28619:165;;-1:-1:-1;28797:10:0;;-1:-1:-1;;;;;28808:27:0;;;-1:-1:-1;;;28816:19:0;;;;28808:27;;:53;;;28848:13;-1:-1:-1;;;;;28838:23:0;:6;-1:-1:-1;;;;;28838:23:0;;28808:53;28895:19;;28797:64;;-1:-1:-1;28872:11:0;;-1:-1:-1;;;;;28884:30:0;;;-1:-1:-1;;;28895:19:0;;;;28884:30;;:59;;;28930:13;-1:-1:-1;;;;;28917:26:0;:9;-1:-1:-1;;;;;28917:26:0;;28884:59;28872:71;;28959:18;:41;;;;28981:19;28959:41;:55;;;;29004:10;28959:55;28956:287;;;29030:43;29047:6;29055:9;29066:6;29030:16;:43::i;:::-;28956:287;;;29123:14;;;;;;;29115:49;;;;-1:-1:-1;;;29115:49:0;;12761:2:1;29115:49:0;;;12743:21:1;12800:2;12780:18;;;12773:30;12839:25;12819:18;;;12812:53;12882:18;;29115:49:0;12559:347:1;29115:49:0;29179:52;29194:6;29201:9;29211:6;29218:5;29224:6;29179:14;:52::i;:::-;28227:1023;;;;;;28150:1100;;;:::o;31737:1077::-;31629:27;:34;;-1:-1:-1;;31629:34:0;31659:4;31629:34;;;;;;31839:4:::1;31629:27:::0;31821:24;;;::::1;::::0;;;;;;;;31886:11:::1;::::0;31821:24;;31629:27;31872:25:::1;::::0;-1:-1:-1;;;31886:11:0;::::1;31629:34:::0;31886:11;;::::1;::::0;31872:13;;::::1;;:25;:::i;:::-;31856:41;;;;31908:19;31940:1;31928:9;;:13;;;;:::i;:::-;31908:33;;31973:11;31957:15;:27;:40;;;-1:-1:-1::0;31986:11:0::1;::::0;::::1;::::0;31957:40:::1;31954:77;;;32013:7;;;;;31954:77;32082:13;::::0;32043:25:::1;::::0;32069:36:::1;::::0;::::1;::::0;32070:25:::1;::::0;32082:13;;::::1;;;32070:11:::0;:25:::1;:::i;:::-;32069:36;;;;:::i;:::-;32043:62:::0;-1:-1:-1;32116:25:0::1;32143:29;32043:62:::0;32143:11;:29:::1;:::i;:::-;32116:56:::0;-1:-1:-1;32187:16:0::1;32204:19;32222:1;32204:17:::0;:19:::1;:::i;:::-;32187:36:::0;-1:-1:-1;32234:19:0::1;32254:26;32187:36:::0;32254:17;:26:::1;:::i;:::-;32234:46:::0;-1:-1:-1;32293:17:0::1;32311:29;32323:17:::0;32234:46;32311:29:::1;:::i;:::-;32293:47:::0;-1:-1:-1;32379:21:0::1;32411:27;32293:47:::0;32411:16:::1;:27::i;:::-;32449:14;32465:41;32489:17:::0;32465:21:::1;:41;:::i;:::-;32449:58:::0;-1:-1:-1;32518:14:0::1;32556:9:::0;32536:18:::1;32543:11:::0;32449:58;32536:18:::1;:::i;:::-;32535:30;;;;:::i;:::-;32518:47;;32576:31;32590:8;32600:6;32576:13;:31::i;:::-;32618:21;32641:41;32665:17:::0;32641:21:::1;:41;:::i;:::-;32715:62;::::0;32618:65;;-1:-1:-1;32695:15:0::1;::::0;26195:42:::1;::::0;32767:5:::1;::::0;32618:65;;32695:15;32715:62;32695:15;32715:62;32618:65;26195:42;32767:5;32715:62:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;31674:1:0::1;31686:27:::0;:35;;-1:-1:-1;;31686:35:0;;;31737:1077::o;17433:414::-;17496:4;19759:19;;;:12;;;:19;;;;;;17513:327;;-1:-1:-1;17556:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;17739:18;;17717:19;;;:12;;;:19;;;;;;:40;;;;17772:11;;17513:327;-1:-1:-1;17823:5:0;17816:12;;22950:167;-1:-1:-1;;;;;23084:23:0;;23030:4;19759:19;;;:12;;;:19;;;;;;:24;;23054:55;19662:129;30654:353;-1:-1:-1;;;;;30773:17:0;;30749:21;30773:17;;;:9;:17;;;;;;30809:23;;;;30801:60;;;;-1:-1:-1;;;30801:60:0;;13113:2:1;30801:60:0;;;13095:21:1;13152:2;13132:18;;;13125:30;-1:-1:-1;;;13171:18:1;;;13164:54;13235:18;;30801:60:0;12911:348:1;30801:60:0;30872:27;30885:6;30892;30872:12;:27::i;:::-;30910:28;30920:9;30931:6;30910:9;:28::i;:::-;30980:9;-1:-1:-1;;;;;30964:33:0;30973:6;-1:-1:-1;;;;;30964:33:0;;30990:6;30964:33;;;;1618:25:1;;1606:2;1591:18;;1472:177;30964:33:0;;;;;;;;30738:269;30654:353;;;:::o;29258:1388::-;-1:-1:-1;;;;;29401:20:0;;;29374:24;29401:20;;;:9;:20;;;;;;;29456:17;;;;;;;;29492:23;;;;29484:60;;;;-1:-1:-1;;;29484:60:0;;13113:2:1;29484:60:0;;;13095:21:1;13152:2;13132:18;;;13125:30;-1:-1:-1;;;13171:18:1;;;13164:54;13235:18;;29484:60:0;12911:348:1;29484:60:0;29557:9;29580:6;29577:428;;;29618:9;;29610:6;:17;;29602:44;;;;-1:-1:-1;;;29602:44:0;;13466:2:1;29602:44:0;;;13448:21:1;13505:2;13485:18;;;13478:30;-1:-1:-1;;;13524:18:1;;;13517:45;13579:18;;29602:44:0;13264:339:1;29602:44:0;-1:-1:-1;29665:8:0;;;;;;;29577:428;;;29696:5;29693:312;;;29733:8;;29725:6;:16;;29717:37;;;;-1:-1:-1;;;29717:37:0;;13810:2:1;29717:37:0;;;13792:21:1;13849:1;13829:18;;;13822:29;-1:-1:-1;;;13867:18:1;;;13860:39;13916:18;;29717:37:0;13608:332:1;29717:37:0;29802:12;;29777:23;29794:6;29777:16;:23;:::i;:::-;:37;;29769:65;;;;-1:-1:-1;;;29769:65:0;;14147:2:1;29769:65:0;;;14129:21:1;14186:2;14166:18;;;14159:30;-1:-1:-1;;;14205:18:1;;;14198:46;14261:18;;29769:65:0;13945:340:1;29769:65:0;-1:-1:-1;29853:7:0;;;;29693:312;;;29928:12;;29903:23;29920:6;29903:16;:23;:::i;:::-;:37;;29895:65;;;;-1:-1:-1;;;29895:65:0;;14147:2:1;29895:65:0;;;14129:21:1;14186:2;14166:18;;;14159:30;-1:-1:-1;;;14205:18:1;;;14198:46;14261:18;;29895:65:0;13945:340:1;29895:65:0;-1:-1:-1;29979:12:0;;;;;;;29693:312;30034:19;;-1:-1:-1;;;;;30026:27:0;;;-1:-1:-1;;;30034:19:0;;;;30026:27;;;;30025:50;;-1:-1:-1;30058:16:0;;;;30057:17;30025:50;:82;;;;-1:-1:-1;30079:27:0;;;;30078:28;30025:82;:90;;;;;30109:6;30025:90;30022:128;;;30130:20;:18;:20::i;:::-;30161:23;30185:36;30199:6;30207:3;30212:8;;;;;;;;;;;30185:13;:36::i;:::-;30293:13;;30161:60;;-1:-1:-1;30232:21:0;;30254:53;;30268:6;;30276:3;;30281:25;;30293:13;;;;;;;-1:-1:-1;;;30281:11:0;;;:25;:::i;:::-;30254:13;:53::i;:::-;30232:75;-1:-1:-1;30318:19:0;30346:31;30232:75;30346:15;:31;:::i;:::-;30338:40;;:6;:40;:::i;:::-;30318:60;;30391:27;30404:6;30411;30391:12;:27::i;:::-;30457:4;30439:24;;;;:9;:24;;;;;:41;;30467:13;;30439:24;:41;;30467:13;;30439:41;:::i;:::-;;;;;;;;30511:15;30491:18;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;30539:33:0;;-1:-1:-1;30549:9:0;30560:11;30539:9;:33::i;:::-;30614:9;-1:-1:-1;;;;;30598:38:0;30607:6;-1:-1:-1;;;;;30598:38:0;;30624:11;30598:38;;;;1618:25:1;;1606:2;1591:18;;1472:177;30598:38:0;;;;;;;;29363:1283;;;;;;29258:1388;;;;;:::o;32822:455::-;32915:14;;32883:56;;32900:4;;-1:-1:-1;;;;;32915:14:0;32932:6;32883:8;:56::i;:::-;32974:16;;;32988:1;32974:16;;;;;;;;32950:21;;32974:16;;;;;;;;;;-1:-1:-1;32974:16:0;32950:40;;33019:4;33001;33006:1;33001:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33001:23:0;;;:7;;;;;;;;;;:23;;;;33045:14;;:21;;;-1:-1:-1;;;33045:21:0;;;;:14;;;;;:19;;:21;;;;;33001:7;;33045:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33035:4;33040:1;33035:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33035:31:0;;;:7;;;;;;;;;:31;33079:14;;:190;;-1:-1:-1;;;33079:190:0;;:14;;;:65;;:190;;33159:6;;33079:14;;33196:4;;33223;;33243:15;;33079:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32872:405;32822:455;:::o;33284:397::-;33378:9;33366:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;33430:14:0;;33398:61;;33415:4;;-1:-1:-1;;;;;33430:14:0;33447:11;33398:8;:61::i;:::-;33470:14;;:203;;-1:-1:-1;;;33470:203:0;;-1:-1:-1;;;;;33470:14:0;;;;:30;;33508:9;;33470:203;;33541:4;;33561:11;;33470:14;;;;33541:4;;33647:15;;33470:203;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33284:397;;:::o;31349:155::-;-1:-1:-1;;;;;31438:15:0;;31420:17;31438:15;;;:9;:15;;;;;;:22;;31454:6;;31438:22;:::i;:::-;-1:-1:-1;;;;;31471:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;;31349:155:0:o;31183:152::-;-1:-1:-1;;;;;31269:15:0;;31251:17;31269:15;;;:9;:15;;;;;;:22;;31285:6;;31269:22;:::i;31017:156::-;31107:7;31160:5;31146:10;31135:21;;31142:3;31135:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;31134:31;;;;:::i;:::-;31127:38;31017:156;-1:-1:-1;;;;31017:156:0:o;222:597:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;824:131::-;-1:-1:-1;;;;;899:31:1;;889:42;;879:70;;945:1;942;935:12;960:315;1028:6;1036;1089:2;1077:9;1068:7;1064:23;1060:32;1057:52;;;1105:1;1102;1095:12;1057:52;1144:9;1131:23;1163:31;1188:5;1163:31;:::i;:::-;1213:5;1265:2;1250:18;;;;1237:32;;-1:-1:-1;;;960:315:1:o;1654:118::-;1740:5;1733:13;1726:21;1719:5;1716:32;1706:60;;1762:1;1759;1752:12;1777:241;1833:6;1886:2;1874:9;1865:7;1861:23;1857:32;1854:52;;;1902:1;1899;1892:12;1854:52;1941:9;1928:23;1960:28;1982:5;1960:28;:::i;2023:456::-;2100:6;2108;2116;2169:2;2157:9;2148:7;2144:23;2140:32;2137:52;;;2185:1;2182;2175:12;2137:52;2224:9;2211:23;2243:31;2268:5;2243:31;:::i;:::-;2293:5;-1:-1:-1;2350:2:1;2335:18;;2322:32;2363:33;2322:32;2363:33;:::i;:::-;2023:456;;2415:7;;-1:-1:-1;;;2469:2:1;2454:18;;;;2441:32;;2023:456::o;3213:247::-;3272:6;3325:2;3313:9;3304:7;3300:23;3296:32;3293:52;;;3341:1;3338;3331:12;3293:52;3380:9;3367:23;3399:31;3424:5;3399:31;:::i;3465:156::-;3531:20;;3591:4;3580:16;;3570:27;;3560:55;;3611:1;3608;3601:12;3560:55;3465:156;;;:::o;3626:535::-;3718:6;3726;3734;3742;3750;3758;3811:3;3799:9;3790:7;3786:23;3782:33;3779:53;;;3828:1;3825;3818:12;3779:53;3851:27;3868:9;3851:27;:::i;:::-;3841:37;;3897:36;3929:2;3918:9;3914:18;3897:36;:::i;:::-;3887:46;;3952:36;3984:2;3973:9;3969:18;3952:36;:::i;:::-;3942:46;;4007:36;4039:2;4028:9;4024:18;4007:36;:::i;:::-;3997:46;;4062:37;4094:3;4083:9;4079:19;4062:37;:::i;:::-;4052:47;;4118:37;4150:3;4139:9;4135:19;4118:37;:::i;:::-;4108:47;;3626:535;;;;;;;;:::o;4419:252::-;4483:6;4491;4544:2;4532:9;4523:7;4519:23;4515:32;4512:52;;;4560:1;4557;4550:12;4512:52;4583:27;4600:9;4583:27;:::i;:::-;4573:37;;4629:36;4661:2;4650:9;4646:18;4629:36;:::i;:::-;4619:46;;4419:252;;;;;:::o;4676:316::-;4753:6;4761;4769;4822:2;4810:9;4801:7;4797:23;4793:32;4790:52;;;4838:1;4835;4828:12;4790:52;-1:-1:-1;;4861:23:1;;;4931:2;4916:18;;4903:32;;-1:-1:-1;4982:2:1;4967:18;;;4954:32;;4676:316;-1:-1:-1;4676:316:1:o;4997:388::-;5065:6;5073;5126:2;5114:9;5105:7;5101:23;5097:32;5094:52;;;5142:1;5139;5132:12;5094:52;5181:9;5168:23;5200:31;5225:5;5200:31;:::i;:::-;5250:5;-1:-1:-1;5307:2:1;5292:18;;5279:32;5320:33;5279:32;5320:33;:::i;:::-;5372:7;5362:17;;;4997:388;;;;;:::o;5390:356::-;5592:2;5574:21;;;5611:18;;;5604:30;5670:34;5665:2;5650:18;;5643:62;5737:2;5722:18;;5390:356::o;5751:127::-;5812:10;5807:3;5803:20;5800:1;5793:31;5843:4;5840:1;5833:15;5867:4;5864:1;5857:15;5883:422;5972:1;6015:5;5972:1;6029:270;6050:7;6040:8;6037:21;6029:270;;;6109:4;6105:1;6101:6;6097:17;6091:4;6088:27;6085:53;;;6118:18;;:::i;:::-;6168:7;6158:8;6154:22;6151:55;;;6188:16;;;;6151:55;6267:22;;;;6227:15;;;;6029:270;;;6033:3;5883:422;;;;;:::o;6310:806::-;6359:5;6389:8;6379:80;;-1:-1:-1;6430:1:1;6444:5;;6379:80;6478:4;6468:76;;-1:-1:-1;6515:1:1;6529:5;;6468:76;6560:4;6578:1;6573:59;;;;6646:1;6641:130;;;;6553:218;;6573:59;6603:1;6594:10;;6617:5;;;6641:130;6678:3;6668:8;6665:17;6662:43;;;6685:18;;:::i;:::-;-1:-1:-1;;6741:1:1;6727:16;;6756:5;;6553:218;;6855:2;6845:8;6842:16;6836:3;6830:4;6827:13;6823:36;6817:2;6807:8;6804:16;6799:2;6793:4;6790:12;6786:35;6783:77;6780:159;;;-1:-1:-1;6892:19:1;;;6924:5;;6780:159;6971:34;6996:8;6990:4;6971:34;:::i;:::-;7041:6;7037:1;7033:6;7029:19;7020:7;7017:32;7014:58;;;7052:18;;:::i;:::-;7090:20;;6310:806;-1:-1:-1;;;6310:806:1:o;7121:140::-;7179:5;7208:47;7249:4;7239:8;7235:19;7229:4;7208:47;:::i;7266:168::-;7306:7;7372:1;7368;7364:6;7360:14;7357:1;7354:21;7349:1;7342:9;7335:17;7331:45;7328:71;;;7379:18;;:::i;:::-;-1:-1:-1;7419:9:1;;7266:168::o;7788:125::-;7828:4;7856:1;7853;7850:8;7847:34;;;7861:18;;:::i;:::-;-1:-1:-1;7898:9:1;;7788:125::o;7918:128::-;7958:3;7989:1;7985:6;7982:1;7979:13;7976:39;;;7995:18;;:::i;:::-;-1:-1:-1;8031:9:1;;7918:128::o;8261:204::-;8299:3;8335:4;8332:1;8328:12;8367:4;8364:1;8360:12;8402:3;8396:4;8392:14;8387:3;8384:23;8381:49;;;8410:18;;:::i;:::-;8446:13;;8261:204;-1:-1:-1;;;8261:204:1:o;8877:217::-;8917:1;8943;8933:132;;8987:10;8982:3;8978:20;8975:1;8968:31;9022:4;9019:1;9012:15;9050:4;9047:1;9040:15;8933:132;-1:-1:-1;9079:9:1;;8877:217::o;9099:184::-;9169:6;9222:2;9210:9;9201:7;9197:23;9193:32;9190:52;;;9238:1;9235;9228:12;9190:52;-1:-1:-1;9261:16:1;;9099:184;-1:-1:-1;9099:184:1:o;9567:245::-;9634:6;9687:2;9675:9;9666:7;9662:23;9658:32;9655:52;;;9703:1;9700;9693:12;9655:52;9735:9;9729:16;9754:28;9776:5;9754:28;:::i;9817:607::-;-1:-1:-1;;;;;10176:15:1;;;10158:34;;10223:2;10208:18;;10201:34;;;;10266:2;10251:18;;10244:34;;;;10309:2;10294:18;;10287:34;;;;10358:15;;;10352:3;10337:19;;10330:44;10138:3;10390:19;;10383:35;;;;10107:3;10092:19;;9817:607::o;14422:127::-;14483:10;14478:3;14474:20;14471:1;14464:31;14514:4;14511:1;14504:15;14538:4;14535:1;14528:15;14554:251;14624:6;14677:2;14665:9;14656:7;14652:23;14648:32;14645:52;;;14693:1;14690;14683:12;14645:52;14725:9;14719:16;14744:31;14769:5;14744:31;:::i;14810:980::-;15072:4;15120:3;15109:9;15105:19;15151:6;15140:9;15133:25;15177:2;15215:6;15210:2;15199:9;15195:18;15188:34;15258:3;15253:2;15242:9;15238:18;15231:31;15282:6;15317;15311:13;15348:6;15340;15333:22;15386:3;15375:9;15371:19;15364:26;;15425:2;15417:6;15413:15;15399:29;;15446:1;15456:195;15470:6;15467:1;15464:13;15456:195;;;15535:13;;-1:-1:-1;;;;;15531:39:1;15519:52;;15626:15;;;;15591:12;;;;15567:1;15485:9;15456:195;;;-1:-1:-1;;;;;;;15707:32:1;;;;15702:2;15687:18;;15680:60;-1:-1:-1;;;15771:3:1;15756:19;15749:35;15668:3;14810:980;-1:-1:-1;;;14810:980:1:o;15795:306::-;15883:6;15891;15899;15952:2;15940:9;15931:7;15927:23;15923:32;15920:52;;;15968:1;15965;15958:12;15920:52;15997:9;15991:16;15981:26;;16047:2;16036:9;16032:18;16026:25;16016:35;;16091:2;16080:9;16076:18;16070:25;16060:35;;15795:306;;;;;:::o

Swarm Source

ipfs://66250bc70bb0171055dc50feaf19836d6ad9579e59b45a66a445713694550133
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.