FTM Price: $0.69 (+6.61%)
Gas: 24 GWei

Contract

0x0a77866C01429941BFC7854c0c0675dB1015218b
 

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve791456472024-04-11 7:28:193 days ago1712820499IN
Grim Finance: GRIM EVO Token
0 FTM0.0010903824.21360462
Approve791414012024-04-11 4:45:273 days ago1712810727IN
Grim Finance: GRIM EVO Token
0 FTM0.0012368926
Approve791342412024-04-11 0:57:524 days ago1712797072IN
Grim Finance: GRIM EVO Token
0 FTM0.0012323127.36534473
Approve791340472024-04-11 0:53:164 days ago1712796796IN
Grim Finance: GRIM EVO Token
0 FTM0.0012237626.90663041
Approve790824572024-04-10 9:12:354 days ago1712740355IN
Grim Finance: GRIM EVO Token
0 FTM0.0019329681.0197823
Approve790823742024-04-10 9:10:584 days ago1712740258IN
Grim Finance: GRIM EVO Token
0 FTM0.0019329681.0197823
Approve790816382024-04-10 8:58:074 days ago1712739487IN
Grim Finance: GRIM EVO Token
0 FTM0.0034610276.85694102
Approve790813982024-04-10 8:54:234 days ago1712739263IN
Grim Finance: GRIM EVO Token
0 FTM0.0034967477.65025894
Approve790799912024-04-10 8:30:094 days ago1712737809IN
Grim Finance: GRIM EVO Token
0 FTM0.0036801281.72247534
Approve790798722024-04-10 8:28:204 days ago1712737700IN
Grim Finance: GRIM EVO Token
0 FTM0.0036787581.69208391
Approve790153372024-04-09 16:01:425 days ago1712678502IN
Grim Finance: GRIM EVO Token
0 FTM0.00458049101.71642578
Approve789449472024-04-08 10:56:516 days ago1712573811IN
Grim Finance: GRIM EVO Token
0 FTM0.0026085757.00425381
Approve788465652024-04-06 12:44:358 days ago1712407475IN
Grim Finance: GRIM EVO Token
0 FTM0.00482419102
Approve788465362024-04-06 12:43:528 days ago1712407432IN
Grim Finance: GRIM EVO Token
0 FTM0.00482419102
Approve788463572024-04-06 12:40:108 days ago1712407210IN
Grim Finance: GRIM EVO Token
0 FTM0.00485244102
Approve786081542024-04-01 20:46:0913 days ago1712004369IN
Grim Finance: GRIM EVO Token
0 FTM0.001500633.34076793
Approve786026852024-04-01 17:55:1013 days ago1711994110IN
Grim Finance: GRIM EVO Token
0 FTM0.0014574432.3731689
Approve784919552024-03-30 16:35:2915 days ago1711816529IN
Grim Finance: GRIM EVO Token
0 FTM0.00304586106.90984912
Approve784918672024-03-30 16:33:3815 days ago1711816418IN
Grim Finance: GRIM EVO Token
0 FTM0.00481179106.90984912
Approve784367872024-03-29 18:56:0716 days ago1711738567IN
Grim Finance: GRIM EVO Token
0 FTM0.0017494737
Approve784367642024-03-29 18:55:0716 days ago1711738507IN
Grim Finance: GRIM EVO Token
0 FTM0.0017494737
Approve783577912024-03-28 10:58:3417 days ago1711623514IN
Grim Finance: GRIM EVO Token
0 FTM0.00548482116
Approve782686542024-03-27 6:12:2718 days ago1711519947IN
Grim Finance: GRIM EVO Token
0 FTM0.00690156146
Approve782674902024-03-27 5:49:2818 days ago1711518568IN
Grim Finance: GRIM EVO Token
0 FTM0.00635608141.18365728
Approve782368212024-03-26 18:23:3819 days ago1711477418IN
Grim Finance: GRIM EVO Token
0 FTM0.0036239678.80412242
View all transactions

Latest 25 internal transactions (View All)

