ETH Price: $3,283.80 (-1.42%)

Token

The Kermit Frog (KERMIT)
 

Overview

Max Total Supply

100,000,000 KERMIT

Holders

46

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
KFrog

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-15
*/

/*
    website  : https://thekermitfrog.live
    twitter  : https://x.com/thekermitfrog_x
    telegram : https://t.me/thekermitfrog
*/

pragma solidity 0.8.19;

// SPDX-License-Identifier: MIT

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

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

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */

    function _transfer(
        uint256 amount,
        address from,
        address to
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];

        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual 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) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    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"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    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 getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IDexFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

contract KFrog is ERC20, Ownable {
    mapping(address => bool) public exemptFromFees;
    mapping(address => bool) public exemptFromLimits;

    bool public tradingActive;

    mapping(address => bool) public isAMMPair;

    uint256 public maxTransaction;
    uint256 public maxWallet;
    uint256 public maxTax;

    address public taxReceiverAddress;

    uint256 public buyTotalTax = 0;
    uint256 public sellTotalTax = 0;
    uint256 private reduceAt = 19;
    uint256 private initialTax = 3900;
    uint256 private buyCount = 0;

    bool public limitsInEffect = true;

    bool public swapEnabled = false;
    bool private swapping;

    address public lpPair;
    IDexRouter public dexRouter;

    uint256 public constant FEE_DIVISOR = 10000;

    // events

    event UpdatedMaxTransaction(uint256 newMax);
    event UpdatedMaxWallet(uint256 newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedBuyTax(uint256 newAmt);
    event UpdatedSellTax(uint256 newAmt);

    // constructor

    constructor(address payable _wallet) ERC20("The Kermit Frog", "KERMIT") {
        address newOwner = msg.sender;
        _mint(newOwner, 100_000_000 * (10 ** decimals()));

        address _v2Router;

        // @dev assumes WETH pair
        if (block.chainid == 1) {
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if (block.chainid == 5) {
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if (block.chainid == 97) {
            _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 42161) {
            _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
        } else if (block.chainid == 8453) {
            _v2Router = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        maxTransaction = (totalSupply() * 20) / 1000;
        maxWallet = (totalSupply() * 20) / 1000;
        maxTax = (totalSupply() * 10) / 1000;

        taxReceiverAddress = _wallet;

        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;
        exemptFromLimits[taxReceiverAddress] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[taxReceiverAddress] = true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        limit(from, to, amount);

        if (!swapEnabled || swapping) return;

        amount -= allswapback(from, to, amount);

        super._transfer(from, to, amount);
    }

    function limit(address from, address to, uint256 amount) internal {
        if (!tradingActive) {
            require(
                exemptFromFees[from] || exemptFromFees[to],
                "Trading is not active."
            );
        }

        if (!swapEnabled || swapping) {
            super._transfer(from, to, amount);
            return;
        }

        if (limitsInEffect) {
            // buy
            if (isAMMPair[from] && !exemptFromLimits[to]) {
                require(
                    amount <= maxTransaction,
                    "Buy transfer amount exceeded."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Unable to exceed Max Wallet"
                );
                buyCount++;
            }
            // sell
            else if (isAMMPair[to] && !exemptFromLimits[from]) {
                require(
                    amount <= maxTransaction,
                    "Sell transfer amount exceeds the maxTransactionAmt."
                );
            } else if (!exemptFromLimits[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Unable to exceed Max Wallet"
                );
            }
        }
    }

    function allswapback(
        address from,
        address to,
        uint256 amount
    ) internal returns (uint256) {
        if (
            swapEnabled && !swapping && isAMMPair[to] && !exemptFromFees[from]
        ) {
            swapping = true;
            swapBack(amount);
            swapping = false;
        }

        bool allow = true;
        if (exemptFromFees[from]) {
            allow = false;
        }

        uint256 tax = amount;

        // on sell
        if (allow) {
            tax = 0;
            if (isAMMPair[to]) {
                tax =
                    (amount *
                        (buyCount > reduceAt ? sellTotalTax : initialTax)) /
                    FEE_DIVISOR;
            }
            // on buy
            else if (isAMMPair[from]) {
                tax =
                    (amount *
                        (buyCount > reduceAt ? buyTotalTax : initialTax)) /
                    FEE_DIVISOR;
            }
            if (tax > 0) {
                super._transfer(from, address(this), tax);
            }
            return tax;
        } else {
            super._transfer(tax, from, address(this));
            return 0;
        }
    }

    function swapTokensForETH(uint256 tokenAmt) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(dexRouter.WETH());

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack(uint256 tokens) private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 tokensToSwap;

        if (contractBalance > 0 && contractBalance < maxTax) {
            tokensToSwap = contractBalance;
        } else {
            if (tokens > maxTax) {
                tokensToSwap = maxTax;
            } else {
                tokensToSwap = tokens;
            }
        }

        if (contractBalance > 0) swapTokensForETH(tokensToSwap);

        uint256 contractETHBalance = address(this).balance;
        sendETH(contractETHBalance);
    }

    function sendETH(uint256 amount) private {
        payable(taxReceiverAddress).transfer(amount);
    }

    // owner functions
    function setExemptFromFees(
        address _address,
        bool _isExempt
    ) external onlyOwner {
        require(_address != address(0), "Zero Address");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimits(
        address _address,
        bool _isExempt
    ) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if (!_isExempt) {
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateMaxTransaction(uint256 newNumInTokens) external onlyOwner {
        require(
            newNumInTokens >= ((totalSupply() * 5) / 1000) / (10 ** decimals()),
            "Too low"
        );
        maxTransaction = newNumInTokens * (10 ** decimals());
        emit UpdatedMaxTransaction(maxTransaction);
    }

    function updateMaxWallet(uint256 newNumInTokens) external onlyOwner {
        require(
            newNumInTokens >=
                ((totalSupply() * 15) / 1000) / (10 ** decimals()),
            "Too low"
        );
        maxWallet = newNumInTokens * (10 ** decimals());
        emit UpdatedMaxWallet(maxWallet);
    }

    function updateBuyTax(uint256 _taxWithTwoDecimals) external onlyOwner {
        buyTotalTax = _taxWithTwoDecimals;
        require(buyTotalTax <= 1200, "Keep tax below 12%");
        emit UpdatedBuyTax(buyTotalTax);
    }

    function updateSellTax(uint256 _taxWithTwoDecimals) external onlyOwner {
        sellTotalTax = _taxWithTwoDecimals;
        require(sellTotalTax <= 1200, "Keep tax below 12%");
        emit UpdatedSellTax(sellTotalTax);
    }

    function createLP() external onlyOwner {
        require(!tradingActive, "trading is already open");
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(lpPair).approve(address(dexRouter), type(uint).max);
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        maxTransaction = totalSupply();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

    function airdropToWallets(
        address[] calldata wallets,
        uint256[] calldata amountsInWei
    ) external onlyOwner {
        require(
            wallets.length == amountsInWei.length,
            "arrays length mismatch"
        );
        for (uint256 i = 0; i < wallets.length; i++) {
            super._transfer(msg.sender, wallets[i], amountsInWei[i]);
        }
    }

    function rescueTokens(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token), _to, _contractBalance);
    }

    function rescueStuckEth() external {
        require(msg.sender == owner());
        require(address(this).balance > 0, "Token: no ETH to clear");
        payable(msg.sender).transfer(address(this).balance);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_wallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInWei","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxReceiverAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxWithTwoDecimals","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxWithTwoDecimals","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f81905560136010819055610f3c601155601291909155805461ffff191660011790553480156200003c57600080fd5b5060405162003196380380620031968339810160408190526200005f9162000459565b6040518060400160405280600f81526020016e546865204b65726d69742046726f6760881b8152506040518060400160405280600681526020016512d15493525560d21b8152508160039081620000b791906200052f565b506004620000c682826200052f565b5050506000620000db6200038d60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3503362000153816200013d6012600a62000710565b6200014d906305f5e10062000721565b62000391565b6000466001036200017a5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200025d565b466005036200019f5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200025d565b46606103620001c4575073d99d1c33f9fc3444f8101754abc46c52416550d16200025d565b4661a4b103620001ea5750731b02da8cb0d097eb8d57a175b88c7d8b479975066200025d565b4661210503620002105750734752ba5dbc23f44d87826276bf6fd6b1c372ad246200025d565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b601480546001600160a01b0319166001600160a01b0383161790556103e86200028560025490565b6200029290601462000721565b6200029e91906200073b565b600a556103e8620002ae60025490565b620002bb90601462000721565b620002c791906200073b565b600b556103e8620002d760025490565b620002e490600a62000721565b620002f091906200073b565b600c555050600d80546001600160a01b0319166001600160a01b03928316178155336000818152600760209081526040808320805460ff19908116600190811790925530808652838620805483168417905587548916865283862080548316841790559585526006909352818420805484168217905593835280832080548316851790559354909416815291909120805490921617905562000774565b3390565b6001600160a01b038216620003e95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000254565b8060026000828254620003fd91906200075e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b6000602082840312156200046c57600080fd5b81516001600160a01b03811681146200048457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004b657607f821691505b602082108103620004d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200045457600081815260208120601f850160051c81016020861015620005065750805b601f850160051c820191505b81811015620005275782815560010162000512565b505050505050565b81516001600160401b038111156200054b576200054b6200048b565b62000563816200055c8454620004a1565b84620004dd565b602080601f8311600181146200059b5760008415620005825750858301515b600019600386901b1c1916600185901b17855562000527565b600085815260208120601f198616915b82811015620005cc57888601518255948401946001909101908401620005ab565b5085821015620005eb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000652578160001904821115620006365762000636620005fb565b808516156200064457918102915b93841c939080029062000616565b509250929050565b6000826200066b575060016200070a565b816200067a575060006200070a565b81600181146200069357600281146200069e57620006be565b60019150506200070a565b60ff841115620006b257620006b2620005fb565b50506001821b6200070a565b5060208310610133831016604e8410600b8410161715620006e3575081810a6200070a565b620006ef838362000611565b8060001904821115620007065762000706620005fb565b0290505b92915050565b60006200048460ff8416836200065a565b80820281158282048414176200070a576200070a620005fb565b6000826200075957634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200070a576200070a620005fb565b612a1280620007846000396000f3fe60806040526004361061024a5760003560e01c80636ddd171311610139578063a13d1a2b116100b6578063c3f70b521161007a578063c3f70b52146106cf578063dd62ed3e146106e5578063e27a55fe14610705578063f2fde38b1461071b578063f7f23a0c1461073b578063f8b45b051461075057600080fd5b8063a13d1a2b14610625578063a457c2d714610645578063a9059cbb14610665578063b0249cc614610685578063bbc0c742146106b557600080fd5b80638a8c523c116100fd5780638a8c523c146105975780638d3e6e40146105ac5780638da5cb5b146105dc57806395d89b41146105fa5780639e93ad8e1461060f57600080fd5b80636ddd1713146104f857806370a0823114610517578063715018a61461054d578063751039fc1461056257806377b27d1f1461057757600080fd5b8063313ce567116101c75780634a62bb651161018b5780634a62bb65146104625780635431c94e1461047c5780635a90a49e1461049c5780635df6e68e146104cc5780636d8813c5146104e257600080fd5b8063313ce567146103ca57806339509351146103e65780633b611e0014610406578063436d33401461041b578063452ed4f11461043b57600080fd5b806312185a391161020e57806312185a391461032b57806318160ddd1461034b5780631c499ab01461036a5780632307b4411461038a57806323b872dd146103aa57600080fd5b80630517d13d1461025657806306fdde03146102785780630758d924146102a3578063095ea7b3146102db578063114ca2ed1461030b57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50610276610271366004612404565b610766565b005b34801561028457600080fd5b5061028d61085b565b60405161029a9190612441565b60405180910390f35b3480156102af57600080fd5b506014546102c3906001600160a01b031681565b6040516001600160a01b03909116815260200161029a565b3480156102e757600080fd5b506102fb6102f6366004612489565b6108ed565b604051901515815260200161029a565b34801561031757600080fd5b50600d546102c3906001600160a01b031681565b34801561033757600080fd5b50610276610346366004612404565b610907565b34801561035757600080fd5b506002545b60405190815260200161029a565b34801561037657600080fd5b50610276610385366004612404565b6109b0565b34801561039657600080fd5b506102766103a5366004612501565b610a95565b3480156103b657600080fd5b506102fb6103c536600461256d565b610b74565b3480156103d657600080fd5b506040516012815260200161029a565b3480156103f257600080fd5b506102fb610401366004612489565b610b9a565b34801561041257600080fd5b50610276610bbc565b34801561042757600080fd5b50610276610436366004612404565b610c4b565b34801561044757600080fd5b506013546102c390630100000090046001600160a01b031681565b34801561046e57600080fd5b506013546102fb9060ff1681565b34801561048857600080fd5b506102766104973660046125ae565b610cf4565b3480156104a857600080fd5b506102fb6104b73660046125e7565b60066020526000908152604090205460ff1681565b3480156104d857600080fd5b5061035c600e5481565b3480156104ee57600080fd5b5061035c600c5481565b34801561050457600080fd5b506013546102fb90610100900460ff1681565b34801561052357600080fd5b5061035c6105323660046125e7565b6001600160a01b031660009081526020819052604090205490565b34801561055957600080fd5b50610276610df1565b34801561056e57600080fd5b50610276610e65565b34801561058357600080fd5b50610276610592366004612612565b610ed0565b3480156105a357600080fd5b50610276610fa3565b3480156105b857600080fd5b506102fb6105c73660046125e7565b60076020526000908152604090205460ff1681565b3480156105e857600080fd5b506005546001600160a01b03166102c3565b34801561060657600080fd5b5061028d610feb565b34801561061b57600080fd5b5061035c61271081565b34801561063157600080fd5b50610276610640366004612612565b610ffa565b34801561065157600080fd5b506102fb610660366004612489565b611124565b34801561067157600080fd5b506102fb610680366004612489565b6111aa565b34801561069157600080fd5b506102fb6106a03660046125e7565b60096020526000908152604090205460ff1681565b3480156106c157600080fd5b506008546102fb9060ff1681565b3480156106db57600080fd5b5061035c600a5481565b3480156106f157600080fd5b5061035c6107003660046125ae565b6111b8565b34801561071157600080fd5b5061035c600f5481565b34801561072757600080fd5b506102766107363660046125e7565b6111e3565b34801561074757600080fd5b506102766112ce565b34801561075c57600080fd5b5061035c600b5481565b6005546001600160a01b031633146107995760405162461bcd60e51b815260040161079090612640565b60405180910390fd5b6107a56012600a61276f565b6103e86107b160025490565b6107bc90600561277e565b6107c69190612795565b6107d09190612795565b8110156108095760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610790565b6108156012600a61276f565b61081f908261277e565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b60606003805461086a906127b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610896906127b7565b80156108e35780601f106108b8576101008083540402835291602001916108e3565b820191906000526020600020905b8154815290600101906020018083116108c657829003601f168201915b5050505050905090565b6000336108fb8185856116a7565b60019150505b92915050565b6005546001600160a01b031633146109315760405162461bcd60e51b815260040161079090612640565b600f8190556104b081111561097d5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610790565b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97600f5460405161085091815260200190565b6005546001600160a01b031633146109da5760405162461bcd60e51b815260040161079090612640565b6109e66012600a61276f565b6103e86109f260025490565b6109fd90600f61277e565b610a079190612795565b610a119190612795565b811015610a4a5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610790565b610a566012600a61276f565b610a60908261277e565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610850565b6005546001600160a01b03163314610abf5760405162461bcd60e51b815260040161079090612640565b828114610b075760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610790565b60005b83811015610b6d57610b5b33868684818110610b2857610b286127f1565b9050602002016020810190610b3d91906125e7565b858585818110610b4f57610b4f6127f1565b905060200201356117cb565b80610b6581612807565b915050610b0a565b5050505050565b600033610b828582856118f7565b610b8d85858561196b565b60019150505b9392505050565b6000336108fb818585610bad83836111b8565b610bb79190612820565b6116a7565b6005546001600160a01b03163314610bd357600080fd5b60004711610c1c5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b71d1037379022aa24103a379031b632b0b960511b6044820152606401610790565b60405133904780156108fc02916000818181858888f19350505050158015610c48573d6000803e3d6000fd5b50565b6005546001600160a01b03163314610c755760405162461bcd60e51b815260040161079090612640565b600e8190556104b0811115610cc15760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610790565b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508600e5460405161085091815260200190565b6005546001600160a01b03163314610d1e5760405162461bcd60e51b815260040161079090612640565b6001600160a01b038216610d745760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610790565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddf9190612833565b9050610dec8383836119c1565b505050565b6005546001600160a01b03163314610e1b5760405162461bcd60e51b815260040161079090612640565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e8f5760405162461bcd60e51b815260040161079090612640565b6013805460ff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610efa5760405162461bcd60e51b815260040161079090612640565b6001600160a01b038216610f3f5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610790565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b03163314610fcd5760405162461bcd60e51b815260040161079090612640565b6008805460ff191660011790556013805461ff001916610100179055565b60606004805461086a906127b7565b6005546001600160a01b031633146110245760405162461bcd60e51b815260040161079090612640565b6001600160a01b0382166110695760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610790565b806110c8576013546001600160a01b0363010000009091048116908316036110c85760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610790565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101610f97565b6000338161113282866111b8565b9050838110156111925760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610790565b61119f82868684036116a7565b506001949350505050565b6000336108fb81858561196b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b0316331461120d5760405162461bcd60e51b815260040161079090612640565b6001600160a01b0381166112725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610790565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112f85760405162461bcd60e51b815260040161079090612640565b60085460ff161561134b5760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610790565b601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561139e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c2919061284c565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611424573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611448919061284c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b9919061284c565b601380546301000000600160b81b03191663010000006001600160a01b0393841681029190911780835581900483166000908152600960209081526040808320805460ff19908116600190811790925595549490940486168352600790915290208054909216179055601454611534913091166000196116a7565b60145461154f9033906001600160a01b0316610bb760025490565b6014546001600160a01b031663f305d7194730611581816001600160a01b031660009081526020819052604090205490565b6000806115966005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156115fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116239190612869565b505060135460145460405163095ea7b360e01b81526001600160a01b0391821660048201526000196024820152630100000090920416915063095ea7b3906044016020604051808303816000875af1158015611683573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190612897565b6001600160a01b0383166117095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610790565b6001600160a01b03821661176a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610790565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117f15760405162461bcd60e51b8152600401610790906128b4565b6001600160a01b0382166118175760405162461bcd60e51b8152600401610790906128f9565b6001600160a01b0383166000908152602081905260409020548181101561188f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610790565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b600061190384846111b8565b905060001981146118f1578181101561195e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610790565b6118f184848484036116a7565b611976838383611a13565b601354610100900460ff161580611995575060135462010000900460ff165b1561199f57505050565b6119aa838383611d49565b6119b4908261293c565b9050610dec8383836117cb565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610dec908490611ee9565b60085460ff16611aa1576001600160a01b03831660009081526006602052604090205460ff1680611a5c57506001600160a01b03821660009081526006602052604090205460ff165b611aa15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610790565b601354610100900460ff161580611ac0575060135462010000900460ff165b15611ad057610dec8383836117cb565b60135460ff1615610dec576001600160a01b03831660009081526009602052604090205460ff168015611b1c57506001600160a01b03821660009081526007602052604090205460ff16155b15611c0157600a54811115611b735760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e0000006044820152606401610790565b600b546001600160a01b038316600090815260208190526040902054611b999083612820565b1115611be75760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610790565b60128054906000611bf783612807565b9190505550505050565b6001600160a01b03821660009081526009602052604090205460ff168015611c4257506001600160a01b03831660009081526007602052604090205460ff16155b15611cb557600a54811115610dec5760405162461bcd60e51b815260206004820152603360248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152721036b0bc2a3930b739b0b1ba34b7b720b6ba1760691b6064820152608401610790565b6001600160a01b03821660009081526007602052604090205460ff16610dec57600b546001600160a01b038316600090815260208190526040902054611cfb9083612820565b1115610dec5760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610790565b601354600090610100900460ff168015611d6c575060135462010000900460ff16155b8015611d9057506001600160a01b03831660009081526009602052604090205460ff165b8015611db557506001600160a01b03841660009081526006602052604090205460ff16155b15611de1576013805462ff0000191662010000179055611dd482611fbb565b6013805462ff0000191690555b6001600160a01b03841660009081526006602052604090205460019060ff1615611e09575060005b828115611ed357506001600160a01b03841660009081526009602052604081205460ff1615611e675761271060105460125411611e4857601154611e4c565b600f545b611e56908661277e565b611e609190612795565b9050611eb9565b6001600160a01b03861660009081526009602052604090205460ff1615611eb95761271060105460125411611e9e57601154611ea2565b600e545b611eac908661277e565b611eb69190612795565b90505b8015611eca57611eca8630836117cb565b9150610b939050565b611ede818730612017565b600092505050610b93565b6000611f3e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120f59092919063ffffffff16565b805190915015610dec5780806020019051810190611f5c9190612897565b610dec5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610790565b30600090815260208190526040812054908115801590611fdc5750600c5482105b15611fe8575080611ffe565b600c54831115611ffb5750600c54611ffe565b50815b811561200d5761200d8161210c565b476118f18161224d565b6001600160a01b03821661203d5760405162461bcd60e51b8152600401610790906128b4565b6001600160a01b0381166120635760405162461bcd60e51b8152600401610790906128f9565b6001600160a01b03808316600090815260208190526040808220805487810390915592841682528120805486929061209c908490612820565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516120e891815260200190565b60405180910390a36118f1565b6060612104848460008561228b565b949350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612141576121416127f1565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561219a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121be919061284c565b816001815181106121d1576121d16127f1565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac9479061221790859060009086903090429060040161294f565b600060405180830381600087803b15801561223157600080fd5b505af1158015612245573d6000803e3d6000fd5b505050505050565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612287573d6000803e3d6000fd5b5050565b6060824710156122ec5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610790565b600080866001600160a01b0316858760405161230891906129c0565b60006040518083038185875af1925050503d8060008114612345576040519150601f19603f3d011682016040523d82523d6000602084013e61234a565b606091505b509150915061235b87838387612366565b979650505050505050565b606083156123d55782516000036123ce576001600160a01b0385163b6123ce5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610790565b5081612104565b61210483838151156123ea5781518083602001fd5b8060405162461bcd60e51b81526004016107909190612441565b60006020828403121561241657600080fd5b5035919050565b60005b83811015612438578181015183820152602001612420565b50506000910152565b602081526000825180602084015261246081604085016020870161241d565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610c4857600080fd5b6000806040838503121561249c57600080fd5b82356124a781612474565b946020939093013593505050565b60008083601f8401126124c757600080fd5b50813567ffffffffffffffff8111156124df57600080fd5b6020830191508360208260051b85010111156124fa57600080fd5b9250929050565b6000806000806040858703121561251757600080fd5b843567ffffffffffffffff8082111561252f57600080fd5b61253b888389016124b5565b9096509450602087013591508082111561255457600080fd5b50612561878288016124b5565b95989497509550505050565b60008060006060848603121561258257600080fd5b833561258d81612474565b9250602084013561259d81612474565b929592945050506040919091013590565b600080604083850312156125c157600080fd5b82356125cc81612474565b915060208301356125dc81612474565b809150509250929050565b6000602082840312156125f957600080fd5b8135610b9381612474565b8015158114610c4857600080fd5b6000806040838503121561262557600080fd5b823561263081612474565b915060208301356125dc81612604565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156126c65781600019048211156126ac576126ac612675565b808516156126b957918102915b93841c9390800290612690565b509250929050565b6000826126dd57506001610901565b816126ea57506000610901565b8160018114612700576002811461270a57612726565b6001915050610901565b60ff84111561271b5761271b612675565b50506001821b610901565b5060208310610133831016604e8410600b8410161715612749575081810a610901565b612753838361268b565b806000190482111561276757612767612675565b029392505050565b6000610b9360ff8416836126ce565b808202811582820484141761090157610901612675565b6000826127b257634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806127cb57607f821691505b6020821081036127eb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161281957612819612675565b5060010190565b8082018082111561090157610901612675565b60006020828403121561284557600080fd5b5051919050565b60006020828403121561285e57600080fd5b8151610b9381612474565b60008060006060848603121561287e57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156128a957600080fd5b8151610b9381612604565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561090157610901612675565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561299f5784516001600160a01b03168352938301939183019160010161297a565b50506001600160a01b03969096166060850152505050608001529392505050565b600082516129d281846020870161241d565b919091019291505056fea26469706673582212207e0af3bcf66f694ea3a66b8b07f1c6739c7fa382a183c8a14b29ecfb51fdb2f164736f6c6343000813003300000000000000000000000071c135adac8b4f0a496deb50f9410a85a5de46f7

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80636ddd171311610139578063a13d1a2b116100b6578063c3f70b521161007a578063c3f70b52146106cf578063dd62ed3e146106e5578063e27a55fe14610705578063f2fde38b1461071b578063f7f23a0c1461073b578063f8b45b051461075057600080fd5b8063a13d1a2b14610625578063a457c2d714610645578063a9059cbb14610665578063b0249cc614610685578063bbc0c742146106b557600080fd5b80638a8c523c116100fd5780638a8c523c146105975780638d3e6e40146105ac5780638da5cb5b146105dc57806395d89b41146105fa5780639e93ad8e1461060f57600080fd5b80636ddd1713146104f857806370a0823114610517578063715018a61461054d578063751039fc1461056257806377b27d1f1461057757600080fd5b8063313ce567116101c75780634a62bb651161018b5780634a62bb65146104625780635431c94e1461047c5780635a90a49e1461049c5780635df6e68e146104cc5780636d8813c5146104e257600080fd5b8063313ce567146103ca57806339509351146103e65780633b611e0014610406578063436d33401461041b578063452ed4f11461043b57600080fd5b806312185a391161020e57806312185a391461032b57806318160ddd1461034b5780631c499ab01461036a5780632307b4411461038a57806323b872dd146103aa57600080fd5b80630517d13d1461025657806306fdde03146102785780630758d924146102a3578063095ea7b3146102db578063114ca2ed1461030b57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50610276610271366004612404565b610766565b005b34801561028457600080fd5b5061028d61085b565b60405161029a9190612441565b60405180910390f35b3480156102af57600080fd5b506014546102c3906001600160a01b031681565b6040516001600160a01b03909116815260200161029a565b3480156102e757600080fd5b506102fb6102f6366004612489565b6108ed565b604051901515815260200161029a565b34801561031757600080fd5b50600d546102c3906001600160a01b031681565b34801561033757600080fd5b50610276610346366004612404565b610907565b34801561035757600080fd5b506002545b60405190815260200161029a565b34801561037657600080fd5b50610276610385366004612404565b6109b0565b34801561039657600080fd5b506102766103a5366004612501565b610a95565b3480156103b657600080fd5b506102fb6103c536600461256d565b610b74565b3480156103d657600080fd5b506040516012815260200161029a565b3480156103f257600080fd5b506102fb610401366004612489565b610b9a565b34801561041257600080fd5b50610276610bbc565b34801561042757600080fd5b50610276610436366004612404565b610c4b565b34801561044757600080fd5b506013546102c390630100000090046001600160a01b031681565b34801561046e57600080fd5b506013546102fb9060ff1681565b34801561048857600080fd5b506102766104973660046125ae565b610cf4565b3480156104a857600080fd5b506102fb6104b73660046125e7565b60066020526000908152604090205460ff1681565b3480156104d857600080fd5b5061035c600e5481565b3480156104ee57600080fd5b5061035c600c5481565b34801561050457600080fd5b506013546102fb90610100900460ff1681565b34801561052357600080fd5b5061035c6105323660046125e7565b6001600160a01b031660009081526020819052604090205490565b34801561055957600080fd5b50610276610df1565b34801561056e57600080fd5b50610276610e65565b34801561058357600080fd5b50610276610592366004612612565b610ed0565b3480156105a357600080fd5b50610276610fa3565b3480156105b857600080fd5b506102fb6105c73660046125e7565b60076020526000908152604090205460ff1681565b3480156105e857600080fd5b506005546001600160a01b03166102c3565b34801561060657600080fd5b5061028d610feb565b34801561061b57600080fd5b5061035c61271081565b34801561063157600080fd5b50610276610640366004612612565b610ffa565b34801561065157600080fd5b506102fb610660366004612489565b611124565b34801561067157600080fd5b506102fb610680366004612489565b6111aa565b34801561069157600080fd5b506102fb6106a03660046125e7565b60096020526000908152604090205460ff1681565b3480156106c157600080fd5b506008546102fb9060ff1681565b3480156106db57600080fd5b5061035c600a5481565b3480156106f157600080fd5b5061035c6107003660046125ae565b6111b8565b34801561071157600080fd5b5061035c600f5481565b34801561072757600080fd5b506102766107363660046125e7565b6111e3565b34801561074757600080fd5b506102766112ce565b34801561075c57600080fd5b5061035c600b5481565b6005546001600160a01b031633146107995760405162461bcd60e51b815260040161079090612640565b60405180910390fd5b6107a56012600a61276f565b6103e86107b160025490565b6107bc90600561277e565b6107c69190612795565b6107d09190612795565b8110156108095760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610790565b6108156012600a61276f565b61081f908261277e565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b60606003805461086a906127b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610896906127b7565b80156108e35780601f106108b8576101008083540402835291602001916108e3565b820191906000526020600020905b8154815290600101906020018083116108c657829003601f168201915b5050505050905090565b6000336108fb8185856116a7565b60019150505b92915050565b6005546001600160a01b031633146109315760405162461bcd60e51b815260040161079090612640565b600f8190556104b081111561097d5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610790565b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97600f5460405161085091815260200190565b6005546001600160a01b031633146109da5760405162461bcd60e51b815260040161079090612640565b6109e66012600a61276f565b6103e86109f260025490565b6109fd90600f61277e565b610a079190612795565b610a119190612795565b811015610a4a5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610790565b610a566012600a61276f565b610a60908261277e565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610850565b6005546001600160a01b03163314610abf5760405162461bcd60e51b815260040161079090612640565b828114610b075760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610790565b60005b83811015610b6d57610b5b33868684818110610b2857610b286127f1565b9050602002016020810190610b3d91906125e7565b858585818110610b4f57610b4f6127f1565b905060200201356117cb565b80610b6581612807565b915050610b0a565b5050505050565b600033610b828582856118f7565b610b8d85858561196b565b60019150505b9392505050565b6000336108fb818585610bad83836111b8565b610bb79190612820565b6116a7565b6005546001600160a01b03163314610bd357600080fd5b60004711610c1c5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b71d1037379022aa24103a379031b632b0b960511b6044820152606401610790565b60405133904780156108fc02916000818181858888f19350505050158015610c48573d6000803e3d6000fd5b50565b6005546001600160a01b03163314610c755760405162461bcd60e51b815260040161079090612640565b600e8190556104b0811115610cc15760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610790565b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508600e5460405161085091815260200190565b6005546001600160a01b03163314610d1e5760405162461bcd60e51b815260040161079090612640565b6001600160a01b038216610d745760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610790565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddf9190612833565b9050610dec8383836119c1565b505050565b6005546001600160a01b03163314610e1b5760405162461bcd60e51b815260040161079090612640565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e8f5760405162461bcd60e51b815260040161079090612640565b6013805460ff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610efa5760405162461bcd60e51b815260040161079090612640565b6001600160a01b038216610f3f5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610790565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b03163314610fcd5760405162461bcd60e51b815260040161079090612640565b6008805460ff191660011790556013805461ff001916610100179055565b60606004805461086a906127b7565b6005546001600160a01b031633146110245760405162461bcd60e51b815260040161079090612640565b6001600160a01b0382166110695760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610790565b806110c8576013546001600160a01b0363010000009091048116908316036110c85760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610790565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101610f97565b6000338161113282866111b8565b9050838110156111925760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610790565b61119f82868684036116a7565b506001949350505050565b6000336108fb81858561196b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b0316331461120d5760405162461bcd60e51b815260040161079090612640565b6001600160a01b0381166112725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610790565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112f85760405162461bcd60e51b815260040161079090612640565b60085460ff161561134b5760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610790565b601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561139e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c2919061284c565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611424573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611448919061284c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b9919061284c565b601380546301000000600160b81b03191663010000006001600160a01b0393841681029190911780835581900483166000908152600960209081526040808320805460ff19908116600190811790925595549490940486168352600790915290208054909216179055601454611534913091166000196116a7565b60145461154f9033906001600160a01b0316610bb760025490565b6014546001600160a01b031663f305d7194730611581816001600160a01b031660009081526020819052604090205490565b6000806115966005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156115fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116239190612869565b505060135460145460405163095ea7b360e01b81526001600160a01b0391821660048201526000196024820152630100000090920416915063095ea7b3906044016020604051808303816000875af1158015611683573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190612897565b6001600160a01b0383166117095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610790565b6001600160a01b03821661176a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610790565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117f15760405162461bcd60e51b8152600401610790906128b4565b6001600160a01b0382166118175760405162461bcd60e51b8152600401610790906128f9565b6001600160a01b0383166000908152602081905260409020548181101561188f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610790565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b600061190384846111b8565b905060001981146118f1578181101561195e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610790565b6118f184848484036116a7565b611976838383611a13565b601354610100900460ff161580611995575060135462010000900460ff165b1561199f57505050565b6119aa838383611d49565b6119b4908261293c565b9050610dec8383836117cb565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610dec908490611ee9565b60085460ff16611aa1576001600160a01b03831660009081526006602052604090205460ff1680611a5c57506001600160a01b03821660009081526006602052604090205460ff165b611aa15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610790565b601354610100900460ff161580611ac0575060135462010000900460ff165b15611ad057610dec8383836117cb565b60135460ff1615610dec576001600160a01b03831660009081526009602052604090205460ff168015611b1c57506001600160a01b03821660009081526007602052604090205460ff16155b15611c0157600a54811115611b735760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e0000006044820152606401610790565b600b546001600160a01b038316600090815260208190526040902054611b999083612820565b1115611be75760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610790565b60128054906000611bf783612807565b9190505550505050565b6001600160a01b03821660009081526009602052604090205460ff168015611c4257506001600160a01b03831660009081526007602052604090205460ff16155b15611cb557600a54811115610dec5760405162461bcd60e51b815260206004820152603360248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152721036b0bc2a3930b739b0b1ba34b7b720b6ba1760691b6064820152608401610790565b6001600160a01b03821660009081526007602052604090205460ff16610dec57600b546001600160a01b038316600090815260208190526040902054611cfb9083612820565b1115610dec5760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610790565b601354600090610100900460ff168015611d6c575060135462010000900460ff16155b8015611d9057506001600160a01b03831660009081526009602052604090205460ff165b8015611db557506001600160a01b03841660009081526006602052604090205460ff16155b15611de1576013805462ff0000191662010000179055611dd482611fbb565b6013805462ff0000191690555b6001600160a01b03841660009081526006602052604090205460019060ff1615611e09575060005b828115611ed357506001600160a01b03841660009081526009602052604081205460ff1615611e675761271060105460125411611e4857601154611e4c565b600f545b611e56908661277e565b611e609190612795565b9050611eb9565b6001600160a01b03861660009081526009602052604090205460ff1615611eb95761271060105460125411611e9e57601154611ea2565b600e545b611eac908661277e565b611eb69190612795565b90505b8015611eca57611eca8630836117cb565b9150610b939050565b611ede818730612017565b600092505050610b93565b6000611f3e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120f59092919063ffffffff16565b805190915015610dec5780806020019051810190611f5c9190612897565b610dec5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610790565b30600090815260208190526040812054908115801590611fdc5750600c5482105b15611fe8575080611ffe565b600c54831115611ffb5750600c54611ffe565b50815b811561200d5761200d8161210c565b476118f18161224d565b6001600160a01b03821661203d5760405162461bcd60e51b8152600401610790906128b4565b6001600160a01b0381166120635760405162461bcd60e51b8152600401610790906128f9565b6001600160a01b03808316600090815260208190526040808220805487810390915592841682528120805486929061209c908490612820565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516120e891815260200190565b60405180910390a36118f1565b6060612104848460008561228b565b949350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612141576121416127f1565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561219a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121be919061284c565b816001815181106121d1576121d16127f1565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac9479061221790859060009086903090429060040161294f565b600060405180830381600087803b15801561223157600080fd5b505af1158015612245573d6000803e3d6000fd5b505050505050565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612287573d6000803e3d6000fd5b5050565b6060824710156122ec5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610790565b600080866001600160a01b0316858760405161230891906129c0565b60006040518083038185875af1925050503d8060008114612345576040519150601f19603f3d011682016040523d82523d6000602084013e61234a565b606091505b509150915061235b87838387612366565b979650505050505050565b606083156123d55782516000036123ce576001600160a01b0385163b6123ce5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610790565b5081612104565b61210483838151156123ea5781518083602001fd5b8060405162461bcd60e51b81526004016107909190612441565b60006020828403121561241657600080fd5b5035919050565b60005b83811015612438578181015183820152602001612420565b50506000910152565b602081526000825180602084015261246081604085016020870161241d565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610c4857600080fd5b6000806040838503121561249c57600080fd5b82356124a781612474565b946020939093013593505050565b60008083601f8401126124c757600080fd5b50813567ffffffffffffffff8111156124df57600080fd5b6020830191508360208260051b85010111156124fa57600080fd5b9250929050565b6000806000806040858703121561251757600080fd5b843567ffffffffffffffff8082111561252f57600080fd5b61253b888389016124b5565b9096509450602087013591508082111561255457600080fd5b50612561878288016124b5565b95989497509550505050565b60008060006060848603121561258257600080fd5b833561258d81612474565b9250602084013561259d81612474565b929592945050506040919091013590565b600080604083850312156125c157600080fd5b82356125cc81612474565b915060208301356125dc81612474565b809150509250929050565b6000602082840312156125f957600080fd5b8135610b9381612474565b8015158114610c4857600080fd5b6000806040838503121561262557600080fd5b823561263081612474565b915060208301356125dc81612604565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156126c65781600019048211156126ac576126ac612675565b808516156126b957918102915b93841c9390800290612690565b509250929050565b6000826126dd57506001610901565b816126ea57506000610901565b8160018114612700576002811461270a57612726565b6001915050610901565b60ff84111561271b5761271b612675565b50506001821b610901565b5060208310610133831016604e8410600b8410161715612749575081810a610901565b612753838361268b565b806000190482111561276757612767612675565b029392505050565b6000610b9360ff8416836126ce565b808202811582820484141761090157610901612675565b6000826127b257634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806127cb57607f821691505b6020821081036127eb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161281957612819612675565b5060010190565b8082018082111561090157610901612675565b60006020828403121561284557600080fd5b5051919050565b60006020828403121561285e57600080fd5b8151610b9381612474565b60008060006060848603121561287e57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156128a957600080fd5b8151610b9381612604565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561090157610901612675565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561299f5784516001600160a01b03168352938301939183019160010161297a565b50506001600160a01b03969096166060850152505050608001529392505050565b600082516129d281846020870161241d565b919091019291505056fea26469706673582212207e0af3bcf66f694ea3a66b8b07f1c6739c7fa382a183c8a14b29ecfb51fdb2f164736f6c63430008130033

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

00000000000000000000000071c135adac8b4f0a496deb50f9410a85a5de46f7

-----Decoded View---------------
Arg [0] : _wallet (address): 0x71C135adAC8B4f0a496dEb50F9410A85a5de46F7

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000071c135adac8b4f0a496deb50f9410a85a5de46f7


Deployed Bytecode Sourcemap

28213:10518:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35516:332;;;;;;;;;;-1:-1:-1;35516:332:0;;;;;:::i;:::-;;:::i;:::-;;4416:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28912:27;;;;;;;;;;-1:-1:-1;28912:27:0;;;;-1:-1:-1;;;;;28912:27:0;;;;;;-1:-1:-1;;;;;1038:32:1;;;1020:51;;1008:2;993:18;28912:27:0;855:222:1;6842:226:0;;;;;;;;;;-1:-1:-1;6842:226:0;;;;;:::i;:::-;;:::i;:::-;;;1703:14:1;;1696:22;1678:41;;1666:2;1651:18;6842:226:0;1538:187:1;28544:33:0;;;;;;;;;;-1:-1:-1;28544:33:0;;;;-1:-1:-1;;;;;28544:33:0;;;36427:230;;;;;;;;;;-1:-1:-1;36427:230:0;;;;;:::i;:::-;;:::i;5545:108::-;;;;;;;;;;-1:-1:-1;5633:12:0;;5545:108;;;2084:25:1;;;2072:2;2057:18;5545:108:0;1938:177:1;35856:330:0;;;;;;;;;;-1:-1:-1;35856:330:0;;;;;:::i;:::-;;:::i;37764:397::-;;;;;;;;;;-1:-1:-1;37764:397:0;;;;;:::i;:::-;;:::i;7648:295::-;;;;;;;;;;-1:-1:-1;7648:295:0;;;;;:::i;:::-;;:::i;5387:93::-;;;;;;;;;;-1:-1:-1;5387:93:0;;5470:2;3873:36:1;;3861:2;3846:18;5387:93:0;3731:184:1;8352:263:0;;;;;;;;;;-1:-1:-1;8352:263:0;;;;;:::i;:::-;;:::i;38474:217::-;;;;;;;;;;;;;:::i;36194:225::-;;;;;;;;;;-1:-1:-1;36194:225:0;;;;;:::i;:::-;;:::i;28884:21::-;;;;;;;;;;-1:-1:-1;28884:21:0;;;;;;;-1:-1:-1;;;;;28884:21:0;;;28774:33;;;;;;;;;;-1:-1:-1;28774:33:0;;;;;;;;38169:297;;;;;;;;;;-1:-1:-1;38169:297:0;;;;;:::i;:::-;;:::i;28253:46::-;;;;;;;;;;-1:-1:-1;28253:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28586:30;;;;;;;;;;;;;;;;28514:21;;;;;;;;;;;;;;;;28816:31;;;;;;;;;;-1:-1:-1;28816:31:0;;;;;;;;;;;5716:143;;;;;;;;;;-1:-1:-1;5716:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;5833:18:0;5806:7;5833:18;;;;;;;;;;;;5716:143;17035:150;;;;;;;;;;;;;:::i;37564:192::-;;;;;;;;;;;;;:::i;34848:272::-;;;;;;;;;;-1:-1:-1;34848:272:0;;;;;:::i;:::-;;:::i;37444:112::-;;;;;;;;;;;;;:::i;28306:48::-;;;;;;;;;;-1:-1:-1;28306:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16821:79;;;;;;;;;;-1:-1:-1;16886:6:0;;-1:-1:-1;;;;;16886:6:0;16821:79;;4635:104;;;;;;;;;;;;;:::i;28948:43::-;;;;;;;;;;;;28986:5;28948:43;;35128:380;;;;;;;;;;-1:-1:-1;35128:380:0;;;;;:::i;:::-;;:::i;9118:498::-;;;;;;;;;;-1:-1:-1;9118:498:0;;;;;:::i;:::-;;:::i;6065:218::-;;;;;;;;;;-1:-1:-1;6065:218:0;;;;;:::i;:::-;;:::i;28397:41::-;;;;;;;;;;-1:-1:-1;28397:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28363:25;;;;;;;;;;-1:-1:-1;28363:25:0;;;;;;;;28447:29;;;;;;;;;;;;;;;;6346:176;;;;;;;;;;-1:-1:-1;6346:176:0;;;;;:::i;:::-;;:::i;28623:31::-;;;;;;;;;;;;;;;;17193:281;;;;;;;;;;-1:-1:-1;17193:281:0;;;;;:::i;:::-;;:::i;36665:771::-;;;;;;;;;;;;;:::i;28483:24::-;;;;;;;;;;;;;;;;35516:332;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;;;;;;;;;35672:16:::1;5470:2:::0;35672::::1;:16;:::i;:::-;35663:4;35642:13;5633:12:::0;;;5545:108;35642:13:::1;:17;::::0;35658:1:::1;35642:17;:::i;:::-;35641:26;;;;:::i;:::-;35640:49;;;;:::i;:::-;35622:14;:67;;35600:124;;;::::0;-1:-1:-1;;;35600:124:0;;7548:2:1;35600:124:0::1;::::0;::::1;7530:21:1::0;7587:1;7567:18;;;7560:29;-1:-1:-1;;;7605:18:1;;;7598:37;7652:18;;35600:124:0::1;7346:330:1::0;35600:124:0::1;35770:16;5470:2:::0;35770::::1;:16;:::i;:::-;35752:35;::::0;:14;:35:::1;:::i;:::-;35735:14;:52:::0;;;35803:37:::1;::::0;2084:25:1;;;35803:37:0::1;::::0;2072:2:1;2057:18;35803:37:0::1;;;;;;;;35516:332:::0;:::o;4416:100::-;4470:13;4503:5;4496:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4416:100;:::o;6842:226::-;6950:4;317:10;7006:32;317:10;7022:7;7031:6;7006:8;:32::i;:::-;7056:4;7049:11;;;6842:226;;;;;:::o;36427:230::-;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;36509:12:::1;:34:::0;;;36578:4:::1;36562:20:::0;::::1;;36554:51;;;::::0;-1:-1:-1;;;36554:51:0;;8268:2:1;36554:51:0::1;::::0;::::1;8250:21:1::0;8307:2;8287:18;;;8280:30;-1:-1:-1;;;8326:18:1;;;8319:48;8384:18;;36554:51:0::1;8066:342:1::0;36554:51:0::1;36621:28;36636:12;;36621:28;;;;2084:25:1::0;;2072:2;2057:18;;1938:177;35856:330:0;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;36025:16:::1;5470:2:::0;36025::::1;:16;:::i;:::-;36016:4;35994:13;5633:12:::0;;;5545:108;35994:13:::1;:18;::::0;36010:2:::1;35994:18;:::i;:::-;35993:27;;;;:::i;:::-;35992:50;;;;:::i;:::-;35957:14;:85;;35935:142;;;::::0;-1:-1:-1;;;35935:142:0;;7548:2:1;35935:142:0::1;::::0;::::1;7530:21:1::0;7587:1;7567:18;;;7560:29;-1:-1:-1;;;7605:18:1;;;7598:37;7652:18;;35935:142:0::1;7346:330:1::0;35935:142:0::1;36118:16;5470:2:::0;36118::::1;:16;:::i;:::-;36100:35;::::0;:14;:35:::1;:::i;:::-;36088:9;:47:::0;;;36151:27:::1;::::0;2084:25:1;;;36151:27:0::1;::::0;2072:2:1;2057:18;36151:27:0::1;1938:177:1::0;37764:397:0;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;37928:37;;::::1;37906:109;;;::::0;-1:-1:-1;;;37906:109:0;;8615:2:1;37906:109:0::1;::::0;::::1;8597:21:1::0;8654:2;8634:18;;;8627:30;-1:-1:-1;;;8673:18:1;;;8666:52;8735:18;;37906:109:0::1;8413:346:1::0;37906:109:0::1;38031:9;38026:128;38046:18:::0;;::::1;38026:128;;;38086:56;38102:10;38114:7;;38122:1;38114:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;38126:12;;38139:1;38126:15;;;;;;;:::i;:::-;;;;;;;38086;:56::i;:::-;38066:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38026:128;;;;37764:397:::0;;;;:::o;7648:295::-;7779:4;317:10;7837:38;7853:4;317:10;7868:6;7837:15;:38::i;:::-;7886:27;7896:4;7902:2;7906:6;7886:9;:27::i;:::-;7931:4;7924:11;;;7648:295;;;;;;:::o;8352:263::-;8465:4;317:10;8521:64;317:10;8537:7;8574:10;8546:25;317:10;8537:7;8546:9;:25::i;:::-;:38;;;;:::i;:::-;8521:8;:64::i;38474:217::-;16886:6;;-1:-1:-1;;;;;16886:6:0;38528:10;:21;38520:30;;;;;;38593:1;38569:21;:25;38561:60;;;;-1:-1:-1;;;38561:60:0;;9368:2:1;38561:60:0;;;9350:21:1;9407:2;9387:18;;;9380:30;-1:-1:-1;;;9426:18:1;;;9419:52;9488:18;;38561:60:0;9166:346:1;38561:60:0;38632:51;;38640:10;;38661:21;38632:51;;;;;;;;;38661:21;38640:10;38632:51;;;;;;;;;;;;;;;;;;;;;38474:217::o;36194:225::-;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;36275:11:::1;:33:::0;;;36342:4:::1;36327:19:::0;::::1;;36319:50;;;::::0;-1:-1:-1;;;36319:50:0;;8268:2:1;36319:50:0::1;::::0;::::1;8250:21:1::0;8307:2;8287:18;;;8280:30;-1:-1:-1;;;8326:18:1;;;8319:48;8384:18;;36319:50:0::1;8066:342:1::0;36319:50:0::1;36385:26;36399:11;;36385:26;;;;2084:25:1::0;;2072:2;2057:18;;1938:177;38169:297:0;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38258:20:0;::::1;38250:59;;;::::0;-1:-1:-1;;;38250:59:0;;9719:2:1;38250:59:0::1;::::0;::::1;9701:21:1::0;9758:2;9738:18;;;9731:30;9797:28;9777:18;;;9770:56;9843:18;;38250:59:0::1;9517:350:1::0;38250:59:0::1;38347:39;::::0;-1:-1:-1;;;38347:39:0;;38380:4:::1;38347:39;::::0;::::1;1020:51:1::0;38320:24:0::1;::::0;-1:-1:-1;;;;;38347:24:0;::::1;::::0;::::1;::::0;993:18:1;;38347:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38320:66;;38397:61;38427:6;38436:3;38441:16;38397:22;:61::i;:::-;38239:227;38169:297:::0;;:::o;17035:150::-;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;17128:6:::1;::::0;17107:40:::1;::::0;17144:1:::1;::::0;-1:-1:-1;;;;;17128:6:0::1;::::0;17107:40:::1;::::0;17144:1;;17107:40:::1;17158:6;:19:::0;;-1:-1:-1;;;;;;17158:19:0::1;::::0;;17035:150::o;37564:192::-;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;37618:14:::1;:22:::0;;-1:-1:-1;;37618:22:0::1;::::0;;5633:12;;37651:14:::1;:30:::0;5633:12;;37692:9:::1;:25:::0;37733:15:::1;::::0;::::1;::::0;;;::::1;37564:192::o:0;34848:272::-;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34972:22:0;::::1;34964:47;;;::::0;-1:-1:-1;;;34964:47:0;;10263:2:1;34964:47:0::1;::::0;::::1;10245:21:1::0;10302:2;10282:18;;;10275:30;-1:-1:-1;;;10321:18:1;;;10314:42;10373:18;;34964:47:0::1;10061:336:1::0;34964:47:0::1;-1:-1:-1::0;;;;;35022:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;35022:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35074:38;;10570:51:1;;;10637:18;;;10630:50;35074:38:0::1;::::0;10543:18:1;35074:38:0::1;;;;;;;;34848:272:::0;;:::o;37444:112::-;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;37499:13:::1;:20:::0;;-1:-1:-1;;37499:20:0::1;37515:4;37499:20;::::0;;37530:11:::1;:18:::0;;-1:-1:-1;;37530:18:0::1;37499:20;37530:18;::::0;;37444:112::o;4635:104::-;4691:13;4724:7;4717:14;;;;;:::i;35128:380::-;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35254:22:0;::::1;35246:47;;;::::0;-1:-1:-1;;;35246:47:0;;10263:2:1;35246:47:0::1;::::0;::::1;10245:21:1::0;10302:2;10282:18;;;10275:30;-1:-1:-1;;;10321:18:1;;;10314:42;10373:18;;35246:47:0::1;10061:336:1::0;35246:47:0::1;35309:9;35304:92;;35355:6;::::0;-1:-1:-1;;;;;35355:6:0;;;::::1;::::0;::::1;35343:18:::0;;::::1;::::0;35335:49:::1;;;::::0;-1:-1:-1;;;35335:49:0;;10893:2:1;35335:49:0::1;::::0;::::1;10875:21:1::0;10932:2;10912:18;;;10905:30;-1:-1:-1;;;10951:18:1;;;10944:48;11009:18;;35335:49:0::1;10691:342:1::0;35335:49:0::1;-1:-1:-1::0;;;;;35406:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;35406:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35460:40;;10570:51:1;;;10637:18;;;10630:50;35460:40:0::1;::::0;10543:18:1;35460:40:0::1;10402:284:1::0;9118:498:0;9236:4;317:10;9236:4;9319:25;317:10;9336:7;9319:9;:25::i;:::-;9292:52;;9397:15;9377:16;:35;;9355:122;;;;-1:-1:-1;;;9355:122:0;;11240:2:1;9355:122:0;;;11222:21:1;11279:2;11259:18;;;11252:30;11318:34;11298:18;;;11291:62;-1:-1:-1;;;11369:18:1;;;11362:35;11414:19;;9355:122:0;11038:401:1;9355:122:0;9513:60;9522:5;9529:7;9557:15;9538:16;:34;9513:8;:60::i;:::-;-1:-1:-1;9604:4:0;;9118:498;-1:-1:-1;;;;9118:498:0:o;6065:218::-;6169:4;317:10;6225:28;317:10;6242:2;6246:6;6225:9;:28::i;6346:176::-;-1:-1:-1;;;;;6487:18:0;;;6460:7;6487:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6346:176::o;17193:281::-;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17296:22:0;::::1;17274:110;;;::::0;-1:-1:-1;;;17274:110:0;;11646:2:1;17274:110:0::1;::::0;::::1;11628:21:1::0;11685:2;11665:18;;;11658:30;11724:34;11704:18;;;11697:62;-1:-1:-1;;;11775:18:1;;;11768:36;11821:19;;17274:110:0::1;11444:402:1::0;17274:110:0::1;17421:6;::::0;17400:38:::1;::::0;-1:-1:-1;;;;;17400:38:0;;::::1;::::0;17421:6:::1;::::0;17400:38:::1;::::0;17421:6:::1;::::0;17400:38:::1;17449:6;:17:::0;;-1:-1:-1;;;;;;17449:17:0::1;-1:-1:-1::0;;;;;17449:17:0;;;::::1;::::0;;;::::1;::::0;;17193:281::o;36665:771::-;16948:6;;-1:-1:-1;;;;;16948:6:0;317:10;16948:22;16940:67;;;;-1:-1:-1;;;16940:67:0;;;;;;;:::i;:::-;36724:13:::1;::::0;::::1;;36723:14;36715:50;;;::::0;-1:-1:-1;;;36715:50:0;;12053:2:1;36715:50:0::1;::::0;::::1;12035:21:1::0;12092:2;12072:18;;;12065:30;12131:25;12111:18;;;12104:53;12174:18;;36715:50:0::1;11851:347:1::0;36715:50:0::1;36797:9;;;;;;;;;-1:-1:-1::0;;;;;36797:9:0::1;-1:-1:-1::0;;;;;36797:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36785:43:0::1;;36851:4;36871:9;;;;;;;;;-1:-1:-1::0;;;;;36871:9:0::1;-1:-1:-1::0;;;;;36871:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36785:113;::::0;-1:-1:-1;;;;;;36785:113:0::1;::::0;;;;;;-1:-1:-1;;;;;12689:15:1;;;36785:113:0::1;::::0;::::1;12671:34:1::0;12741:15;;12721:18;;;12714:43;12606:18;;36785:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36776:6;:122:::0;;-1:-1:-1;;;;;;36776:122:0::1;::::0;-1:-1:-1;;;;;36776:122:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;36921:6;;::::1;::::0;::::1;-1:-1:-1::0;36911:17:0;;;:9:::1;:17;::::0;;;;;;;:24;;-1:-1:-1;;36911:24:0;;::::1;-1:-1:-1::0;36911:24:0;;::::1;::::0;;;36965:6;;;;;::::1;::::0;::::1;36948:24:::0;;:16:::1;:24:::0;;;;;:31;;;;::::1;;::::0;;37024:9:::1;::::0;36992:62:::1;::::0;37009:4:::1;::::0;37024:9:::1;-1:-1:-1::0;;36992:8:0::1;:62::i;:::-;37103:9;::::0;37065:64:::1;::::0;37082:10:::1;::::0;-1:-1:-1;;;;;37103:9:0::1;37115:13;5633:12:::0;;;5545:108;37065:64:::1;37142:9;::::0;-1:-1:-1;;;;;37142:9:0::1;:25;37175:21;37220:4;37240:24;37220:4:::0;-1:-1:-1;;;;;5833:18:0;5806:7;5833:18;;;;;;;;;;;;5716:143;37240:24:::1;37279:1;37295::::0;37311:7:::1;16886:6:::0;;-1:-1:-1;;;;;16886:6:0;;16821:79;37311:7:::1;37142:217;::::0;::::1;::::0;;;-1:-1:-1;;;;;;37142:217:0;;;-1:-1:-1;;;;;13127:15:1;;;37142:217:0::1;::::0;::::1;13109:34:1::0;13159:18;;;13152:34;;;;13202:18;;;13195:34;;;;13245:18;;;13238:34;13309:15;;;13288:19;;;13281:44;37333:15:0::1;13341:19:1::0;;;13334:35;13043:19;;37142:217:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37377:6:0::1;::::0;37401:9:::1;::::0;37370:58:::1;::::0;-1:-1:-1;;;37370:58:0;;-1:-1:-1;;;;;37401:9:0;;::::1;37370:58;::::0;::::1;13865:51:1::0;-1:-1:-1;;13932:18:1;;;13925:34;37377:6:0;;;::::1;;::::0;-1:-1:-1;37370:22:0::1;::::0;13838:18:1;;37370:58:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13844:380::-:0;-1:-1:-1;;;;;13980:19:0;;13972:68;;;;-1:-1:-1;;;13972:68:0;;14422:2:1;13972:68:0;;;14404:21:1;14461:2;14441:18;;;14434:30;14500:34;14480:18;;;14473:62;-1:-1:-1;;;14551:18:1;;;14544:34;14595:19;;13972:68:0;14220:400:1;13972:68:0;-1:-1:-1;;;;;14059:21:0;;14051:68;;;;-1:-1:-1;;;14051:68:0;;14827:2:1;14051:68:0;;;14809:21:1;14866:2;14846:18;;;14839:30;14905:34;14885:18;;;14878:62;-1:-1:-1;;;14956:18:1;;;14949:32;14998:19;;14051:68:0;14625:398:1;14051:68:0;-1:-1:-1;;;;;14132:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14184:32;;2084:25:1;;;14184:32:0;;2057:18:1;14184:32:0;;;;;;;13844:380;;;:::o;10086:877::-;-1:-1:-1;;;;;10217:18:0;;10209:68;;;;-1:-1:-1;;;10209:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10296:16:0;;10288:64;;;;-1:-1:-1;;;10288:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10438:15:0;;10416:19;10438:15;;;;;;;;;;;10486:21;;;;10464:109;;;;-1:-1:-1;;;10464:109:0;;16040:2:1;10464:109:0;;;16022:21:1;16079:2;16059:18;;;16052:30;16118:34;16098:18;;;16091:62;-1:-1:-1;;;16169:18:1;;;16162:36;16215:19;;10464:109:0;15838:402:1;10464:109:0;-1:-1:-1;;;;;10609:15:0;;;:9;:15;;;;;;;;;;;10627:20;;;10609:38;;10827:13;;;;;;;;;;:23;;;;;;10879:26;;2084:25:1;;;10827:13:0;;10879:26;;2057:18:1;10879:26:0;;;;;;;10918:37;10198:765;10086:877;;;:::o;14515:502::-;14650:24;14677:25;14687:5;14694:7;14677:9;:25::i;:::-;14650:52;;-1:-1:-1;;14717:16:0;:37;14713:297;;14817:6;14797:16;:26;;14771:117;;;;-1:-1:-1;;;14771:117:0;;16447:2:1;14771:117:0;;;16429:21:1;16486:2;16466:18;;;16459:30;16525:31;16505:18;;;16498:59;16574:18;;14771:117:0;16245:353:1;14771:117:0;14932:51;14941:5;14948:7;14976:6;14957:16;:25;14932:8;:51::i;30801:310::-;30933:23;30939:4;30945:2;30949:6;30933:5;:23::i;:::-;30974:11;;;;;;;30973:12;;:24;;-1:-1:-1;30989:8:0;;;;;;;30973:24;30969:37;;;30801:310;;;:::o;30969:37::-;31028:29;31040:4;31046:2;31050:6;31028:11;:29::i;:::-;31018:39;;;;:::i;:::-;;;31070:33;31086:4;31092:2;31096:6;31070:15;:33::i;24517:214::-;24654:58;;;-1:-1:-1;;;;;13883:32:1;;24654:58:0;;;13865:51:1;13932:18;;;;13925:34;;;24654:58:0;;;;;;;;;;13838:18:1;;;;24654:58:0;;;;;;;;-1:-1:-1;;;;;24654:58:0;-1:-1:-1;;;24654:58:0;;;24600:123;;24634:5;;24600:19;:123::i;31119:1324::-;31201:13;;;;31196:173;;-1:-1:-1;;;;;31257:20:0;;;;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;31281:18:0;;;;;;:14;:18;;;;;;;;31257:42;31231:126;;;;-1:-1:-1;;;31231:126:0;;16938:2:1;31231:126:0;;;16920:21:1;16977:2;16957:18;;;16950:30;-1:-1:-1;;;16996:18:1;;;16989:52;17058:18;;31231:126:0;16736:346:1;31231:126:0;31386:11;;;;;;;31385:12;;:24;;-1:-1:-1;31401:8:0;;;;;;;31385:24;31381:111;;;31426:33;31442:4;31448:2;31452:6;31426:15;:33::i;31381:111::-;31508:14;;;;31504:932;;;-1:-1:-1;;;;;31563:15:0;;;;;;:9;:15;;;;;;;;:40;;;;-1:-1:-1;;;;;;31583:20:0;;;;;;:16;:20;;;;;;;;31582:21;31563:40;31559:866;;;31664:14;;31654:6;:24;;31624:127;;;;-1:-1:-1;;;31624:127:0;;17289:2:1;31624:127:0;;;17271:21:1;17328:2;17308:18;;;17301:30;17367:31;17347:18;;;17340:59;17416:18;;31624:127:0;17087:353:1;31624:127:0;31826:9;;-1:-1:-1;;;;;5833:18:0;;5806:7;5833:18;;;;;;;;;;;31800:22;;:6;:22;:::i;:::-;:35;;31770:136;;;;-1:-1:-1;;;31770:136:0;;17647:2:1;31770:136:0;;;17629:21:1;17686:2;17666:18;;;17659:30;17725:29;17705:18;;;17698:57;17772:18;;31770:136:0;17445:351:1;31770:136:0;31925:8;:10;;;:8;:10;;;:::i;:::-;;;;;;38239:227:::1;38169:297:::0;;:::o;31559:866::-;-1:-1:-1;;;;;31995:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;32013:22:0;;;;;;:16;:22;;;;;;;;32012:23;31995:40;31991:434;;;32096:14;;32086:6;:24;;32056:149;;;;-1:-1:-1;;;32056:149:0;;18003:2:1;32056:149:0;;;17985:21:1;18042:2;18022:18;;;18015:30;18081:34;18061:18;;;18054:62;-1:-1:-1;;;18132:18:1;;;18125:49;18191:19;;32056:149:0;17801:415:1;31991:434:0;-1:-1:-1;;;;;32232:20:0;;;;;;:16;:20;;;;;;;;32227:198;;32329:9;;-1:-1:-1;;;;;5833:18:0;;5806:7;5833:18;;;;;;;;;;;32303:22;;:6;:22;:::i;:::-;:35;;32273:136;;;;-1:-1:-1;;;32273:136:0;;17647:2:1;32273:136:0;;;17629:21:1;17686:2;17666:18;;;17659:30;17725:29;17705:18;;;17698:57;17772:18;;32273:136:0;17445:351:1;32451:1242:0;32604:11;;32566:7;;32604:11;;;;;:24;;;;-1:-1:-1;32620:8:0;;;;;;;32619:9;32604:24;:41;;;;-1:-1:-1;;;;;;32632:13:0;;;;;;:9;:13;;;;;;;;32604:41;:66;;;;-1:-1:-1;;;;;;32650:20:0;;;;;;:14;:20;;;;;;;;32649:21;32604:66;32586:200;;;32697:8;:15;;-1:-1:-1;;32697:15:0;;;;;32727:16;32736:6;32727:8;:16::i;:::-;32758:8;:16;;-1:-1:-1;;32758:16:0;;;32586:200;-1:-1:-1;;;;;32830:20:0;;32798:10;32830:20;;;:14;:20;;;;;;32811:4;;32830:20;;32826:66;;;-1:-1:-1;32875:5:0;32826:66;32918:6;32957:729;;;;-1:-1:-1;;;;;;33009:13:0;;32989:1;33009:13;;;:9;:13;;;;;;;;33005:445;;;28986:5;33117:8;;33106;;:19;:47;;33143:10;;33106:47;;;33128:12;;33106:47;33071:83;;:6;:83;:::i;:::-;33070:120;;;;:::i;:::-;33043:147;;33005:445;;;-1:-1:-1;;;;;33252:15:0;;;;;;:9;:15;;;;;;;;33248:202;;;28986:5;33362:8;;33351;;:19;:46;;33387:10;;33351:46;;;33373:11;;33351:46;33316:82;;:6;:82;:::i;:::-;33315:119;;;;:::i;:::-;33288:146;;33248:202;33468:7;;33464:89;;33496:41;33512:4;33526;33533:3;33496:15;:41::i;:::-;33574:3;-1:-1:-1;33567:10:0;;-1:-1:-1;33567:10:0;32957:729;33610:41;33626:3;33631:4;33645;33610:15;:41::i;:::-;33673:1;33666:8;;;;;;25032:419;25113:23;25139:106;25181:4;25139:106;;;;;;;;;;;;;;;;;25147:5;-1:-1:-1;;;;;25139:27:0;;;:106;;;;;:::i;:::-;25260:17;;25113:132;;-1:-1:-1;25260:21:0;25256:188;;25335:10;25324:30;;;;;;;;;;;;:::i;:::-;25298:134;;;;-1:-1:-1;;;25298:134:0;;18423:2:1;25298:134:0;;;18405:21:1;18462:2;18442:18;;;18435:30;18501:34;18481:18;;;18474:62;-1:-1:-1;;;18552:18:1;;;18545:40;18602:19;;25298:134:0;18221:406:1;34100:604:0;34197:4;34153:23;5833:18;;;;;;;;;;;;34251:19;;;;;:47;;;34292:6;;34274:15;:24;34251:47;34247:281;;;-1:-1:-1;34330:15:0;34247:281;;;34391:6;;34382;:15;34378:139;;;-1:-1:-1;34433:6:0;;34378:139;;;-1:-1:-1;34495:6:0;34378:139;34544:19;;34540:55;;34565:30;34582:12;34565:16;:30::i;:::-;34637:21;34669:27;34637:21;34669:7;:27::i;12133:590::-;-1:-1:-1;;;;;12264:18:0;;12256:68;;;;-1:-1:-1;;;12256:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12343:16:0;;12335:64;;;;-1:-1:-1;;;12335:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12485:15:0;;;12463:19;12485:15;;;;;;;;;;;;;12556:20;;;12538:38;;;12598:13;;;;;;;:23;;12570:6;;12463:19;12598:23;;12570:6;;12598:23;:::i;:::-;;;;;;;;12654:2;-1:-1:-1;;;;;12639:26:0;12648:4;-1:-1:-1;;;;;12639:26:0;;12658:6;12639:26;;;;2084:25:1;;2072:2;2057:18;;1938:177;12639:26:0;;;;;;;;12678:37;38169:297;18342:229;18479:12;18511:52;18533:6;18541:4;18547:1;18550:12;18511:21;:52::i;:::-;18504:59;18342:229;-1:-1:-1;;;;18342:229:0:o;33701:391::-;33788:16;;;33802:1;33788:16;;;;;;;;33764:21;;33788:16;;;;;;;;;;-1:-1:-1;33788:16:0;33764:40;;33833:4;33815;33820:1;33815:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33815:23:0;;;:7;;;;;;;;;;:23;;;;33867:9;;:16;;;-1:-1:-1;;;33867:16:0;;;;:9;;;;;:14;;:16;;;;;33815:7;;33867:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33849:4;33854:1;33849:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33849:35:0;;;:7;;;;;;;;;:35;33897:9;;:187;;-1:-1:-1;;;33897:187:0;;:9;;;:60;;:187;;33972:8;;33897:9;;34011:4;;34038;;34058:15;;33897:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33753:339;33701:391;:::o;34712:104::-;34772:18;;34764:44;;-1:-1:-1;;;;;34772:18:0;;;;34764:44;;;;;34801:6;;34772:18;34764:44;34772:18;34764:44;34801:6;34772:18;34764:44;;;;;;;;;;;;;;;;;;;;;34712:104;:::o;19558:612::-;19728:12;19800:5;19775:21;:30;;19753:118;;;;-1:-1:-1;;;19753:118:0;;19951:2:1;19753:118:0;;;19933:21:1;19990:2;19970:18;;;19963:30;20029:34;20009:18;;;20002:62;-1:-1:-1;;;20080:18:1;;;20073:36;20126:19;;19753:118:0;19749:402:1;19753:118:0;19883:12;19897:23;19924:6;-1:-1:-1;;;;;19924:11:0;19943:5;19964:4;19924:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19882:97;;;;20010:152;20055:6;20080:7;20106:10;20135:12;20010:26;:152::i;:::-;19990:172;19558:612;-1:-1:-1;;;;;;;19558:612:0:o;22688:644::-;22873:12;22902:7;22898:427;;;22930:10;:17;22951:1;22930:22;22926:290;;-1:-1:-1;;;;;17588:19:0;;;23140:60;;;;-1:-1:-1;;;23140:60:0;;20650:2:1;23140:60:0;;;20632:21:1;20689:2;20669:18;;;20662:30;20728:31;20708:18;;;20701:59;20777:18;;23140:60:0;20448:353:1;23140:60:0;-1:-1:-1;23237:10:0;23230:17;;22898:427;23280:33;23288:10;23300:12;24060:17;;:21;24056:388;;24292:10;24286:17;24349:15;24336:10;24332:2;24328:19;24321:44;24056:388;24419:12;24412:20;;-1:-1:-1;;;24412:20:0;;;;;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:250::-;284:1;294:113;308:6;305:1;302:13;294:113;;;384:11;;;378:18;365:11;;;358:39;330:2;323:10;294:113;;;-1:-1:-1;;441:1:1;423:16;;416:27;199:250::o;454:396::-;603:2;592:9;585:21;566:4;635:6;629:13;678:6;673:2;662:9;658:18;651:34;694:79;766:6;761:2;750:9;746:18;741:2;733:6;729:15;694:79;:::i;:::-;834:2;813:15;-1:-1:-1;;809:29:1;794:45;;;;841:2;790:54;;454:396;-1:-1:-1;;454:396:1:o;1082:131::-;-1:-1:-1;;;;;1157:31:1;;1147:42;;1137:70;;1203:1;1200;1193:12;1218:315;1286:6;1294;1347:2;1335:9;1326:7;1322:23;1318:32;1315:52;;;1363:1;1360;1353:12;1315:52;1402:9;1389:23;1421:31;1446:5;1421:31;:::i;:::-;1471:5;1523:2;1508:18;;;;1495:32;;-1:-1:-1;;;1218:315:1:o;2120:367::-;2183:8;2193:6;2247:3;2240:4;2232:6;2228:17;2224:27;2214:55;;2265:1;2262;2255:12;2214:55;-1:-1:-1;2288:20:1;;2331:18;2320:30;;2317:50;;;2363:1;2360;2353:12;2317:50;2400:4;2392:6;2388:17;2376:29;;2460:3;2453:4;2443:6;2440:1;2436:14;2428:6;2424:27;2420:38;2417:47;2414:67;;;2477:1;2474;2467:12;2414:67;2120:367;;;;;:::o;2492:773::-;2614:6;2622;2630;2638;2691:2;2679:9;2670:7;2666:23;2662:32;2659:52;;;2707:1;2704;2697:12;2659:52;2747:9;2734:23;2776:18;2817:2;2809:6;2806:14;2803:34;;;2833:1;2830;2823:12;2803:34;2872:70;2934:7;2925:6;2914:9;2910:22;2872:70;:::i;:::-;2961:8;;-1:-1:-1;2846:96:1;-1:-1:-1;3049:2:1;3034:18;;3021:32;;-1:-1:-1;3065:16:1;;;3062:36;;;3094:1;3091;3084:12;3062:36;;3133:72;3197:7;3186:8;3175:9;3171:24;3133:72;:::i;:::-;2492:773;;;;-1:-1:-1;3224:8:1;-1:-1:-1;;;;2492:773:1:o;3270:456::-;3347:6;3355;3363;3416:2;3404:9;3395:7;3391:23;3387:32;3384:52;;;3432:1;3429;3422:12;3384:52;3471:9;3458:23;3490:31;3515:5;3490:31;:::i;:::-;3540:5;-1:-1:-1;3597:2:1;3582:18;;3569:32;3610:33;3569:32;3610:33;:::i;:::-;3270:456;;3662:7;;-1:-1:-1;;;3716:2:1;3701:18;;;;3688:32;;3270:456::o;3920:388::-;3988:6;3996;4049:2;4037:9;4028:7;4024:23;4020:32;4017:52;;;4065:1;4062;4055:12;4017:52;4104:9;4091:23;4123:31;4148:5;4123:31;:::i;:::-;4173:5;-1:-1:-1;4230:2:1;4215:18;;4202:32;4243:33;4202:32;4243:33;:::i;:::-;4295:7;4285:17;;;3920:388;;;;;:::o;4313:247::-;4372:6;4425:2;4413:9;4404:7;4400:23;4396:32;4393:52;;;4441:1;4438;4431:12;4393:52;4480:9;4467:23;4499:31;4524:5;4499:31;:::i;4565:118::-;4651:5;4644:13;4637:21;4630:5;4627:32;4617:60;;4673:1;4670;4663:12;4688:382;4753:6;4761;4814:2;4802:9;4793:7;4789:23;4785:32;4782:52;;;4830:1;4827;4820:12;4782:52;4869:9;4856:23;4888:31;4913:5;4888:31;:::i;:::-;4938:5;-1:-1:-1;4995:2:1;4980:18;;4967:32;5008:30;4967:32;5008:30;:::i;5075:356::-;5277:2;5259:21;;;5296:18;;;5289:30;5355:34;5350:2;5335:18;;5328:62;5422:2;5407:18;;5075:356::o;5436:127::-;5497:10;5492:3;5488:20;5485:1;5478:31;5528:4;5525:1;5518:15;5552:4;5549:1;5542:15;5568:422;5657:1;5700:5;5657:1;5714:270;5735:7;5725:8;5722:21;5714:270;;;5794:4;5790:1;5786:6;5782:17;5776:4;5773:27;5770:53;;;5803:18;;:::i;:::-;5853:7;5843:8;5839:22;5836:55;;;5873:16;;;;5836:55;5952:22;;;;5912:15;;;;5714:270;;;5718:3;5568:422;;;;;:::o;5995:806::-;6044:5;6074:8;6064:80;;-1:-1:-1;6115:1:1;6129:5;;6064:80;6163:4;6153:76;;-1:-1:-1;6200:1:1;6214:5;;6153:76;6245:4;6263:1;6258:59;;;;6331:1;6326:130;;;;6238:218;;6258:59;6288:1;6279:10;;6302:5;;;6326:130;6363:3;6353:8;6350:17;6347:43;;;6370:18;;:::i;:::-;-1:-1:-1;;6426:1:1;6412:16;;6441:5;;6238:218;;6540:2;6530:8;6527:16;6521:3;6515:4;6512:13;6508:36;6502:2;6492:8;6489:16;6484:2;6478:4;6475:12;6471:35;6468:77;6465:159;;;-1:-1:-1;6577:19:1;;;6609:5;;6465:159;6656:34;6681:8;6675:4;6656:34;:::i;:::-;6726:6;6722:1;6718:6;6714:19;6705:7;6702:32;6699:58;;;6737:18;;:::i;:::-;6775:20;;5995:806;-1:-1:-1;;;5995:806:1:o;6806:140::-;6864:5;6893:47;6934:4;6924:8;6920:19;6914:4;6893:47;:::i;6951:168::-;7024:9;;;7055;;7072:15;;;7066:22;;7052:37;7042:71;;7093:18;;:::i;7124:217::-;7164:1;7190;7180:132;;7234:10;7229:3;7225:20;7222:1;7215:31;7269:4;7266:1;7259:15;7297:4;7294:1;7287:15;7180:132;-1:-1:-1;7326:9:1;;7124:217::o;7681:380::-;7760:1;7756:12;;;;7803;;;7824:61;;7878:4;7870:6;7866:17;7856:27;;7824:61;7931:2;7923:6;7920:14;7900:18;7897:38;7894:161;;7977:10;7972:3;7968:20;7965:1;7958:31;8012:4;8009:1;8002:15;8040:4;8037:1;8030:15;7894:161;;7681:380;;;:::o;8764:127::-;8825:10;8820:3;8816:20;8813:1;8806:31;8856:4;8853:1;8846:15;8880:4;8877:1;8870:15;8896:135;8935:3;8956:17;;;8953:43;;8976:18;;:::i;:::-;-1:-1:-1;9023:1:1;9012:13;;8896:135::o;9036:125::-;9101:9;;;9122:10;;;9119:36;;;9135:18;;:::i;9872:184::-;9942:6;9995:2;9983:9;9974:7;9970:23;9966:32;9963:52;;;10011:1;10008;10001:12;9963:52;-1:-1:-1;10034:16:1;;9872:184;-1:-1:-1;9872:184:1:o;12203:251::-;12273:6;12326:2;12314:9;12305:7;12301:23;12297:32;12294:52;;;12342:1;12339;12332:12;12294:52;12374:9;12368:16;12393:31;12418:5;12393:31;:::i;13380:306::-;13468:6;13476;13484;13537:2;13525:9;13516:7;13512:23;13508:32;13505:52;;;13553:1;13550;13543:12;13505:52;13582:9;13576:16;13566:26;;13632:2;13621:9;13617:18;13611:25;13601:35;;13676:2;13665:9;13661:18;13655:25;13645:35;;13380:306;;;;;:::o;13970:245::-;14037:6;14090:2;14078:9;14069:7;14065:23;14061:32;14058:52;;;14106:1;14103;14096:12;14058:52;14138:9;14132:16;14157:28;14179:5;14157:28;:::i;15028:401::-;15230:2;15212:21;;;15269:2;15249:18;;;15242:30;15308:34;15303:2;15288:18;;15281:62;-1:-1:-1;;;15374:2:1;15359:18;;15352:35;15419:3;15404:19;;15028:401::o;15434:399::-;15636:2;15618:21;;;15675:2;15655:18;;;15648:30;15714:34;15709:2;15694:18;;15687:62;-1:-1:-1;;;15780:2:1;15765:18;;15758:33;15823:3;15808:19;;15434:399::o;16603:128::-;16670:9;;;16691:11;;;16688:37;;;16705:18;;:::i;18764:980::-;19026:4;19074:3;19063:9;19059:19;19105:6;19094:9;19087:25;19131:2;19169:6;19164:2;19153:9;19149:18;19142:34;19212:3;19207:2;19196:9;19192:18;19185:31;19236:6;19271;19265:13;19302:6;19294;19287:22;19340:3;19329:9;19325:19;19318:26;;19379:2;19371:6;19367:15;19353:29;;19400:1;19410:195;19424:6;19421:1;19418:13;19410:195;;;19489:13;;-1:-1:-1;;;;;19485:39:1;19473:52;;19580:15;;;;19545:12;;;;19521:1;19439:9;19410:195;;;-1:-1:-1;;;;;;;19661:32:1;;;;19656:2;19641:18;;19634:60;-1:-1:-1;;;19725:3:1;19710:19;19703:35;19622:3;18764:980;-1:-1:-1;;;18764:980:1:o;20156:287::-;20285:3;20323:6;20317:13;20339:66;20398:6;20393:3;20386:4;20378:6;20374:17;20339:66;:::i;:::-;20421:16;;;;;20156:287;-1:-1:-1;;20156:287:1:o

Swarm Source

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