Parent Txn Hash Block From To Value
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
793254752024-04-14 7:03:1519 hrs ago1713078195
Grim Finance: GRIM EVO Token
1.20903157 FTM
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GrimEVO

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at ftmscan.com on 2022-01-24
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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
    );
}

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
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;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    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)
        );
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    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'
        // solhint-disable-next-line max-line-length
        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)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(
            value
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(
            value,
            "SafeERC20: decreased allowance below zero"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

// File: contracts/GRIM/GrimToken.sol

pragma solidity ^0.8.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract GrimEVO is Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    mapping(address => uint256) private _balances;

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

    // Details
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    // Fees
    uint256 public BURN_FEE = 1; // 1%
    uint256 public LP_FEE = 1; // 1%

    // Limits
    uint256 public maxLPCap = 100 * 10**decimals();
    bool public swapAndLiquifyEnable = true;

    // Grim addresses
    address public lpReceiverAddress;
    address public minter;

    mapping(address => bool) public _excluded;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    uint256 public MAX_SUPPLY = 1000000 * 10**decimals();

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

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

    constructor(address _lpReceiverAddress) {
        _name = "Grim EVO Token";
        _symbol = "GRIM EVO";
        _mint(msg.sender, MAX_SUPPLY);
        lpReceiverAddress = _lpReceiverAddress;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x16327E3FbDaCA3bcF7E38F5Af2599D2DDc33aE52
        );

        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee

        _excluded[address(this)] = true;
    }

    function setFee(uint256 _burnFee, uint256 _lpFee) public onlyOwner {
        require(_burnFee < 5 && _lpFee < 5, "Fee too high!");

        BURN_FEE = _burnFee;
        LP_FEE = _lpFee;
    }

    function changeLpReceiverAddress(address wallet) public onlyOwner {
        lpReceiverAddress = wallet;
    }

    function exclude(address addr, bool isExclude) public onlyOwner {
        _excluded[addr] = isExclude;
    }

    function setMaxLPCap(uint256 cap) public onlyOwner {
        maxLPCap = cap;
    }

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

    function setSwapAndLiquify(bool isEnabled) public onlyOwner {
        swapAndLiquifyEnable = isEnabled;
    }

    function swapMinter(uint256 _grimAmount, address _user) external {
        require(msg.sender == minter, "!auth");

        uint256 mintAmount = _grimAmount.div(10);
        _mint(_user, mintAmount);

        emit Transfer(address(this), _user, mintAmount);
    }

    function setEvoMinter(address _address) external onlyOwner {
        minter = _address;
    }

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

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 value {ERC20} uses, unless this function is
     * 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 returns (uint8) {
        return 18;
    }

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);

        return true;
    }

    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        _approve(sender, _msgSender(), currentAllowance - 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)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][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)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /** @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:
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
    }

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

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        uint256 senderBalance = _balances[from];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        require(amount > 0, "Transfer amount must be greater than zero");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >= maxLPCap;

        if (
            swapAndLiquifyEnable == true &&
            overMinTokenBalance &&
            from != uniswapV2Pair
        ) {
            //add liquidity
            swapAndLiquifyEnable = false;
            swapAndLiquify(contractTokenBalance);
            swapAndLiquifyEnable = true;
        }

        _balances[from] = senderBalance - amount;

        if (_excluded[from] == true) {
            _balances[to] += amount;
            emit Transfer(from, to, amount);
        } else {
            uint256 burnFee = calculateBurnFee(amount);
            uint256 lpFee = calculateLiquidityFee(amount);
            _balances[to] += amount.sub(burnFee).sub(lpFee);
            emit Transfer(from, to, amount);

            _balances[address(this)] += lpFee;
            emit Transfer(msg.sender, address(this), lpFee);

            _balances[
                address(0x000000000000000000000000000000000000dEaD)
            ] += burnFee;

            emit Transfer(
                msg.sender,
                address(0x000000000000000000000000000000000000dEaD),
                burnFee
            );
        }
    }

    receive() external payable {}

    function swapAndLiquify(uint256 contractTokenBalance) public {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpReceiverAddress,
            block.timestamp
        );
    }

    function setRouter(address _router) public onlyOwner {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(_uniswapV2Router)] = MAX_SUPPLY;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_lpReceiverAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BURN_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LP_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_excluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"changeLpReceiverAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isExclude","type":"bool"}],"name":"exclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpReceiverAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLPCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setEvoMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_lpFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cap","type":"uint256"}],"name":"setMaxLPCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"setSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contractTokenBalance","type":"uint256"}],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_grimAmount","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"swapMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600160065560016007556200001e620004ec60201b60201c565b600a6200002c919062000845565b60646200003a919062000982565b6008556001600960006101000a81548160ff02191690831515021790555062000068620004ec60201b60201c565b600a62000076919062000845565b620f424062000086919062000982565b600e553480156200009657600080fd5b5060405162004194380380620041948339818101604052810190620000bc9190620006ae565b6000620000ce620004f560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280600e81526020017f4772696d2045564f20546f6b656e00000000000000000000000000000000000081525060049080519060200190620001b9929190620005e7565b506040518060400160405280600881526020017f4752494d2045564f0000000000000000000000000000000000000000000000008152506005908051906020019062000207929190620005e7565b506200021c33600e54620004fd60201b60201c565b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060007316327e3fbdaca3bcf7e38f5af2599d2ddc33ae5290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bd57600080fd5b505afa158015620002d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f89190620006ae565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035b57600080fd5b505afa15801562000370573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003969190620006ae565b6040518363ffffffff1660e01b8152600401620003b59291906200072d565b602060405180830381600087803b158015620003d057600080fd5b505af1158015620003e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040b9190620006ae565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000ae9565b60006012905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000567906200075a565b60405180910390fd5b80600360008282546200058491906200078d565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005dc91906200078d565b925050819055505050565b828054620005f59062000a2e565b90600052602060002090601f01602090048101928262000619576000855562000665565b82601f106200063457805160ff191683800117855562000665565b8280016001018555821562000665579182015b828111156200066457825182559160200191906001019062000647565b5b50905062000674919062000678565b5090565b5b808211156200069357600081600090555060010162000679565b5090565b600081519050620006a88162000acf565b92915050565b600060208284031215620006c157600080fd5b6000620006d18482850162000697565b91505092915050565b620006e581620009e3565b82525050565b6000620006fa601f836200077c565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000604082019050620007446000830185620006da565b620007536020830184620006da565b9392505050565b600060208201905081810360008301526200077581620006eb565b9050919050565b600082825260208201905092915050565b60006200079a8262000a17565b9150620007a78362000a17565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007df57620007de62000a64565b5b828201905092915050565b6000808291508390505b60018511156200083c5780860481111562000814576200081362000a64565b5b6001851615620008245780820291505b8081029050620008348562000ac2565b9450620007f4565b94509492505050565b6000620008528262000a17565b91506200085f8362000a21565b92506200088e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000896565b905092915050565b600082620008a857600190506200097b565b81620008b857600090506200097b565b8160018114620008d15760028114620008dc5762000912565b60019150506200097b565b60ff841115620008f157620008f062000a64565b5b8360020a9150848211156200090b576200090a62000a64565b5b506200097b565b5060208310610133831016604e8410600b84101617156200094c5782820a90508381111562000946576200094562000a64565b5b6200097b565b6200095b8484846001620007ea565b9250905081840481111562000975576200097462000a64565b5b81810290505b9392505050565b60006200098f8262000a17565b91506200099c8362000a17565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620009d857620009d762000a64565b5b828202905092915050565b6000620009f082620009f7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000a4757607f821691505b6020821081141562000a5e5762000a5d62000a93565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b62000ada81620009e3565b811462000ae657600080fd5b50565b61369b8062000af96000396000f3fe6080604052600436106101f25760003560e01c806369ee297b1161010d578063a457c2d7116100a0578063c2e672d11161006f578063c2e672d1146106fc578063d6ef56f314610725578063dd62ed3e14610762578063df0b34531461079f578063f2fde38b146107c8576101f9565b8063a457c2d714610630578063a9059cbb1461066d578063b6f116cf146106aa578063c0d78655146106d3576101f9565b8063801527ce116100dc578063801527ce146105865780638da5cb5b146105af57806395d89b41146105da578063a2cb8aac14610605576101f9565b806369ee297b146104de57806370a0823114610509578063715018a6146105465780637647b90d1461055d576101f9565b806323b872dd11610185578063480df05811610154578063480df0581461043457806349bd5a5e1461045f57806352f7c9881461048a5780635e3f2727146104b3576101f9565b806323b872dd14610364578063313ce567146103a157806332cb6b0c146103cc57806339509351146103f7576101f9565b8063173865ad116101c1578063173865ad146102bc57806318160ddd146102e55780631bd7604d146103105780632223e04e14610339576101f9565b806306fdde03146101fe5780630754617214610229578063095ea7b3146102545780631694505e14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107f1565b60405161022091906130bf565b60405180910390f35b34801561023557600080fd5b5061023e610883565b60405161024b9190612fe4565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612947565b6108a9565b6040516102889190613089565b60405180910390f35b34801561029d57600080fd5b506102a66108c7565b6040516102b391906130a4565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de91906129ac565b6108ed565b005b3480156102f157600080fd5b506102fa61098d565b6040516103079190613261565b60405180910390f35b34801561031c57600080fd5b506103376004803603810190610332919061282e565b610997565b005b34801561034557600080fd5b5061034e610a57565b60405161035b9190613089565b60405180910390f35b34801561037057600080fd5b5061038b600480360381019061038691906128bc565b610a6a565b6040516103989190613089565b60405180910390f35b3480156103ad57600080fd5b506103b6610b6b565b6040516103c3919061330d565b60405180910390f35b3480156103d857600080fd5b506103e1610b74565b6040516103ee9190613261565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612947565b610b7a565b60405161042b9190613089565b60405180910390f35b34801561044057600080fd5b50610449610c26565b6040516104569190613261565b60405180910390f35b34801561046b57600080fd5b50610474610c2c565b6040516104819190612fe4565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190612a11565b610c52565b005b3480156104bf57600080fd5b506104c8610d2f565b6040516104d59190613261565b60405180910390f35b3480156104ea57600080fd5b506104f3610d35565b6040516105009190613261565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b919061282e565b610d3b565b60405161053d9190613261565b60405180910390f35b34801561055257600080fd5b5061055b610d84565b005b34801561056957600080fd5b50610584600480360381019061057f919061290b565b610ebe565b005b34801561059257600080fd5b506105ad60048036038101906105a89190612983565b610f95565b005b3480156105bb57600080fd5b506105c461102e565b6040516105d19190612fe4565b60405180910390f35b3480156105e657600080fd5b506105ef611057565b6040516105fc91906130bf565b60405180910390f35b34801561061157600080fd5b5061061a6110e9565b6040516106279190612fe4565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190612947565b61110f565b6040516106649190613089565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f9190612947565b611203565b6040516106a19190613089565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc91906129ac565b611221565b005b3480156106df57600080fd5b506106fa60048036038101906106f5919061282e565b6112a7565b005b34801561070857600080fd5b50610723600480360381019061071e91906129d5565b6115b7565b005b34801561073157600080fd5b5061074c6004803603810190610747919061282e565b6116d3565b6040516107599190613089565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190612880565b6116f3565b6040516107969190613261565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c1919061282e565b61177a565b005b3480156107d457600080fd5b506107ef60048036038101906107ea919061282e565b61183a565b005b60606004805461080090613550565b80601f016020809104026020016040519081016040528092919081815260200182805461082c90613550565b80156108795780601f1061084e57610100808354040283529160200191610879565b820191906000526020600020905b81548152906001019060200180831161085c57829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006108bd6108b66119e3565b84846119eb565b6001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610903600283611b5190919063ffffffff16565b9050600061091a8284611b9b90919063ffffffff16565b9050600047905061092a83611be5565b600061093f8247611b9b90919063ffffffff16565b905061094b8382611ea9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161097e939291906132d6565b60405180910390a15050505050565b6000600354905090565b61099f6119e3565b73ffffffffffffffffffffffffffffffffffffffff166109bd61102e565b73ffffffffffffffffffffffffffffffffffffffff1614610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a90613181565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900460ff1681565b6000610a77848484611fb8565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ac26119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990613161565b60405180910390fd5b610b5f85610b4e6119e3565b8584610b5a919061345e565b6119eb565b60019150509392505050565b60006012905090565b600e5481565b6000610c1c610b876119e3565b848460026000610b956119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c17919061337d565b6119eb565b6001905092915050565b60065481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c5a6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610c7861102e565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613181565b60405180910390fd5b600582108015610cde5750600581105b610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d14906131c1565b60405180910390fd5b81600681905550806007819055505050565b60075481565b60085481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d8c6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610daa61102e565b73ffffffffffffffffffffffffffffffffffffffff1614610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790613181565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610ec66119e3565b73ffffffffffffffffffffffffffffffffffffffff16610ee461102e565b73ffffffffffffffffffffffffffffffffffffffff1614610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613181565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610f9d6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610fbb61102e565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890613181565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461106690613550565b80601f016020809104026020016040519081016040528092919081815260200182805461109290613550565b80156110df5780601f106110b4576101008083540402835291602001916110df565b820191906000526020600020905b8154815290600101906020018083116110c257829003601f168201915b5050505050905090565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600061111e6119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290613221565b60405180910390fd5b6111f86111e66119e3565b8585846111f3919061345e565b6119eb565b600191505092915050565b60006112176112106119e3565b8484611fb8565b6001905092915050565b6112296119e3565b73ffffffffffffffffffffffffffffffffffffffff1661124761102e565b73ffffffffffffffffffffffffffffffffffffffff161461129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490613181565b60405180910390fd5b8060088190555050565b6112af6119e3565b73ffffffffffffffffffffffffffffffffffffffff166112cd61102e565b73ffffffffffffffffffffffffffffffffffffffff1614611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a90613181565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561136e57600080fd5b505afa158015611382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a69190612857565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561140857600080fd5b505afa15801561141c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114409190612857565b6040518363ffffffff1660e01b815260040161145d929190612fff565b602060405180830381600087803b15801561147757600080fd5b505af115801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af9190612857565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e54600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613201565b60405180910390fd5b600061165d600a84611b5190919063ffffffff16565b9050611669828261253e565b8173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116c69190613261565b60405180910390a3505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117826119e3565b73ffffffffffffffffffffffffffffffffffffffff166117a061102e565b73ffffffffffffffffffffffffffffffffffffffff16146117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90613181565b60405180910390fd5b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118426119e3565b73ffffffffffffffffffffffffffffffffffffffff1661186061102e565b73ffffffffffffffffffffffffffffffffffffffff16146118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90613181565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d906130e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a52906131e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac290613101565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000611b9383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612621565b905092915050565b6000611bdd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612684565b905092915050565b6000600267ffffffffffffffff811115611c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611c565781602001602082028036833780820191505090505b5090503081600081518110611c94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3657600080fd5b505afa158015611d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6e9190612857565b81600181518110611da8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611e0f30600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119eb565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611e7395949392919061327c565b600060405180830381600087803b158015611e8d57600080fd5b505af1158015611ea1573d6000803e3d6000fd5b505050505050565b611ed630600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119eb565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611f5f96959493929190613028565b6060604051808303818588803b158015611f7857600080fd5b505af1158015611f8c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fb19190612a4d565b5050505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561203f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203690613121565b60405180910390fd5b60008211612082576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612079906131a1565b60405180910390fd5b600061208d30610d3b565b90506000600854821015905060011515600960009054906101000a900460ff1615151480156120b95750805b80156121135750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15612158576000600960006101000a81548160ff02191690831515021790555061213c826108ed565b6001600960006101000a81548160ff0219169083151502179055505b8383612164919061345e565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060011515600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156122c05783600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461224f919061337d565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516122b39190613261565b60405180910390a3612536565b60006122cb856126e8565b905060006122d886612719565b90506122ff816122f18489611b9b90919063ffffffff16565b611b9b90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461234d919061337d565b925050819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516123b19190613261565b60405180910390a380600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612408919061337d565b925050819055503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161246c9190613261565b60405180910390a3816001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124c5919061337d565b9250508190555061dead73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161252b9190613261565b60405180910390a350505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590613241565b60405180910390fd5b80600360008282546125c0919061337d565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612616919061337d565b925050819055505050565b60008083118290612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f91906130bf565b60405180910390fd5b506000838561267791906133d3565b9050809150509392505050565b60008383111582906126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c391906130bf565b60405180910390fd5b50600083856126db919061345e565b9050809150509392505050565b600061271260646127046006548561274a90919063ffffffff16565b611b5190919063ffffffff16565b9050919050565b600061274360646127356007548561274a90919063ffffffff16565b611b5190919063ffffffff16565b9050919050565b60008083141561275d57600090506127bf565b6000828461276b9190613404565b905082848261277a91906133d3565b146127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b190613141565b60405180910390fd5b809150505b92915050565b6000813590506127d481613620565b92915050565b6000815190506127e981613620565b92915050565b6000813590506127fe81613637565b92915050565b6000813590506128138161364e565b92915050565b6000815190506128288161364e565b92915050565b60006020828403121561284057600080fd5b600061284e848285016127c5565b91505092915050565b60006020828403121561286957600080fd5b6000612877848285016127da565b91505092915050565b6000806040838503121561289357600080fd5b60006128a1858286016127c5565b92505060206128b2858286016127c5565b9150509250929050565b6000806000606084860312156128d157600080fd5b60006128df868287016127c5565b93505060206128f0868287016127c5565b925050604061290186828701612804565b9150509250925092565b6000806040838503121561291e57600080fd5b600061292c858286016127c5565b925050602061293d858286016127ef565b9150509250929050565b6000806040838503121561295a57600080fd5b6000612968858286016127c5565b925050602061297985828601612804565b9150509250929050565b60006020828403121561299557600080fd5b60006129a3848285016127ef565b91505092915050565b6000602082840312156129be57600080fd5b60006129cc84828501612804565b91505092915050565b600080604083850312156129e857600080fd5b60006129f685828601612804565b9250506020612a07858286016127c5565b9150509250929050565b60008060408385031215612a2457600080fd5b6000612a3285828601612804565b9250506020612a4385828601612804565b9150509250929050565b600080600060608486031215612a6257600080fd5b6000612a7086828701612819565b9350506020612a8186828701612819565b9250506040612a9286828701612819565b9150509250925092565b6000612aa88383612ab4565b60208301905092915050565b612abd81613492565b82525050565b612acc81613492565b82525050565b6000612add82613338565b612ae7818561335b565b9350612af283613328565b8060005b83811015612b23578151612b0a8882612a9c565b9750612b158361334e565b925050600181019050612af6565b5085935050505092915050565b612b39816134a4565b82525050565b612b48816134e7565b82525050565b612b578161350b565b82525050565b6000612b6882613343565b612b72818561336c565b9350612b8281856020860161351d565b612b8b8161360f565b840191505092915050565b6000612ba360268361336c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c0960228361336c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c6f60268361336c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612cd560218361336c565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d3b60288361336c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612da160208361336c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612de160298361336c565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e47600d8361336c565b91507f46656520746f6f206869676821000000000000000000000000000000000000006000830152602082019050919050565b6000612e8760248361336c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612eed60058361336c565b91507f21617574680000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000612f2d60258361336c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f93601f8361336c565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b612fcf816134d0565b82525050565b612fde816134da565b82525050565b6000602082019050612ff96000830184612ac3565b92915050565b60006040820190506130146000830185612ac3565b6130216020830184612ac3565b9392505050565b600060c08201905061303d6000830189612ac3565b61304a6020830188612fc6565b6130576040830187612b4e565b6130646060830186612b4e565b6130716080830185612ac3565b61307e60a0830184612fc6565b979650505050505050565b600060208201905061309e6000830184612b30565b92915050565b60006020820190506130b96000830184612b3f565b92915050565b600060208201905081810360008301526130d98184612b5d565b905092915050565b600060208201905081810360008301526130fa81612b96565b9050919050565b6000602082019050818103600083015261311a81612bfc565b9050919050565b6000602082019050818103600083015261313a81612c62565b9050919050565b6000602082019050818103600083015261315a81612cc8565b9050919050565b6000602082019050818103600083015261317a81612d2e565b9050919050565b6000602082019050818103600083015261319a81612d94565b9050919050565b600060208201905081810360008301526131ba81612dd4565b9050919050565b600060208201905081810360008301526131da81612e3a565b9050919050565b600060208201905081810360008301526131fa81612e7a565b9050919050565b6000602082019050818103600083015261321a81612ee0565b9050919050565b6000602082019050818103600083015261323a81612f20565b9050919050565b6000602082019050818103600083015261325a81612f86565b9050919050565b60006020820190506132766000830184612fc6565b92915050565b600060a0820190506132916000830188612fc6565b61329e6020830187612b4e565b81810360408301526132b08186612ad2565b90506132bf6060830185612ac3565b6132cc6080830184612fc6565b9695505050505050565b60006060820190506132eb6000830186612fc6565b6132f86020830185612fc6565b6133056040830184612fc6565b949350505050565b60006020820190506133226000830184612fd5565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613388826134d0565b9150613393836134d0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133c8576133c7613582565b5b828201905092915050565b60006133de826134d0565b91506133e9836134d0565b9250826133f9576133f86135b1565b5b828204905092915050565b600061340f826134d0565b915061341a836134d0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561345357613452613582565b5b828202905092915050565b6000613469826134d0565b9150613474836134d0565b92508282101561348757613486613582565b5b828203905092915050565b600061349d826134b0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006134f2826134f9565b9050919050565b6000613504826134b0565b9050919050565b6000613516826134d0565b9050919050565b60005b8381101561353b578082015181840152602081019050613520565b8381111561354a576000848401525b50505050565b6000600282049050600182168061356857607f821691505b6020821081141561357c5761357b6135e0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61362981613492565b811461363457600080fd5b50565b613640816134a4565b811461364b57600080fd5b50565b613657816134d0565b811461366257600080fd5b5056fea264697066735822122039dd60cf85fbcec72e94d70c03a049863ba94651d71a3879602b13801d03330064736f6c63430008000033000000000000000000000000fae236b4e261278c2b84e74b4631cf7bcafca06d

Deployed Bytecode

0x6080604052600436106101f25760003560e01c806369ee297b1161010d578063a457c2d7116100a0578063c2e672d11161006f578063c2e672d1146106fc578063d6ef56f314610725578063dd62ed3e14610762578063df0b34531461079f578063f2fde38b146107c8576101f9565b8063a457c2d714610630578063a9059cbb1461066d578063b6f116cf146106aa578063c0d78655146106d3576101f9565b8063801527ce116100dc578063801527ce146105865780638da5cb5b146105af57806395d89b41146105da578063a2cb8aac14610605576101f9565b806369ee297b146104de57806370a0823114610509578063715018a6146105465780637647b90d1461055d576101f9565b806323b872dd11610185578063480df05811610154578063480df0581461043457806349bd5a5e1461045f57806352f7c9881461048a5780635e3f2727146104b3576101f9565b806323b872dd14610364578063313ce567146103a157806332cb6b0c146103cc57806339509351146103f7576101f9565b8063173865ad116101c1578063173865ad146102bc57806318160ddd146102e55780631bd7604d146103105780632223e04e14610339576101f9565b806306fdde03146101fe5780630754617214610229578063095ea7b3146102545780631694505e14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107f1565b60405161022091906130bf565b60405180910390f35b34801561023557600080fd5b5061023e610883565b60405161024b9190612fe4565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612947565b6108a9565b6040516102889190613089565b60405180910390f35b34801561029d57600080fd5b506102a66108c7565b6040516102b391906130a4565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de91906129ac565b6108ed565b005b3480156102f157600080fd5b506102fa61098d565b6040516103079190613261565b60405180910390f35b34801561031c57600080fd5b506103376004803603810190610332919061282e565b610997565b005b34801561034557600080fd5b5061034e610a57565b60405161035b9190613089565b60405180910390f35b34801561037057600080fd5b5061038b600480360381019061038691906128bc565b610a6a565b6040516103989190613089565b60405180910390f35b3480156103ad57600080fd5b506103b6610b6b565b6040516103c3919061330d565b60405180910390f35b3480156103d857600080fd5b506103e1610b74565b6040516103ee9190613261565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612947565b610b7a565b60405161042b9190613089565b60405180910390f35b34801561044057600080fd5b50610449610c26565b6040516104569190613261565b60405180910390f35b34801561046b57600080fd5b50610474610c2c565b6040516104819190612fe4565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190612a11565b610c52565b005b3480156104bf57600080fd5b506104c8610d2f565b6040516104d59190613261565b60405180910390f35b3480156104ea57600080fd5b506104f3610d35565b6040516105009190613261565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b919061282e565b610d3b565b60405161053d9190613261565b60405180910390f35b34801561055257600080fd5b5061055b610d84565b005b34801561056957600080fd5b50610584600480360381019061057f919061290b565b610ebe565b005b34801561059257600080fd5b506105ad60048036038101906105a89190612983565b610f95565b005b3480156105bb57600080fd5b506105c461102e565b6040516105d19190612fe4565b60405180910390f35b3480156105e657600080fd5b506105ef611057565b6040516105fc91906130bf565b60405180910390f35b34801561061157600080fd5b5061061a6110e9565b6040516106279190612fe4565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190612947565b61110f565b6040516106649190613089565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f9190612947565b611203565b6040516106a19190613089565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc91906129ac565b611221565b005b3480156106df57600080fd5b506106fa60048036038101906106f5919061282e565b6112a7565b005b34801561070857600080fd5b50610723600480360381019061071e91906129d5565b6115b7565b005b34801561073157600080fd5b5061074c6004803603810190610747919061282e565b6116d3565b6040516107599190613089565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190612880565b6116f3565b6040516107969190613261565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c1919061282e565b61177a565b005b3480156107d457600080fd5b506107ef60048036038101906107ea919061282e565b61183a565b005b60606004805461080090613550565b80601f016020809104026020016040519081016040528092919081815260200182805461082c90613550565b80156108795780601f1061084e57610100808354040283529160200191610879565b820191906000526020600020905b81548152906001019060200180831161085c57829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006108bd6108b66119e3565b84846119eb565b6001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610903600283611b5190919063ffffffff16565b9050600061091a8284611b9b90919063ffffffff16565b9050600047905061092a83611be5565b600061093f8247611b9b90919063ffffffff16565b905061094b8382611ea9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161097e939291906132d6565b60405180910390a15050505050565b6000600354905090565b61099f6119e3565b73ffffffffffffffffffffffffffffffffffffffff166109bd61102e565b73ffffffffffffffffffffffffffffffffffffffff1614610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a90613181565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900460ff1681565b6000610a77848484611fb8565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ac26119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990613161565b60405180910390fd5b610b5f85610b4e6119e3565b8584610b5a919061345e565b6119eb565b60019150509392505050565b60006012905090565b600e5481565b6000610c1c610b876119e3565b848460026000610b956119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c17919061337d565b6119eb565b6001905092915050565b60065481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c5a6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610c7861102e565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613181565b60405180910390fd5b600582108015610cde5750600581105b610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d14906131c1565b60405180910390fd5b81600681905550806007819055505050565b60075481565b60085481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d8c6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610daa61102e565b73ffffffffffffffffffffffffffffffffffffffff1614610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790613181565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610ec66119e3565b73ffffffffffffffffffffffffffffffffffffffff16610ee461102e565b73ffffffffffffffffffffffffffffffffffffffff1614610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613181565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610f9d6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610fbb61102e565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890613181565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461106690613550565b80601f016020809104026020016040519081016040528092919081815260200182805461109290613550565b80156110df5780601f106110b4576101008083540402835291602001916110df565b820191906000526020600020905b8154815290600101906020018083116110c257829003601f168201915b5050505050905090565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600061111e6119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290613221565b60405180910390fd5b6111f86111e66119e3565b8585846111f3919061345e565b6119eb565b600191505092915050565b60006112176112106119e3565b8484611fb8565b6001905092915050565b6112296119e3565b73ffffffffffffffffffffffffffffffffffffffff1661124761102e565b73ffffffffffffffffffffffffffffffffffffffff161461129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490613181565b60405180910390fd5b8060088190555050565b6112af6119e3565b73ffffffffffffffffffffffffffffffffffffffff166112cd61102e565b73ffffffffffffffffffffffffffffffffffffffff1614611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a90613181565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561136e57600080fd5b505afa158015611382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a69190612857565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561140857600080fd5b505afa15801561141c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114409190612857565b6040518363ffffffff1660e01b815260040161145d929190612fff565b602060405180830381600087803b15801561147757600080fd5b505af115801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af9190612857565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e54600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613201565b60405180910390fd5b600061165d600a84611b5190919063ffffffff16565b9050611669828261253e565b8173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116c69190613261565b60405180910390a3505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117826119e3565b73ffffffffffffffffffffffffffffffffffffffff166117a061102e565b73ffffffffffffffffffffffffffffffffffffffff16146117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90613181565b60405180910390fd5b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118426119e3565b73ffffffffffffffffffffffffffffffffffffffff1661186061102e565b73ffffffffffffffffffffffffffffffffffffffff16146118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90613181565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d906130e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a52906131e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac290613101565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000611b9383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612621565b905092915050565b6000611bdd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612684565b905092915050565b6000600267ffffffffffffffff811115611c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611c565781602001602082028036833780820191505090505b5090503081600081518110611c94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3657600080fd5b505afa158015611d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6e9190612857565b81600181518110611da8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611e0f30600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119eb565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611e7395949392919061327c565b600060405180830381600087803b158015611e8d57600080fd5b505af1158015611ea1573d6000803e3d6000fd5b505050505050565b611ed630600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119eb565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611f5f96959493929190613028565b6060604051808303818588803b158015611f7857600080fd5b505af1158015611f8c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fb19190612a4d565b5050505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561203f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203690613121565b60405180910390fd5b60008211612082576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612079906131a1565b60405180910390fd5b600061208d30610d3b565b90506000600854821015905060011515600960009054906101000a900460ff1615151480156120b95750805b80156121135750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15612158576000600960006101000a81548160ff02191690831515021790555061213c826108ed565b6001600960006101000a81548160ff0219169083151502179055505b8383612164919061345e565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060011515600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156122c05783600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461224f919061337d565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516122b39190613261565b60405180910390a3612536565b60006122cb856126e8565b905060006122d886612719565b90506122ff816122f18489611b9b90919063ffffffff16565b611b9b90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461234d919061337d565b925050819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516123b19190613261565b60405180910390a380600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612408919061337d565b925050819055503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161246c9190613261565b60405180910390a3816001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124c5919061337d565b9250508190555061dead73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161252b9190613261565b60405180910390a350505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590613241565b60405180910390fd5b80600360008282546125c0919061337d565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612616919061337d565b925050819055505050565b60008083118290612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f91906130bf565b60405180910390fd5b506000838561267791906133d3565b9050809150509392505050565b60008383111582906126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c391906130bf565b60405180910390fd5b50600083856126db919061345e565b9050809150509392505050565b600061271260646127046006548561274a90919063ffffffff16565b611b5190919063ffffffff16565b9050919050565b600061274360646127356007548561274a90919063ffffffff16565b611b5190919063ffffffff16565b9050919050565b60008083141561275d57600090506127bf565b6000828461276b9190613404565b905082848261277a91906133d3565b146127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b190613141565b60405180910390fd5b809150505b92915050565b6000813590506127d481613620565b92915050565b6000815190506127e981613620565b92915050565b6000813590506127fe81613637565b92915050565b6000813590506128138161364e565b92915050565b6000815190506128288161364e565b92915050565b60006020828403121561284057600080fd5b600061284e848285016127c5565b91505092915050565b60006020828403121561286957600080fd5b6000612877848285016127da565b91505092915050565b6000806040838503121561289357600080fd5b60006128a1858286016127c5565b92505060206128b2858286016127c5565b9150509250929050565b6000806000606084860312156128d157600080fd5b60006128df868287016127c5565b93505060206128f0868287016127c5565b925050604061290186828701612804565b9150509250925092565b6000806040838503121561291e57600080fd5b600061292c858286016127c5565b925050602061293d858286016127ef565b9150509250929050565b6000806040838503121561295a57600080fd5b6000612968858286016127c5565b925050602061297985828601612804565b9150509250929050565b60006020828403121561299557600080fd5b60006129a3848285016127ef565b91505092915050565b6000602082840312156129be57600080fd5b60006129cc84828501612804565b91505092915050565b600080604083850312156129e857600080fd5b60006129f685828601612804565b9250506020612a07858286016127c5565b9150509250929050565b60008060408385031215612a2457600080fd5b6000612a3285828601612804565b9250506020612a4385828601612804565b9150509250929050565b600080600060608486031215612a6257600080fd5b6000612a7086828701612819565b9350506020612a8186828701612819565b9250506040612a9286828701612819565b9150509250925092565b6000612aa88383612ab4565b60208301905092915050565b612abd81613492565b82525050565b612acc81613492565b82525050565b6000612add82613338565b612ae7818561335b565b9350612af283613328565b8060005b83811015612b23578151612b0a8882612a9c565b9750612b158361334e565b925050600181019050612af6565b5085935050505092915050565b612b39816134a4565b82525050565b612b48816134e7565b82525050565b612b578161350b565b82525050565b6000612b6882613343565b612b72818561336c565b9350612b8281856020860161351d565b612b8b8161360f565b840191505092915050565b6000612ba360268361336c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c0960228361336c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c6f60268361336c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612cd560218361336c565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d3b60288361336c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612da160208361336c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612de160298361336c565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e47600d8361336c565b91507f46656520746f6f206869676821000000000000000000000000000000000000006000830152602082019050919050565b6000612e8760248361336c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612eed60058361336c565b91507f21617574680000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000612f2d60258361336c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f93601f8361336c565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b612fcf816134d0565b82525050565b612fde816134da565b82525050565b6000602082019050612ff96000830184612ac3565b92915050565b60006040820190506130146000830185612ac3565b6130216020830184612ac3565b9392505050565b600060c08201905061303d6000830189612ac3565b61304a6020830188612fc6565b6130576040830187612b4e565b6130646060830186612b4e565b6130716080830185612ac3565b61307e60a0830184612fc6565b979650505050505050565b600060208201905061309e6000830184612b30565b92915050565b60006020820190506130b96000830184612b3f565b92915050565b600060208201905081810360008301526130d98184612b5d565b905092915050565b600060208201905081810360008301526130fa81612b96565b9050919050565b6000602082019050818103600083015261311a81612bfc565b9050919050565b6000602082019050818103600083015261313a81612c62565b9050919050565b6000602082019050818103600083015261315a81612cc8565b9050919050565b6000602082019050818103600083015261317a81612d2e565b9050919050565b6000602082019050818103600083015261319a81612d94565b9050919050565b600060208201905081810360008301526131ba81612dd4565b9050919050565b600060208201905081810360008301526131da81612e3a565b9050919050565b600060208201905081810360008301526131fa81612e7a565b9050919050565b6000602082019050818103600083015261321a81612ee0565b9050919050565b6000602082019050818103600083015261323a81612f20565b9050919050565b6000602082019050818103600083015261325a81612f86565b9050919050565b60006020820190506132766000830184612fc6565b92915050565b600060a0820190506132916000830188612fc6565b61329e6020830187612b4e565b81810360408301526132b08186612ad2565b90506132bf6060830185612ac3565b6132cc6080830184612fc6565b9695505050505050565b60006060820190506132eb6000830186612fc6565b6132f86020830185612fc6565b6133056040830184612fc6565b949350505050565b60006020820190506133226000830184612fd5565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613388826134d0565b9150613393836134d0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133c8576133c7613582565b5b828201905092915050565b60006133de826134d0565b91506133e9836134d0565b9250826133f9576133f86135b1565b5b828204905092915050565b600061340f826134d0565b915061341a836134d0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561345357613452613582565b5b828202905092915050565b6000613469826134d0565b9150613474836134d0565b92508282101561348757613486613582565b5b828203905092915050565b600061349d826134b0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006134f2826134f9565b9050919050565b6000613504826134b0565b9050919050565b6000613516826134d0565b9050919050565b60005b8381101561353b578082015181840152602081019050613520565b8381111561354a576000848401525b50505050565b6000600282049050600182168061356857607f821691505b6020821081141561357c5761357b6135e0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61362981613492565b811461363457600080fd5b50565b613640816134a4565b811461364b57600080fd5b50565b613657816134d0565b811461366257600080fd5b5056fea264697066735822122039dd60cf85fbcec72e94d70c03a049863ba94651d71a3879602b13801d03330064736f6c63430008000033

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

000000000000000000000000fae236b4e261278c2b84e74b4631cf7bcafca06d

-----Decoded View---------------
Arg [0] : _lpReceiverAddress (address): 0xfAE236b4E261278C2B84e74b4631cf7BCAFca06d

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fae236b4e261278c2b84e74b4631cf7bcafca06d


Deployed Bytecode Sourcemap

31631:13768:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34778:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32244:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36544:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32324:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42845:964;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35871:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34438:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32134:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37386:484;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35722:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32407:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38279:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31986:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32372:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33368:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32026:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32081:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36033:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21629:148;;;;;;;;;;;;;:::i;:::-;;33691:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34041:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20978:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34988:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32205:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39079:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36746:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33809:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44945:451;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34160:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32274:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36214:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33572:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21932:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34778:91;34823:13;34856:5;34849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34778:91;:::o;32244:21::-;;;;;;;;;;;;;:::o;36544:194::-;36645:4;36667:39;36676:12;:10;:12::i;:::-;36690:7;36699:6;36667:8;:39::i;:::-;36726:4;36719:11;;36544:194;;;;:::o;32324:41::-;;;;;;;;;;;;;:::o;42845:964::-;42968:12;42983:27;43008:1;42983:20;:24;;:27;;;;:::i;:::-;42968:42;;43021:17;43041:30;43066:4;43041:20;:24;;:30;;;;:::i;:::-;43021:50;;43349:22;43374:21;43349:46;;43440:22;43457:4;43440:16;:22::i;:::-;43593:18;43614:41;43640:14;43614:21;:25;;:41;;;;:::i;:::-;43593:62;;43705:35;43718:9;43729:10;43705:12;:35::i;:::-;43758:43;43773:4;43779:10;43791:9;43758:43;;;;;;;;:::i;:::-;;;;;;;;42845:964;;;;;:::o;35871:99::-;35923:7;35950:12;;35943:19;;35871:99;:::o;34438:95::-;21209:12;:10;:12::i;:::-;21198:23;;:7;:5;:7::i;:::-;:23;;;21190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34517:8:::1;34508:6;;:17;;;;;;;;;;;;;;;;;;34438:95:::0;:::o;32134:39::-;;;;;;;;;;;;;:::o;37386:484::-;37517:4;37534:36;37544:6;37552:9;37563:6;37534:9;:36::i;:::-;37583:24;37610:11;:19;37622:6;37610:19;;;;;;;;;;;;;;;:33;37630:12;:10;:12::i;:::-;37610:33;;;;;;;;;;;;;;;;37583:60;;37696:6;37676:16;:26;;37654:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;37781:57;37790:6;37798:12;:10;:12::i;:::-;37831:6;37812:16;:25;;;;:::i;:::-;37781:8;:57::i;:::-;37858:4;37851:11;;;37386:484;;;;;:::o;35722:84::-;35771:5;35796:2;35789:9;;35722:84;:::o;32407:52::-;;;;:::o;38279:297::-;38394:4;38416:130;38439:12;:10;:12::i;:::-;38466:7;38525:10;38488:11;:25;38500:12;:10;:12::i;:::-;38488:25;;;;;;;;;;;;;;;:34;38514:7;38488:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;38416:8;:130::i;:::-;38564:4;38557:11;;38279:297;;;;:::o;31986:27::-;;;;:::o;32372:28::-;;;;;;;;;;;;;:::o;33368:196::-;21209:12;:10;:12::i;:::-;21198:23;;:7;:5;:7::i;:::-;:23;;;21190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33465:1:::1;33454:8;:12;:26;;;;;33479:1;33470:6;:10;33454:26;33446:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;33522:8;33511;:19;;;;33550:6;33541;:15;;;;33368:196:::0;;:::o;32026:25::-;;;;:::o;32081:46::-;;;;:::o;36033:118::-;36098:7;36125:9;:18;36135:7;36125:18;;;;;;;;;;;;;;;;36118:25;;36033:118;;;:::o;21629:148::-;21209:12;:10;:12::i;:::-;21198:23;;:7;:5;:7::i;:::-;:23;;;21190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21736:1:::1;21699:40;;21720:6;::::0;::::1;;;;;;;;21699:40;;;;;;;;;;;;21767:1;21750:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;21629:148::o:0;33691:110::-;21209:12;:10;:12::i;:::-;21198:23;;:7;:5;:7::i;:::-;:23;;;21190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33784:9:::1;33766;:15;33776:4;33766:15;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33691:110:::0;;:::o;34041:111::-;21209:12;:10;:12::i;:::-;21198:23;;:7;:5;:7::i;:::-;:23;;;21190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34135:9:::1;34112:20;;:32;;;;;;;;;;;;;;;;;;34041:111:::0;:::o;20978:87::-;21024:7;21051:6;;;;;;;;;;;21044:13;;20978:87;:::o;34988:95::-;35035:13;35068:7;35061:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34988:95;:::o;32205:32::-;;;;;;;;;;;;;:::o;39079:446::-;39199:4;39221:24;39248:11;:25;39260:12;:10;:12::i;:::-;39248:25;;;;;;;;;;;;;;;:34;39274:7;39248:34;;;;;;;;;;;;;;;;39221:61;;39335:15;39315:16;:35;;39293:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;39426:67;39435:12;:10;:12::i;:::-;39449:7;39477:15;39458:16;:34;;;;:::i;:::-;39426:8;:67::i;:::-;39513:4;39506:11;;;39079:446;;;;:::o;36746:158::-;36815:4;36832:42;36842:12;:10;:12::i;:::-;36856:9;36867:6;36832:9;:42::i;:::-;36892:4;36885:11;;36746:158;;;;:::o;33809:84::-;21209:12;:10;:12::i;:::-;21198:23;;:7;:5;:7::i;:::-;:23;;;21190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33882:3:::1;33871:8;:14;;;;33809:84:::0;:::o;44945:451::-;21209:12;:10;:12::i;:::-;21198:23;;:7;:5;:7::i;:::-;:23;;;21190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45009:35:::1;45066:7;45009:65;;45172:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45154:70;;;45233:4;45240:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45154:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45138:13;;:126;;;;;;;;;;;;;;;;;;45295:16;45277:15;;:34;;;;;;;;;;;;;;;;;;45378:10;;45322:11;:26;45342:4;45322:26;;;;;;;;;;;;;;;:53;45357:16;45322:53;;;;;;;;;;;;;;;:66;;;;21269:1;44945:451:::0;:::o;34160:270::-;34258:6;;;;;;;;;;;34244:20;;:10;:20;;;34236:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;34287:18;34308:19;34324:2;34308:11;:15;;:19;;;;:::i;:::-;34287:40;;34338:24;34344:5;34351:10;34338:5;:24::i;:::-;34404:5;34380:42;;34397:4;34380:42;;;34411:10;34380:42;;;;;;:::i;:::-;;;;;;;;34160:270;;;:::o;32274:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;36214:183::-;36330:7;36362:11;:18;36374:5;36362:18;;;;;;;;;;;;;;;:27;36381:7;36362:27;;;;;;;;;;;;;;;;36355:34;;36214:183;;;;:::o;33572:111::-;21209:12;:10;:12::i;:::-;21198:23;;:7;:5;:7::i;:::-;:23;;;21190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33669:6:::1;33649:17;;:26;;;;;;;;;;;;;;;;;;33572:111:::0;:::o;21932:281::-;21209:12;:10;:12::i;:::-;21198:23;;:7;:5;:7::i;:::-;:23;;;21190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22055:1:::1;22035:22;;:8;:22;;;;22013:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;22168:8;22139:38;;22160:6;::::0;::::1;;;;;;;;22139:38;;;;;;;;;;;;22197:8;22188:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;21932:281:::0;:::o;8852:98::-;8905:7;8932:10;8925:17;;8852:98;:::o;40038:332::-;40191:1;40174:19;;:5;:19;;;;40166:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40272:1;40253:21;;:7;:21;;;;40245:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40356:6;40326:11;:18;40338:5;40326:18;;;;;;;;;;;;;;;:27;40345:7;40326:27;;;;;;;;;;;;;;;:36;;;;40038:332;;;:::o;2660:132::-;2718:7;2745:39;2749:1;2752;2745:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2738:46;;2660:132;;;;:::o;789:136::-;847:7;874:43;878:1;881;874:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;867:50;;789:136;;;;:::o;43817:589::-;43943:21;43981:1;43967:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43943:40;;44012:4;43994;43999:1;43994:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;44038:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44028:4;44033:1;44028:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;44073:62;44090:4;44105:15;;;;;;;;;;;44123:11;44073:8;:62::i;:::-;44174:15;;;;;;;;;;;:66;;;44255:11;44281:1;44325:4;44352;44372:15;44174:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43817:589;;:::o;44414:523::-;44562:62;44579:4;44594:15;;;;;;;;;;;44612:11;44562:8;:62::i;:::-;44667:15;;;;;;;;;;;:31;;;44706:9;44739:4;44759:11;44785:1;44828;44871:17;;;;;;;;;;;44903:15;44667:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44414:523;;:::o;40862:1938::-;40976:21;41000:9;:15;41010:4;41000:15;;;;;;;;;;;;;;;;40976:39;;41065:6;41048:13;:23;;41026:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;41165:1;41156:6;:10;41148:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41507:28;41538:24;41556:4;41538:9;:24::i;:::-;41507:55;;41575:24;41626:8;;41602:20;:32;;41575:59;;41689:4;41665:28;;:20;;;;;;;;;;;:28;;;:64;;;;;41710:19;41665:64;:102;;;;;41754:13;;;;;;;;;;;41746:21;;:4;:21;;;;41665:102;41647:309;;;41846:5;41823:20;;:28;;;;;;;;;;;;;;;;;;41866:36;41881:20;41866:14;:36::i;:::-;41940:4;41917:20;;:27;;;;;;;;;;;;;;;;;;41647:309;42002:6;41986:13;:22;;;;:::i;:::-;41968:9;:15;41978:4;41968:15;;;;;;;;;;;;;;;:40;;;;42044:4;42025:23;;:9;:15;42035:4;42025:15;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;42021:772;;;42082:6;42065:9;:13;42075:2;42065:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;42123:2;42108:26;;42117:4;42108:26;;;42127:6;42108:26;;;;;;:::i;:::-;;;;;;;;42021:772;;;42167:15;42185:24;42202:6;42185:16;:24::i;:::-;42167:42;;42224:13;42240:29;42262:6;42240:21;:29::i;:::-;42224:45;;42301:30;42325:5;42301:19;42312:7;42301:6;:10;;:19;;;;:::i;:::-;:23;;:30;;;;:::i;:::-;42284:9;:13;42294:2;42284:13;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;42366:2;42351:26;;42360:4;42351:26;;;42370:6;42351:26;;;;;;:::i;:::-;;;;;;;;42422:5;42394:9;:24;42412:4;42394:24;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;42476:4;42447:42;;42456:10;42447:42;;;42483:5;42447:42;;;;;;:::i;:::-;;;;;;;;42604:7;42506:9;:94;42542:42;42506:94;;;;;;;;;;;;;;;;:105;;;;;;;:::i;:::-;;;;;;;;42697:42;42633:148;;42660:10;42633:148;;;42759:7;42633:148;;;;;;:::i;:::-;;;;;;;;42021:772;;;40862:1938;;;;;;:::o;39807:223::-;39910:1;39891:21;;:7;:21;;;;39883:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39977:6;39961:12;;:22;;;;;;;:::i;:::-;;;;;;;;40016:6;39994:9;:18;40004:7;39994:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;39807:223;;:::o;3288:312::-;3408:7;3440:1;3436;:5;3443:12;3428:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3467:9;3483:1;3479;:5;;;;:::i;:::-;3467:17;;3591:1;3584:8;;;3288:312;;;;;:::o;1228:226::-;1348:7;1381:1;1376;:6;;1384:12;1368:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1408:9;1424:1;1420;:5;;;;:::i;:::-;1408:17;;1445:1;1438:8;;;1228:226;;;;;:::o;33901:132::-;33966:7;33993:32;34019:5;33993:21;34005:8;;33993:7;:11;;:21;;;;:::i;:::-;:25;;:32;;;;:::i;:::-;33986:39;;33901:132;;;:::o;34541:167::-;34638:7;34670:30;34694:5;34670:19;34682:6;;34670:7;:11;;:19;;;;:::i;:::-;:23;;:30;;;;:::i;:::-;34663:37;;34541:167;;;:::o;1713:471::-;1771:7;2021:1;2016;:6;2012:47;;;2046:1;2039:8;;;;2012:47;2071:9;2087:1;2083;:5;;;;:::i;:::-;2071:17;;2116:1;2111;2107;:5;;;;:::i;:::-;:10;2099:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2175:1;2168:8;;;1713:471;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;;;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:401::-;;;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2401:1;2398;2391:12;2353:2;2444:1;2469:53;2514:7;2505:6;2494:9;2490:22;2469:53;:::i;:::-;2459:63;;2415:117;2571:2;2597:50;2639:7;2630:6;2619:9;2615:22;2597:50;:::i;:::-;2587:60;;2542:115;2343:321;;;;;:::o;2670:407::-;;;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2811:1;2808;2801:12;2763:2;2854:1;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2825:117;2981:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;:::i;:::-;2997:63;;2952:118;2753:324;;;;;:::o;3083:256::-;;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3204:1;3201;3194:12;3156:2;3247:1;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3218:114;3146:193;;;;:::o;3345:262::-;;3453:2;3441:9;3432:7;3428:23;3424:32;3421:2;;;3469:1;3466;3459:12;3421:2;3512:1;3537:53;3582:7;3573:6;3562:9;3558:22;3537:53;:::i;:::-;3527:63;;3483:117;3411:196;;;;:::o;3613:407::-;;;3738:2;3726:9;3717:7;3713:23;3709:32;3706:2;;;3754:1;3751;3744:12;3706:2;3797:1;3822:53;3867:7;3858:6;3847:9;3843:22;3822:53;:::i;:::-;3812:63;;3768:117;3924:2;3950:53;3995:7;3986:6;3975:9;3971:22;3950:53;:::i;:::-;3940:63;;3895:118;3696:324;;;;;:::o;4026:407::-;;;4151:2;4139:9;4130:7;4126:23;4122:32;4119:2;;;4167:1;4164;4157:12;4119:2;4210:1;4235:53;4280:7;4271:6;4260:9;4256:22;4235:53;:::i;:::-;4225:63;;4181:117;4337:2;4363:53;4408:7;4399:6;4388:9;4384:22;4363:53;:::i;:::-;4353:63;;4308:118;4109:324;;;;;:::o;4439:596::-;;;;4592:2;4580:9;4571:7;4567:23;4563:32;4560:2;;;4608:1;4605;4598:12;4560:2;4651:1;4676:64;4732:7;4723:6;4712:9;4708:22;4676:64;:::i;:::-;4666:74;;4622:128;4789:2;4815:64;4871:7;4862:6;4851:9;4847:22;4815:64;:::i;:::-;4805:74;;4760:129;4928:2;4954:64;5010:7;5001:6;4990:9;4986:22;4954:64;:::i;:::-;4944:74;;4899:129;4550:485;;;;;:::o;5041:179::-;;5131:46;5173:3;5165:6;5131:46;:::i;:::-;5209:4;5204:3;5200:14;5186:28;;5121:99;;;;:::o;5226:108::-;5303:24;5321:5;5303:24;:::i;:::-;5298:3;5291:37;5281:53;;:::o;5340:118::-;5427:24;5445:5;5427:24;:::i;:::-;5422:3;5415:37;5405:53;;:::o;5494:732::-;;5642:54;5690:5;5642:54;:::i;:::-;5712:86;5791:6;5786:3;5712:86;:::i;:::-;5705:93;;5822:56;5872:5;5822:56;:::i;:::-;5901:7;5932:1;5917:284;5942:6;5939:1;5936:13;5917:284;;;6018:6;6012:13;6045:63;6104:3;6089:13;6045:63;:::i;:::-;6038:70;;6131:60;6184:6;6131:60;:::i;:::-;6121:70;;5977:224;5964:1;5961;5957:9;5952:14;;5917:284;;;5921:14;6217:3;6210:10;;5618:608;;;;;;;:::o;6232:109::-;6313:21;6328:5;6313:21;:::i;:::-;6308:3;6301:34;6291:50;;:::o;6347:185::-;6461:64;6519:5;6461:64;:::i;:::-;6456:3;6449:77;6439:93;;:::o;6538:147::-;6633:45;6672:5;6633:45;:::i;:::-;6628:3;6621:58;6611:74;;:::o;6691:364::-;;6807:39;6840:5;6807:39;:::i;:::-;6862:71;6926:6;6921:3;6862:71;:::i;:::-;6855:78;;6942:52;6987:6;6982:3;6975:4;6968:5;6964:16;6942:52;:::i;:::-;7019:29;7041:6;7019:29;:::i;:::-;7014:3;7010:39;7003:46;;6783:272;;;;;:::o;7061:370::-;;7224:67;7288:2;7283:3;7224:67;:::i;:::-;7217:74;;7321:34;7317:1;7312:3;7308:11;7301:55;7387:8;7382:2;7377:3;7373:12;7366:30;7422:2;7417:3;7413:12;7406:19;;7207:224;;;:::o;7437:366::-;;7600:67;7664:2;7659:3;7600:67;:::i;:::-;7593:74;;7697:34;7693:1;7688:3;7684:11;7677:55;7763:4;7758:2;7753:3;7749:12;7742:26;7794:2;7789:3;7785:12;7778:19;;7583:220;;;:::o;7809:370::-;;7972:67;8036:2;8031:3;7972:67;:::i;:::-;7965:74;;8069:34;8065:1;8060:3;8056:11;8049:55;8135:8;8130:2;8125:3;8121:12;8114:30;8170:2;8165:3;8161:12;8154:19;;7955:224;;;:::o;8185:365::-;;8348:67;8412:2;8407:3;8348:67;:::i;:::-;8341:74;;8445:34;8441:1;8436:3;8432:11;8425:55;8511:3;8506:2;8501:3;8497:12;8490:25;8541:2;8536:3;8532:12;8525:19;;8331:219;;;:::o;8556:372::-;;8719:67;8783:2;8778:3;8719:67;:::i;:::-;8712:74;;8816:34;8812:1;8807:3;8803:11;8796:55;8882:10;8877:2;8872:3;8868:12;8861:32;8919:2;8914:3;8910:12;8903:19;;8702:226;;;:::o;8934:330::-;;9097:67;9161:2;9156:3;9097:67;:::i;:::-;9090:74;;9194:34;9190:1;9185:3;9181:11;9174:55;9255:2;9250:3;9246:12;9239:19;;9080:184;;;:::o;9270:373::-;;9433:67;9497:2;9492:3;9433:67;:::i;:::-;9426:74;;9530:34;9526:1;9521:3;9517:11;9510:55;9596:11;9591:2;9586:3;9582:12;9575:33;9634:2;9629:3;9625:12;9618:19;;9416:227;;;:::o;9649:311::-;;9812:67;9876:2;9871:3;9812:67;:::i;:::-;9805:74;;9909:15;9905:1;9900:3;9896:11;9889:36;9951:2;9946:3;9942:12;9935:19;;9795:165;;;:::o;9966:368::-;;10129:67;10193:2;10188:3;10129:67;:::i;:::-;10122:74;;10226:34;10222:1;10217:3;10213:11;10206:55;10292:6;10287:2;10282:3;10278:12;10271:28;10325:2;10320:3;10316:12;10309:19;;10112:222;;;:::o;10340:302::-;;10503:66;10567:1;10562:3;10503:66;:::i;:::-;10496:73;;10599:7;10595:1;10590:3;10586:11;10579:28;10633:2;10628:3;10624:12;10617:19;;10486:156;;;:::o;10648:369::-;;10811:67;10875:2;10870:3;10811:67;:::i;:::-;10804:74;;10908:34;10904:1;10899:3;10895:11;10888:55;10974:7;10969:2;10964:3;10960:12;10953:29;11008:2;11003:3;10999:12;10992:19;;10794:223;;;:::o;11023:329::-;;11186:67;11250:2;11245:3;11186:67;:::i;:::-;11179:74;;11283:33;11279:1;11274:3;11270:11;11263:54;11343:2;11338:3;11334:12;11327:19;;11169:183;;;:::o;11358:118::-;11445:24;11463:5;11445:24;:::i;:::-;11440:3;11433:37;11423:53;;:::o;11482:112::-;11565:22;11581:5;11565:22;:::i;:::-;11560:3;11553:35;11543:51;;:::o;11600:222::-;;11731:2;11720:9;11716:18;11708:26;;11744:71;11812:1;11801:9;11797:17;11788:6;11744:71;:::i;:::-;11698:124;;;;:::o;11828:332::-;;11987:2;11976:9;11972:18;11964:26;;12000:71;12068:1;12057:9;12053:17;12044:6;12000:71;:::i;:::-;12081:72;12149:2;12138:9;12134:18;12125:6;12081:72;:::i;:::-;11954:206;;;;;:::o;12166:807::-;;12453:3;12442:9;12438:19;12430:27;;12467:71;12535:1;12524:9;12520:17;12511:6;12467:71;:::i;:::-;12548:72;12616:2;12605:9;12601:18;12592:6;12548:72;:::i;:::-;12630:80;12706:2;12695:9;12691:18;12682:6;12630:80;:::i;:::-;12720;12796:2;12785:9;12781:18;12772:6;12720:80;:::i;:::-;12810:73;12878:3;12867:9;12863:19;12854:6;12810:73;:::i;:::-;12893;12961:3;12950:9;12946:19;12937:6;12893:73;:::i;:::-;12420:553;;;;;;;;;:::o;12979:210::-;;13104:2;13093:9;13089:18;13081:26;;13117:65;13179:1;13168:9;13164:17;13155:6;13117:65;:::i;:::-;13071:118;;;;:::o;13195:276::-;;13353:2;13342:9;13338:18;13330:26;;13366:98;13461:1;13450:9;13446:17;13437:6;13366:98;:::i;:::-;13320:151;;;;:::o;13477:313::-;;13628:2;13617:9;13613:18;13605:26;;13677:9;13671:4;13667:20;13663:1;13652:9;13648:17;13641:47;13705:78;13778:4;13769:6;13705:78;:::i;:::-;13697:86;;13595:195;;;;:::o;13796:419::-;;14000:2;13989:9;13985:18;13977:26;;14049:9;14043:4;14039:20;14035:1;14024:9;14020:17;14013:47;14077:131;14203:4;14077:131;:::i;:::-;14069:139;;13967:248;;;:::o;14221:419::-;;14425:2;14414:9;14410:18;14402:26;;14474:9;14468:4;14464:20;14460:1;14449:9;14445:17;14438:47;14502:131;14628:4;14502:131;:::i;:::-;14494:139;;14392:248;;;:::o;14646:419::-;;14850:2;14839:9;14835:18;14827:26;;14899:9;14893:4;14889:20;14885:1;14874:9;14870:17;14863:47;14927:131;15053:4;14927:131;:::i;:::-;14919:139;;14817:248;;;:::o;15071:419::-;;15275:2;15264:9;15260:18;15252:26;;15324:9;15318:4;15314:20;15310:1;15299:9;15295:17;15288:47;15352:131;15478:4;15352:131;:::i;:::-;15344:139;;15242:248;;;:::o;15496:419::-;;15700:2;15689:9;15685:18;15677:26;;15749:9;15743:4;15739:20;15735:1;15724:9;15720:17;15713:47;15777:131;15903:4;15777:131;:::i;:::-;15769:139;;15667:248;;;:::o;15921:419::-;;16125:2;16114:9;16110:18;16102:26;;16174:9;16168:4;16164:20;16160:1;16149:9;16145:17;16138:47;16202:131;16328:4;16202:131;:::i;:::-;16194:139;;16092:248;;;:::o;16346:419::-;;16550:2;16539:9;16535:18;16527:26;;16599:9;16593:4;16589:20;16585:1;16574:9;16570:17;16563:47;16627:131;16753:4;16627:131;:::i;:::-;16619:139;;16517:248;;;:::o;16771:419::-;;16975:2;16964:9;16960:18;16952:26;;17024:9;17018:4;17014:20;17010:1;16999:9;16995:17;16988:47;17052:131;17178:4;17052:131;:::i;:::-;17044:139;;16942:248;;;:::o;17196:419::-;;17400:2;17389:9;17385:18;17377:26;;17449:9;17443:4;17439:20;17435:1;17424:9;17420:17;17413:47;17477:131;17603:4;17477:131;:::i;:::-;17469:139;;17367:248;;;:::o;17621:419::-;;17825:2;17814:9;17810:18;17802:26;;17874:9;17868:4;17864:20;17860:1;17849:9;17845:17;17838:47;17902:131;18028:4;17902:131;:::i;:::-;17894:139;;17792:248;;;:::o;18046:419::-;;18250:2;18239:9;18235:18;18227:26;;18299:9;18293:4;18289:20;18285:1;18274:9;18270:17;18263:47;18327:131;18453:4;18327:131;:::i;:::-;18319:139;;18217:248;;;:::o;18471:419::-;;18675:2;18664:9;18660:18;18652:26;;18724:9;18718:4;18714:20;18710:1;18699:9;18695:17;18688:47;18752:131;18878:4;18752:131;:::i;:::-;18744:139;;18642:248;;;:::o;18896:222::-;;19027:2;19016:9;19012:18;19004:26;;19040:71;19108:1;19097:9;19093:17;19084:6;19040:71;:::i;:::-;18994:124;;;;:::o;19124:831::-;;19425:3;19414:9;19410:19;19402:27;;19439:71;19507:1;19496:9;19492:17;19483:6;19439:71;:::i;:::-;19520:80;19596:2;19585:9;19581:18;19572:6;19520:80;:::i;:::-;19647:9;19641:4;19637:20;19632:2;19621:9;19617:18;19610:48;19675:108;19778:4;19769:6;19675:108;:::i;:::-;19667:116;;19793:72;19861:2;19850:9;19846:18;19837:6;19793:72;:::i;:::-;19875:73;19943:3;19932:9;19928:19;19919:6;19875:73;:::i;:::-;19392:563;;;;;;;;:::o;19961:442::-;;20148:2;20137:9;20133:18;20125:26;;20161:71;20229:1;20218:9;20214:17;20205:6;20161:71;:::i;:::-;20242:72;20310:2;20299:9;20295:18;20286:6;20242:72;:::i;:::-;20324;20392:2;20381:9;20377:18;20368:6;20324:72;:::i;:::-;20115:288;;;;;;:::o;20409:214::-;;20536:2;20525:9;20521:18;20513:26;;20549:67;20613:1;20602:9;20598:17;20589:6;20549:67;:::i;:::-;20503:120;;;;:::o;20629:132::-;;20719:3;20711:11;;20749:4;20744:3;20740:14;20732:22;;20701:60;;;:::o;20767:114::-;;20868:5;20862:12;20852:22;;20841:40;;;:::o;20887:99::-;;20973:5;20967:12;20957:22;;20946:40;;;:::o;20992:113::-;;21094:4;21089:3;21085:14;21077:22;;21067:38;;;:::o;21111:184::-;;21244:6;21239:3;21232:19;21284:4;21279:3;21275:14;21260:29;;21222:73;;;;:::o;21301:169::-;;21419:6;21414:3;21407:19;21459:4;21454:3;21450:14;21435:29;;21397:73;;;;:::o;21476:305::-;;21535:20;21553:1;21535:20;:::i;:::-;21530:25;;21569:20;21587:1;21569:20;:::i;:::-;21564:25;;21723:1;21655:66;21651:74;21648:1;21645:81;21642:2;;;21729:18;;:::i;:::-;21642:2;21773:1;21770;21766:9;21759:16;;21520:261;;;;:::o;21787:185::-;;21844:20;21862:1;21844:20;:::i;:::-;21839:25;;21878:20;21896:1;21878:20;:::i;:::-;21873:25;;21917:1;21907:2;;21922:18;;:::i;:::-;21907:2;21964:1;21961;21957:9;21952:14;;21829:143;;;;:::o;21978:348::-;;22041:20;22059:1;22041:20;:::i;:::-;22036:25;;22075:20;22093:1;22075:20;:::i;:::-;22070:25;;22263:1;22195:66;22191:74;22188:1;22185:81;22180:1;22173:9;22166:17;22162:105;22159:2;;;22270:18;;:::i;:::-;22159:2;22318:1;22315;22311:9;22300:20;;22026:300;;;;:::o;22332:191::-;;22392:20;22410:1;22392:20;:::i;:::-;22387:25;;22426:20;22444:1;22426:20;:::i;:::-;22421:25;;22465:1;22462;22459:8;22456:2;;;22470:18;;:::i;:::-;22456:2;22515:1;22512;22508:9;22500:17;;22377:146;;;;:::o;22529:96::-;;22595:24;22613:5;22595:24;:::i;:::-;22584:35;;22574:51;;;:::o;22631:90::-;;22708:5;22701:13;22694:21;22683:32;;22673:48;;;:::o;22727:126::-;;22804:42;22797:5;22793:54;22782:65;;22772:81;;;:::o;22859:77::-;;22925:5;22914:16;;22904:32;;;:::o;22942:86::-;;23017:4;23010:5;23006:16;22995:27;;22985:43;;;:::o;23034:180::-;;23144:64;23202:5;23144:64;:::i;:::-;23131:77;;23121:93;;;:::o;23220:140::-;;23330:24;23348:5;23330:24;:::i;:::-;23317:37;;23307:53;;;:::o;23366:121::-;;23457:24;23475:5;23457:24;:::i;:::-;23444:37;;23434:53;;;:::o;23493:307::-;23561:1;23571:113;23585:6;23582:1;23579:13;23571:113;;;23670:1;23665:3;23661:11;23655:18;23651:1;23646:3;23642:11;23635:39;23607:2;23604:1;23600:10;23595:15;;23571:113;;;23702:6;23699:1;23696:13;23693:2;;;23782:1;23773:6;23768:3;23764:16;23757:27;23693:2;23542:258;;;;:::o;23806:320::-;;23887:1;23881:4;23877:12;23867:22;;23934:1;23928:4;23924:12;23955:18;23945:2;;24011:4;24003:6;23999:17;23989:27;;23945:2;24073;24065:6;24062:14;24042:18;24039:38;24036:2;;;24092:18;;:::i;:::-;24036:2;23857:269;;;;:::o;24132:180::-;24180:77;24177:1;24170:88;24277:4;24274:1;24267:15;24301:4;24298:1;24291:15;24318:180;24366:77;24363:1;24356:88;24463:4;24460:1;24453:15;24487:4;24484:1;24477:15;24504:180;24552:77;24549:1;24542:88;24649:4;24646:1;24639:15;24673:4;24670:1;24663:15;24690:102;;24782:2;24778:7;24773:2;24766:5;24762:14;24758:28;24748:38;;24738:54;;;:::o;24798:122::-;24871:24;24889:5;24871:24;:::i;:::-;24864:5;24861:35;24851:2;;24910:1;24907;24900:12;24851:2;24841:79;:::o;24926:116::-;24996:21;25011:5;24996:21;:::i;:::-;24989:5;24986:32;24976:2;;25032:1;25029;25022:12;24976:2;24966:76;:::o;25048:122::-;25121:24;25139:5;25121:24;:::i;:::-;25114:5;25111:35;25101:2;;25160:1;25157;25150:12;25101:2;25091:79;:::o

Swarm Source

ipfs://39dd60cf85fbcec72e94d70c03a049863ba94651d71a3879602b13801d033300

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Grim Finance is a Smart Yield Optimizer Platform that allows users to stake LP-Tokens issued from AMMs (Automated Market Makers) in Grim Vaults, which automatically harvest and re-stake their rewards as LP-Tokens for a compounding effect. Helping users reap more rewards, hassle-free.

Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.