Contract 0xcAD9297f00487a88Afa120Bf9F4823B52AE388b0

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xdee1a0d52e2fc88679949f3f22af842f8635a5ceecb441deb1545606a1d64ebbWithdraw117013182022-05-10 13:17:5054 days 14 hrs ago0x432dcbda06e8b296ca29705572d7cb6315ed8bed IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000400488589 ETH
0xb7369208896796f4448c629d8dfb158b73bbd4e4ae61b05e26489b085414e3f4Withdraw109317092022-04-30 20:05:1564 days 7 hrs ago0xd131f1bcdd547e067af447dd3c36c99d6be9fdeb IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000283639489 ETH
0x36e50200b6d5a0927da2ed521cecfb05ad328d090ffb4711b2550a830f23519bWithdraw103487942022-04-22 19:44:2672 days 7 hrs ago0x32844a824f458f24878515923f1fa120b6b711f2 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000251801083 ETH
0x4691a82dcd65ddf99a3cf7616112d7818fc3c972a7b1463b450f01c03ca51be8Admin Mint97128682022-04-12 22:53:4582 days 4 hrs ago0x60ad50e7d5dbb92da6e01f933a4f913e4d9a4535 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000481493349 ETH
0x6d909183b9af0dbfb1982bee6e8d24438afe994ed8689ceab2991b8691c66f14Withdraw90482772022-04-01 17:10:1493 days 10 hrs ago0xdcbd1142c6037bc857bbacd07eff6ea424bb7e26 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000294165818 ETH
0xb11bea87e42fa23af01b5b4a11c6714a76aec5aff07713c33051625880c46f85Admin Mint90426752022-04-01 15:49:0393 days 11 hrs ago0x60ad50e7d5dbb92da6e01f933a4f913e4d9a4535 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.008553817 ETH
0x19d7e06609fd0d1edc167ccfbabf69946c383204e53bdefb7b4751df9ae9a6f6Admin Mint90425732022-04-01 15:47:1393 days 11 hrs ago0x60ad50e7d5dbb92da6e01f933a4f913e4d9a4535 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.008553103015 ETH
0xfa8c32e44feafe835a6dd13f8e13134e138065676f935bd7914a32a69f450717Admin Mint90425312022-04-01 15:47:1393 days 11 hrs ago0x60ad50e7d5dbb92da6e01f933a4f913e4d9a4535 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.008553636167 ETH
0xc0e6a08f8b1ad8b7a3a87886b380cbf610c5677aa941b7bc6fb2f1104b459160Transfer Ownersh...90399642022-04-01 15:06:3693 days 12 hrs ago0x2fecfb2ebe995c9dea38a6235c807a58ede7fe7f IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000244733176 ETH
0xdb1e95e5ef46d93ac52a38936b6a4e24910cb32e43e2ceb4f6405b76549e4367Admin Mint90374572022-04-01 14:24:1593 days 13 hrs ago0x2fecfb2ebe995c9dea38a6235c807a58ede7fe7f IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000498817427 ETH
0xe39097385d774182338abbdc38890a93f47e1a8c935216eca894178dbec0e978Withdraw89526522022-03-31 5:04:4094 days 22 hrs ago0x3a7d6a7650d69fef57c307e03bb8b4439afd84d4 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000288771371 ETH
0xc196c43ca5bbccad4ed682277b59941261b0ba659cc0df9e2e8a9a20eac08fc4Withdraw88010192022-03-29 2:19:3697 days 1 hr ago0x1c00dd00c5a0818761010500811900061801368b IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000251009258 ETH
0xa84632b248d5995362b3e0daad197e371103d5e707e7a0090085abee1448afe6Withdraw87735102022-03-28 16:53:3097 days 10 hrs ago0x9a285d90b567cea64dd82737340e224fd4202959 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000191676357 ETH
0x7145bd3e1b612a3fb727c54d597eaa7f23f022bc60c85e4aff543ade78d89b5eWithdraw87579582022-03-28 11:48:2097 days 15 hrs ago0x18e14280695afdd3655b7999d63cf51f56052e35 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000174905568 ETH
0x30aad6b635f19b5b0cf55289bcd0a928430a0a5c9ad52d4cfff2be8d08294d7eWithdraw83197352022-03-22 14:29:37103 days 13 hrs ago0xdb0576118b70bca559d719ecfc4cd39d91c34797 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000168890479 ETH
0x304bdf65b2f43a7c533b2118d26886ab9178d82119a2be98d6e30d7fbf537246Withdraw83129342022-03-22 12:42:09103 days 14 hrs ago0xdfdf2d882d9ebce6c7eac3da9ab66cbfda263781 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.00016610065 ETH
0x26720d992069d279b838694bac00691870f1fd35ba62e3a5b0b20e7bad8d6339Withdraw82948062022-03-22 4:51:51103 days 22 hrs ago0x08f47ffbb40aae4662eb5f4f284f2d056deb0dc2 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000174221249 ETH
0xd95143a34f41730fffadbf033629470fba3dbdcb423e71665b167063a1f2e9b5Withdraw82677942022-03-21 17:10:24104 days 10 hrs ago0x5a16f6815c1cedd2a31a29b92232e4cc269362c9 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000172668735 ETH
0xb282da82c72bb4758fa49862fd413b8d31efb73719880c48df17a224175f2d96Withdraw82064622022-03-20 14:36:13105 days 13 hrs ago0x2e17e358a857f4ea3f62102fefed6aaf53e0453e IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000186952291 ETH
0x7ad420192c961cd2818071737a11f6429a19e1a1159ed21ec78ef6a74ec87576Withdraw81584512022-03-19 15:05:52106 days 12 hrs ago0x06c64b65ce7e07af2dd7ca4b87ed6ae2a4def45e IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000203091212 ETH
0x03e7911d2cb6cdc0bf6cfaec2934b4510379eeccd06245df6ef7c984dac0582cWithdraw81268472022-03-18 22:19:49107 days 5 hrs ago0x2658d1ce0939f84ef71878a2f1c4f2ad24391cf3 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000325458254 ETH
0x6b0898f46165aba95190d6c9c3a29177d8235d5ce8d148624cb51214973dd7aaWithdraw81125402022-03-18 16:03:51107 days 11 hrs ago0x32a59b87352e980dd6ab1baf462696d28e63525d IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.00029822152 ETH
0x9174f50feea6fb92733f71e1e2dca9abb6bc3a28c265f068acaafb3d819f5805Withdraw81033022022-03-18 12:19:05107 days 15 hrs ago0xfd7cb714a4310b5cd066501c8a566f67e82dc050 IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000273070128 ETH
0x12ae3b2e4d3d1cf137e0a29e7a5133b3d1e6eed0ff4d35e98be105c1fa2ff29fWithdraw80878652022-03-18 4:05:16107 days 23 hrs ago0xf208052fad8b1da9ad5f58a654b18899e842ec5b IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000306454613 ETH
0x73fe98ee2c6447864503a77805ec9e830f65926294f031faca283e2361c20445Withdraw80733882022-03-17 21:06:59108 days 6 hrs ago0x4688b6f3c384c3cffe95c92f599213de4a9fa9ca IN  0xcad9297f00487a88afa120bf9f4823b52ae388b00 ETH0.000293395211 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xdee1a0d52e2fc88679949f3f22af842f8635a5ceecb441deb1545606a1d64ebb117013182022-05-10 13:17:5054 days 14 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0xeec2be5c91ae7f8a338e1e5f3b5de49d07afdc810 ETH
0xdee1a0d52e2fc88679949f3f22af842f8635a5ceecb441deb1545606a1d64ebb117013182022-05-10 13:17:5054 days 14 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0x3f770ac673856f105b586bb393d122721265ad460 ETH
0xdee1a0d52e2fc88679949f3f22af842f8635a5ceecb441deb1545606a1d64ebb117013182022-05-10 13:17:5054 days 14 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b00x7418f5a2621e13c05d1efbd71ec922070794b90a0 ETH
0xdee1a0d52e2fc88679949f3f22af842f8635a5ceecb441deb1545606a1d64ebb117013182022-05-10 13:17:5054 days 14 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 Dopex: rDPX Token0 ETH
0xdee1a0d52e2fc88679949f3f22af842f8635a5ceecb441deb1545606a1d64ebb117013182022-05-10 13:17:5054 days 14 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0Dopex: DPX Token0 ETH
0xb7369208896796f4448c629d8dfb158b73bbd4e4ae61b05e26489b085414e3f4109317092022-04-30 20:05:1564 days 7 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0xeec2be5c91ae7f8a338e1e5f3b5de49d07afdc810 ETH
0xb7369208896796f4448c629d8dfb158b73bbd4e4ae61b05e26489b085414e3f4109317092022-04-30 20:05:1564 days 7 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0x3f770ac673856f105b586bb393d122721265ad460 ETH
0xb7369208896796f4448c629d8dfb158b73bbd4e4ae61b05e26489b085414e3f4109317092022-04-30 20:05:1564 days 7 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b00x7418f5a2621e13c05d1efbd71ec922070794b90a0 ETH
0xb7369208896796f4448c629d8dfb158b73bbd4e4ae61b05e26489b085414e3f4109317092022-04-30 20:05:1564 days 7 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 Dopex: rDPX Token0 ETH
0xb7369208896796f4448c629d8dfb158b73bbd4e4ae61b05e26489b085414e3f4109317092022-04-30 20:05:1564 days 7 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0Dopex: DPX Token0 ETH
0x36e50200b6d5a0927da2ed521cecfb05ad328d090ffb4711b2550a830f23519b103487942022-04-22 19:44:2672 days 7 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0xeec2be5c91ae7f8a338e1e5f3b5de49d07afdc810 ETH
0x36e50200b6d5a0927da2ed521cecfb05ad328d090ffb4711b2550a830f23519b103487942022-04-22 19:44:2672 days 7 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0x3f770ac673856f105b586bb393d122721265ad460 ETH
0x36e50200b6d5a0927da2ed521cecfb05ad328d090ffb4711b2550a830f23519b103487942022-04-22 19:44:2672 days 7 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b00x7418f5a2621e13c05d1efbd71ec922070794b90a0 ETH
0x36e50200b6d5a0927da2ed521cecfb05ad328d090ffb4711b2550a830f23519b103487942022-04-22 19:44:2672 days 7 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 Dopex: rDPX Token0 ETH
0x36e50200b6d5a0927da2ed521cecfb05ad328d090ffb4711b2550a830f23519b103487942022-04-22 19:44:2672 days 7 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0Dopex: DPX Token0 ETH
0x4691a82dcd65ddf99a3cf7616112d7818fc3c972a7b1463b450f01c03ca51be897128682022-04-12 22:53:4582 days 4 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0xede855ced3e5a59aaa267abdddb0db21ccfe50720 ETH
0x4691a82dcd65ddf99a3cf7616112d7818fc3c972a7b1463b450f01c03ca51be897128682022-04-12 22:53:4582 days 4 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0xede855ced3e5a59aaa267abdddb0db21ccfe50720 ETH
0x6d909183b9af0dbfb1982bee6e8d24438afe994ed8689ceab2991b8691c66f1490482772022-04-01 17:10:1493 days 10 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0xeec2be5c91ae7f8a338e1e5f3b5de49d07afdc810 ETH
0x6d909183b9af0dbfb1982bee6e8d24438afe994ed8689ceab2991b8691c66f1490482772022-04-01 17:10:1493 days 10 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0x3f770ac673856f105b586bb393d122721265ad460 ETH
0x6d909183b9af0dbfb1982bee6e8d24438afe994ed8689ceab2991b8691c66f1490482772022-04-01 17:10:1493 days 10 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b00x7418f5a2621e13c05d1efbd71ec922070794b90a0 ETH
0x6d909183b9af0dbfb1982bee6e8d24438afe994ed8689ceab2991b8691c66f1490482772022-04-01 17:10:1493 days 10 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 Dopex: rDPX Token0 ETH
0x6d909183b9af0dbfb1982bee6e8d24438afe994ed8689ceab2991b8691c66f1490482772022-04-01 17:10:1493 days 10 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0Dopex: DPX Token0 ETH
0xb11bea87e42fa23af01b5b4a11c6714a76aec5aff07713c33051625880c46f8590426752022-04-01 15:49:0393 days 11 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0xede855ced3e5a59aaa267abdddb0db21ccfe50720 ETH
0xb11bea87e42fa23af01b5b4a11c6714a76aec5aff07713c33051625880c46f8590426752022-04-01 15:49:0393 days 11 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0xede855ced3e5a59aaa267abdddb0db21ccfe50720 ETH
0xb11bea87e42fa23af01b5b4a11c6714a76aec5aff07713c33051625880c46f8590426752022-04-01 15:49:0393 days 11 hrs ago 0xcad9297f00487a88afa120bf9f4823b52ae388b0 0xede855ced3e5a59aaa267abdddb0db21ccfe50720 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
YieldMint

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 10 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 2 of 10 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @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 on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        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");

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

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 10 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

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) {
        return msg.data;
    }
}

File 4 of 10 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 5 of 10 : YieldMint.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;

// Contracts
import "@openzeppelin/contracts/access/Ownable.sol";
import { SafeERC20 } from "./libraries/SafeERC20.sol";

// Interfaces
import { IERC20 } from "./interfaces/IERC20.sol";
import { IERC721 } from "./interfaces/IERC721.sol";
import { IStakingRewards } from "./interfaces/IStakingRewards.sol";
import { IUniswapV2Router01 } from "./interfaces/IUniswapV2Router01.sol";

contract YieldMint is Ownable {
  using SafeERC20 for IERC20;

  address public NFTContract;
  address public dpx;
  address public rdpx;
  address public weth;
  address public LP;
  address public stakingRewards;
  address public uniswapV2Router01;
  uint256 public maxSupply;
  uint256 public maxLpDeposits;
  uint256 public NFTsForSale;
  bool public paused = false;
  bool public depositPeriod = false;
  bool public farmingPeriod = false;
  uint256 public totalDeposits;
  uint256 public dpxRewards;
  uint256 public rdpxRewards;
  uint256 public mintPrice;

  /// @notice user Deposits
  /// @dev mapping (user => deposit)
  mapping(address => uint256) public usersDeposit;

  /// @notice didUserMint
  /// @dev mapping (user => didUserMint)
  mapping(address => bool) public didUserMint;

  /*==== ERRORS & EVENTS ====*/

  event DepositLP(address user, uint256 amountLP);
  event DepositEth(address user, uint256 amountEth);
  event Withdraw(address user, uint256 amount);
  event endDepositPeriod(uint256 blockTimeStamp);
  event endFarmingPeriod(uint256 blockTimeStamp);
  event Mint(address user, uint256 amount);

  constructor(
    address _NFTContract,
    address _dpx,
    address _rdpx,
    address _weth,
    address _lp,
    address _stakingRewards,
    address _uniswapV2Router01,
    uint256 _maxSupply,
    uint256 _maxLpDeposits,
    uint256 _NFTsForSale
  ) {
    require(_NFTContract != address(0), "Address can't be zero address");
    require(_dpx != address(0), "Address can't be zero address");
    require(_rdpx != address(0), "Address can't be zero address");
    require(_weth != address(0), "Address can't be zero address");
    require(_lp != address(0), "Address can't be zero address");
    require(_stakingRewards != address(0), "Address can't be zero address");
    require(_uniswapV2Router01 != address(0), "Address can't be zero address");
    require(_maxSupply != 0, "Max supply can't be zero");
    require(_maxLpDeposits != 0, "Max Lp deposits can't be zero");
    require(_NFTsForSale != 0, "NFTs for sale can't be zero");
    NFTContract = _NFTContract;
    dpx = _dpx;
    rdpx = _rdpx;
    weth = _weth;
    LP = _lp;
    stakingRewards = _stakingRewards;
    uniswapV2Router01 = _uniswapV2Router01;
    maxSupply = _maxSupply;
    maxLpDeposits = _maxLpDeposits;
    NFTsForSale = _NFTsForSale;

    // Max approve to stakingRewards
    IERC20(LP).safeApprove(stakingRewards, type(uint256).max);

    // Max approve to uniswapV2Router01
    IERC20(rdpx).safeApprove(uniswapV2Router01, type(uint256).max);
    IERC20(weth).safeApprove(uniswapV2Router01, type(uint256).max);
  }

  // Recieve function
  receive() external payable {}

  //only owner

  /// @notice admin can mint NFTs
  /// @dev Can only be called by governance
  function adminMint(uint256 amount) external onlyOwner {
    require(!paused, "Contract is paused");
    for (uint256 i = 0; i < amount; i++) {
      // Mint NFT
      IERC721(NFTContract).mint(msg.sender);
    }
  }

  /// @notice admin can set max LP deposit
  /// @dev Can only be called by governance
  function setMaxLpDeposit(uint256 amount) external onlyOwner {
    require(!paused, "Contract is paused");
    maxLpDeposits = amount;
  }

  /// @notice admin can pause/unpause the contract
  /// @param _state boolean to pause or unpause the contract
  /// @dev Can only be called by governance
  function pause(bool _state) external onlyOwner {
    uint256 balance = IStakingRewards(stakingRewards).balanceOf(address(this));
    if (balance > 0) {
      IStakingRewards(stakingRewards).withdraw(balance);
      IStakingRewards(stakingRewards).getReward(2);
    }
    paused = _state;
  }

  /// @notice emergency withdraw all
  /// @dev Can only be called by governance
  function emergencyWithdraw(address[] calldata addressArray)
    external
    onlyOwner
  {
    require(paused, "Contract is not paused");
    for (uint256 i = 0; i < addressArray.length; i++) {
      IERC20(addressArray[i]).safeTransfer(
        msg.sender,
        IERC20(addressArray[i]).balanceOf(address(this))
      );
    }
    uint256 ethBalance = address(this).balance;
    if (ethBalance > 0) {
      payable(msg.sender).transfer(ethBalance);
    }
  }

  function startDeposits() external onlyOwner {
    require(!depositPeriod, "Deposit period is already started");
    require(!paused, "Contract is paused");
    depositPeriod = true;
  }

  /// @notice ends deposit period
  /// @dev Can only be called by governance
  function endDeposits() external onlyOwner {
    require(!paused, "Contract is paused");
    require(!farmingPeriod, "Deposits have been closed");
    require(depositPeriod, "Deposits have been closed");
    depositPeriod = false;
    farmingPeriod = true;
    if (IERC20(LP).balanceOf(address(this)) > 0) {
      IStakingRewards(stakingRewards).stake(
        IERC20(LP).balanceOf(address(this))
      );
    }

    mintPrice = totalDeposits / NFTsForSale;

    emit endDepositPeriod(block.timestamp);
  }

  /// @notice ends farming period
  /// @dev Can only be called by governance
  function endFarming() external onlyOwner returns (uint256, uint256) {
    require(!paused, "Contract is paused");
    require(farmingPeriod, "Farming is not active");

    farmingPeriod = false;
    uint256 balance = IStakingRewards(stakingRewards).balanceOf(address(this));
    IStakingRewards(stakingRewards).withdraw(balance);
    IStakingRewards(stakingRewards).getReward(2);
    dpxRewards = IERC20(dpx).balanceOf(address(this));
    rdpxRewards = IERC20(rdpx).balanceOf(address(this));

    emit endFarmingPeriod(block.timestamp);
    return (dpxRewards, rdpxRewards);
  }

  /// @notice admin claims rewards
  /// @param amountDpx amount of DPX rewards to claim
  /// @param amountRdpx amount of RDPX rewards to claim
  /// @dev Can only be called by governance
  function claimAdminRewards(uint256 amountDpx, uint256 amountRdpx)
    external
    onlyOwner
  {
    require(!paused, "Contract is paused");
    require(!farmingPeriod, "Farming has not ended");
    require(!depositPeriod, "Deposits have not been closed");
    IERC20(dpx).safeTransfer(msg.sender, amountDpx);
    IERC20(rdpx).safeTransfer(msg.sender, amountRdpx);
  }

  // public

  /// @notice user deposits LP
  /// @param amount amount of LP deposited
  /// @param userAddress address of user
  function depositLP(uint256 amount, address userAddress)
    external
    returns (bool)
  {
    require(!paused, "Contract is paused");
    require(amount > 0, "amount 0");
    require(!farmingPeriod, "Deposits have been closed");
    require(depositPeriod, "Deposits have been closed");
    require(
      totalDeposits + amount <= maxLpDeposits,
      "deposit amount exceeds max LP deposits"
    );
    IERC20(LP).safeTransferFrom(msg.sender, address(this), amount);

    IStakingRewards(stakingRewards).stake(amount);

    _deposit(amount, userAddress);

    emit DepositLP(userAddress, amount);

    return true;
  }

  /// @notice user Deposits ETH
  /// @param userAddress address of user
  function depositWeth(address userAddress) external payable returns (uint256) {
    require(!paused, "Contract is paused");
    require(!farmingPeriod, "Deposits have been closed");
    require(depositPeriod, "Deposits have been closed");

    // Zap eth to DPX/WETH LP
    (
      uint256 remainingEth,
      uint256 remainingRdpx,
      uint256 liquidityAdded
    ) = _zap(weth, rdpx, msg.value);
    require(
      totalDeposits + liquidityAdded <= maxLpDeposits,
      "deposit amount exceeds max LP deposits"
    );

    if (remainingRdpx > 0) {
      IERC20(rdpx).safeTransfer(msg.sender, remainingRdpx);
    }
    if (remainingEth > 0) {
      payable(msg.sender).transfer(remainingEth);
    }

    IStakingRewards(stakingRewards).stake(liquidityAdded);

    _deposit(liquidityAdded, userAddress);

    emit DepositEth(userAddress, liquidityAdded);
    return (liquidityAdded);
  }

  function _deposit(uint256 amount, address userAddress) internal {
    usersDeposit[userAddress] += amount;
    totalDeposits += amount;
  }

  /// @notice user withdraws their LP tokens
  function withdraw() external returns (bool) {
    require(!paused, "Contract is paused");
    require(!farmingPeriod, "Farming has not ended");
    require(!depositPeriod, "Deposits have not been closed");
    require(usersDeposit[msg.sender] > 0, "no deposits");

    uint256 userDeposit = usersDeposit[msg.sender];
    usersDeposit[msg.sender] = 0;
    uint256 extraAmount = userDeposit % mintPrice;
    if (extraAmount > 0) {
      uint256 userDpxRewards = (dpxRewards * extraAmount) / totalDeposits;
      uint256 userRdpxRewards = (rdpxRewards * extraAmount) / totalDeposits;
      IERC20(dpx).safeTransfer(msg.sender, userDpxRewards);
      IERC20(rdpx).safeTransfer(msg.sender, userRdpxRewards);
    }
    IERC20(LP).safeTransfer(msg.sender, userDeposit);

    emit Withdraw(msg.sender, userDeposit);
    return true;
  }

  /// @notice user mints NFT's
  function claimMint() external {
    require(!paused, "Contract is paused");
    require(!depositPeriod, "Deposits have not been closed");
    require(!didUserMint[msg.sender], "User has already claimed mint");
    require(
      usersDeposit[msg.sender] >= mintPrice && usersDeposit[msg.sender] > 0,
      "User has not deposited enough LP"
    );

    uint256 userDeposit = usersDeposit[msg.sender];
    uint256 amount = userDeposit / mintPrice;
    require(
      amount + IERC721(NFTContract).totalSupply() < maxSupply,
      "mint limit reached"
    );

    if (amount > 0) {
      for (uint256 i = 0; i < amount; i++) {
        // Mint NFT
        IERC721(NFTContract).mint(msg.sender);
      }
    }
    didUserMint[msg.sender] = true;

    emit Mint(msg.sender, amount);
  }

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

  /**
   * @notice Zaps any asset into its respective liquidity pool
   * @param _from address of token to zap from
   * @param _to address of token to zap to
   * @param _amountToZap amount of token to zap from
   */
  function _zap(
    address _from,
    address _to,
    uint256 _amountToZap
  )
    private
    returns (
      uint256 remainingWeth,
      uint256 remainingRdpx,
      uint256 liquidityAdded
    )
  {
    IUniswapV2Router01 router = IUniswapV2Router01(uniswapV2Router01);

    // Amount of tokens received from swapping ETH to DPX
    uint256 tokensReceivedAfterSwap = router.swapExactETHForTokens{
      value: _amountToZap / 2
    }(0, getPath(_from, _to), address(this), block.timestamp)[1];

    // Variables to store amount of tokens that were added which is later used to calculate the remaining amounts
    uint256 tokenAAmountAdded;
    uint256 tokenBAmountAdded;

    // Add liquidity
    (tokenAAmountAdded, tokenBAmountAdded, liquidityAdded) = router
      .addLiquidityETH{ value: _amountToZap / 2 }(
      _to,
      tokensReceivedAfterSwap,
      0,
      0,
      address(this),
      block.timestamp
    );

    // Remaining WETH tokens after adding liquidity
    remainingWeth = _from == weth
      ? _amountToZap / 2 - tokenBAmountAdded
      : tokensReceivedAfterSwap - tokenAAmountAdded;

    // Remaining DPX tokens after adding liquidity
    remainingRdpx = _from == rdpx
      ? _amountToZap / 2 - tokenBAmountAdded
      : tokensReceivedAfterSwap - tokenAAmountAdded;
  }

  /// @notice returns path which used in router's swap
  /// @param _tokenA token to swap from
  /// @param _tokenB token to from to
  function getPath(address _tokenA, address _tokenB)
    public
    pure
    returns (address[] memory path)
  {
    path = new address[](2);
    path[0] = _tokenA;
    path[1] = _tokenB;
  }
}

File 6 of 10 : IERC20.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 * NOTE: Modified to include symbols and decimals.
 */
interface IERC20 {
  function totalSupply() external view returns (uint256);

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

  function decimals() external view returns (uint8);

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

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

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

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

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

  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 7 of 10 : IERC721.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 * NOTE: Modified to include symbols and decimals.
 */
interface IERC721 {
  function totalSupply() external view returns (uint256);

  function mint(address) external;

  function tokenURI(uint256) external view returns (string memory);

  function burn(uint256) external;
}

File 8 of 10 : IStakingRewards.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

interface IStakingRewards {
  // Views
  function lastTimeRewardApplicable() external view returns (uint256);

  function rewardPerToken() external view returns (uint256, uint256);

  function earned(address account) external view returns (uint256, uint256);

  function getRewardForDuration() external view returns (uint256, uint256);

  function totalSupply() external view returns (uint256);

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

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

  function compound() external;

  // Mutative

  function stake(uint256 amount) external payable;

  function withdraw(uint256 amount) external;

  function getReward(uint256 rewardsTokenID) external;

  function exit() external;
}

File 9 of 10 : IUniswapV2Router01.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;

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

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

File 10 of 10 : SafeERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {IERC20} from '../interfaces/IERC20.sol';
import {SafeMath} from '@openzeppelin/contracts/utils/math/SafeMath.sol';
import {Address} from '@openzeppelin/contracts/utils/Address.sol';

/**
 * @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'
            );
        }
    }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_NFTContract","type":"address"},{"internalType":"address","name":"_dpx","type":"address"},{"internalType":"address","name":"_rdpx","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_lp","type":"address"},{"internalType":"address","name":"_stakingRewards","type":"address"},{"internalType":"address","name":"_uniswapV2Router01","type":"address"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_maxLpDeposits","type":"uint256"},{"internalType":"uint256","name":"_NFTsForSale","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountEth","type":"uint256"}],"name":"DepositEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountLP","type":"uint256"}],"name":"DepositLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockTimeStamp","type":"uint256"}],"name":"endDepositPeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockTimeStamp","type":"uint256"}],"name":"endFarmingPeriod","type":"event"},{"inputs":[],"name":"LP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTsForSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"adminMint","outputs":[],"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":"uint256","name":"amountDpx","type":"uint256"},{"internalType":"uint256","name":"amountRdpx","type":"uint256"}],"name":"claimAdminRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"name":"depositLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"depositWeth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"didUserMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dpx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dpxRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endFarming","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farmingPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"}],"name":"getPath","outputs":[{"internalType":"address[]","name":"path","type":"address[]"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"maxLpDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rdpx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rdpxRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxLpDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingRewards","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router01","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usersDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b5060405162005ecc38038062005ecc833981810160405281019062000088919062000d74565b620000a86200009c6200085060201b60201c565b6200085860201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614156200011b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000112906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614156200018e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000185906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141562000201576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001f8906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141562000274576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200026b906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415620002e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002de906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156200035a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000351906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415620003cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c4906200133b565b60405180910390fd5b600083141562000414576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040b906200126f565b60405180910390fd5b60008214156200045b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200045290620012b3565b60405180910390fd5b6000811415620004a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049990620012d5565b60405180910390fd5b89600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826008819055508160098190555080600a8190555062000714600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200091c60201b62002e23179092919060201c565b620007aa600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200091c60201b62002e23179092919060201c565b62000840600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200091c60201b62002e23179092919060201c565b5050505050505050505062001490565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000811480620009bc575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040162000966929190620011f1565b60206040518083038186803b1580156200097f57600080fd5b505afa15801562000994573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009ba919062000e90565b145b620009fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f5906200135d565b60405180910390fd5b62000a898363095ea7b360e01b848460405160240162000a209291906200121e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505062000a8e60201b60201c565b505050565b600062000af7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662000b6260201b62002f81179092919060201c565b905060008151111562000b5d578080602001905181019062000b1a919062000e64565b62000b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b539062001319565b60405180910390fd5b5b505050565b606062000b79848460008562000b8260201b60201c565b90509392505050565b60608247101562000bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc19062001291565b60405180910390fd5b62000bdb8562000cb060201b60201c565b62000c1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1490620012f7565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162000c489190620011d8565b60006040518083038185875af1925050503d806000811462000c87576040519150601f19603f3d011682016040523d82523d6000602084013e62000c8c565b606091505b509150915062000ca482828662000cc360201b60201c565b92505050949350505050565b600080823b905060008111915050919050565b6060831562000cd55782905062000d28565b60008351111562000ce95782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d1f91906200124b565b60405180910390fd5b9392505050565b60008151905062000d408162001442565b92915050565b60008151905062000d57816200145c565b92915050565b60008151905062000d6e8162001476565b92915050565b6000806000806000806000806000806101408b8d03121562000d9557600080fd5b600062000da58d828e0162000d2f565b9a5050602062000db88d828e0162000d2f565b995050604062000dcb8d828e0162000d2f565b985050606062000dde8d828e0162000d2f565b975050608062000df18d828e0162000d2f565b96505060a062000e048d828e0162000d2f565b95505060c062000e178d828e0162000d2f565b94505060e062000e2a8d828e0162000d5d565b93505061010062000e3e8d828e0162000d5d565b92505061012062000e528d828e0162000d5d565b9150509295989b9194979a5092959850565b60006020828403121562000e7757600080fd5b600062000e878482850162000d46565b91505092915050565b60006020828403121562000ea357600080fd5b600062000eb38482850162000d5d565b91505092915050565b62000ec781620013b1565b82525050565b600062000eda826200137f565b62000ee6818562001395565b935062000ef8818560208601620013fb565b80840191505092915050565b600062000f11826200138a565b62000f1d8185620013a0565b935062000f2f818560208601620013fb565b62000f3a8162001431565b840191505092915050565b600062000f54601883620013a0565b91507f4d617820737570706c792063616e2774206265207a65726f00000000000000006000830152602082019050919050565b600062000f96602683620013a0565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000ffe601d83620013a0565b91507f4d6178204c70206465706f736974732063616e2774206265207a65726f0000006000830152602082019050919050565b600062001040601b83620013a0565b91507f4e46547320666f722073616c652063616e2774206265207a65726f00000000006000830152602082019050919050565b600062001082601d83620013a0565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000620010c4602a83620013a0565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006200112c601d83620013a0565b91507f416464726573732063616e2774206265207a65726f20616464726573730000006000830152602082019050919050565b60006200116e603683620013a0565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b620011d281620013f1565b82525050565b6000620011e6828462000ecd565b915081905092915050565b600060408201905062001208600083018562000ebc565b62001217602083018462000ebc565b9392505050565b600060408201905062001235600083018562000ebc565b620012446020830184620011c7565b9392505050565b6000602082019050818103600083015262001267818462000f04565b905092915050565b600060208201905081810360008301526200128a8162000f45565b9050919050565b60006020820190508181036000830152620012ac8162000f87565b9050919050565b60006020820190508181036000830152620012ce8162000fef565b9050919050565b60006020820190508181036000830152620012f08162001031565b9050919050565b60006020820190508181036000830152620013128162001073565b9050919050565b600060208201905081810360008301526200133481620010b5565b9050919050565b6000602082019050818103600083015262001356816200111d565b9050919050565b6000602082019050818103600083015262001378816200115f565b9050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000620013be82620013d1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200141b578082015181840152602081019050620013fe565b838111156200142b576000848401525b50505050565b6000601f19601f8301169050919050565b6200144d81620013b1565b81146200145957600080fd5b50565b6200146781620013c5565b81146200147357600080fd5b50565b6200148181620013f1565b81146200148d57600080fd5b50565b614a2c80620014a06000396000f3fe6080604052600436106102135760003560e01c806370a0823111610118578063c216c2a0116100a0578063e59df1651161006f578063e59df1651461075c578063ee14be1914610787578063f1daf0d4146107c4578063f2fde38b146107ef578063fb4dfcce146108185761021a565b8063c216c2a01461068c578063d2fc3058146106b7578063d5abeb01146106f4578063d88e3e3b1461071f5761021a565b80637d882097116100e75780637d882097146105b757806387df2c16146105e25780638da5cb5b1461060d578063b6fccf8a14610638578063c1f26123146106635761021a565b806370a0823114610521578063715018a61461055e57806374b31672146105755780637a113cd41461058c5761021a565b80633fb82b681161019b5780635c975abb1161016a5780635c975abb1461044c578063648ed6f61461047757806364b87a70146104a05780636817c76c146104cb5780636cabb717146104f65761021a565b80633fb82b68146103af5780633fc8cef3146103df57806343365f8c1461040a5780635c27af87146104355761021a565b80631f9902f5116101e25780631f9902f5146102c6578063225af80b146102f157806331c2273b1461032e5780633305cb77146103595780633ccfd60b146103845761021a565b806301c1dfba1461021f57806302329a291461024857806316520021146102715780631aa2df681461029d5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906138c8565b61082f565b005b34801561025457600080fd5b5061026f600480360381019061026a919061394e565b610ac4565b005b34801561027d57600080fd5b50610286610d32565b6040516102949291906145f4565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906139a0565b6111dd565b005b3480156102d257600080fd5b506102db6112b3565b6040516102e891906141ae565b60405180910390f35b3480156102fd57600080fd5b50610318600480360381019061031391906139f2565b6112d9565b60405161032591906142d5565b60405180910390f35b34801561033a57600080fd5b50610343611588565b60405161035091906141ae565b60405180910390f35b34801561036557600080fd5b5061036e6115ae565b60405161037b91906145d9565b60405180910390f35b34801561039057600080fd5b506103996115b4565b6040516103a691906142d5565b60405180910390f35b6103c960048036038101906103c49190613863565b611936565b6040516103d691906145d9565b60405180910390f35b3480156103eb57600080fd5b506103f4611c56565b60405161040191906141ae565b60405180910390f35b34801561041657600080fd5b5061041f611c7c565b60405161042c91906141ae565b60405180910390f35b34801561044157600080fd5b5061044a611ca2565b005b34801561045857600080fd5b50610461611ddb565b60405161046e91906142d5565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613a2e565b611dee565b005b3480156104ac57600080fd5b506104b5611ff8565b6040516104c291906141ae565b60405180910390f35b3480156104d757600080fd5b506104e061201e565b6040516104ed91906145d9565b60405180910390f35b34801561050257600080fd5b5061050b612024565b60405161051891906141ae565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190613863565b61204a565b60405161055591906145d9565b60405180910390f35b34801561056a57600080fd5b50610573612093565b005b34801561058157600080fd5b5061058a61211b565b005b34801561059857600080fd5b506105a16125a6565b6040516105ae91906145d9565b60405180910390f35b3480156105c357600080fd5b506105cc6125ac565b6040516105d991906145d9565b60405180910390f35b3480156105ee57600080fd5b506105f76125b2565b60405161060491906142d5565b60405180910390f35b34801561061957600080fd5b506106226125c5565b60405161062f91906141ae565b60405180910390f35b34801561064457600080fd5b5061064d6125ee565b60405161065a91906141ae565b60405180910390f35b34801561066f57600080fd5b5061068a600480360381019061068591906139a0565b612614565b005b34801561069857600080fd5b506106a161278f565b6040516106ae91906145d9565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d99190613863565b612795565b6040516106eb91906145d9565b60405180910390f35b34801561070057600080fd5b506107096127ad565b60405161071691906145d9565b60405180910390f35b34801561072b57600080fd5b506107466004803603810190610741919061388c565b6127b3565b60405161075391906142b3565b60405180910390f35b34801561076857600080fd5b50610771612917565b60405161077e91906142d5565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190613863565b61292a565b6040516107bb91906142d5565b60405180910390f35b3480156107d057600080fd5b506107d961294a565b6040516107e691906145d9565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190613863565b612950565b005b34801561082457600080fd5b5061082d612a48565b005b610837612f99565b73ffffffffffffffffffffffffffffffffffffffff166108556125c5565b73ffffffffffffffffffffffffffffffffffffffff16146108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a2906144d9565b60405180910390fd5b600b60009054906101000a900460ff166108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190614499565b60405180910390fd5b60005b82829050811015610a6857610a5533848484818110610945577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061095a9190613863565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161099291906141ae565b60206040518083038186803b1580156109aa57600080fd5b505afa1580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e291906139c9565b858585818110610a1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610a309190613863565b73ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b8080610a6090614899565b9150506108fd565b5060004790506000811115610abf573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610abd573d6000803e3d6000fd5b505b505050565b610acc612f99565b73ffffffffffffffffffffffffffffffffffffffff16610aea6125c5565b73ffffffffffffffffffffffffffffffffffffffff1614610b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b37906144d9565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b9d91906141ae565b60206040518083038186803b158015610bb557600080fd5b505afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906139c9565b90506000811115610d1457600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610c5391906145d9565b600060405180830381600087803b158015610c6d57600080fd5b505af1158015610c81573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c4b774b60026040518263ffffffff1660e01b8152600401610ce1919061433c565b600060405180830381600087803b158015610cfb57600080fd5b505af1158015610d0f573d6000803e3d6000fd5b505050505b81600b60006101000a81548160ff0219169083151502179055505050565b600080610d3d612f99565b73ffffffffffffffffffffffffffffffffffffffff16610d5b6125c5565b73ffffffffffffffffffffffffffffffffffffffff1614610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da8906144d9565b60405180910390fd5b600b60009054906101000a900460ff1615610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890614599565b60405180910390fd5b600b60029054906101000a900460ff16610e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4790614399565b60405180910390fd5b6000600b60026101000a81548160ff0219169083151502179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ec891906141ae565b60206040518083038186803b158015610ee057600080fd5b505afa158015610ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1891906139c9565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610f7591906145d9565b600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c4b774b60026040518263ffffffff1660e01b8152600401611003919061433c565b600060405180830381600087803b15801561101d57600080fd5b505af1158015611031573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161109091906141ae565b60206040518083038186803b1580156110a857600080fd5b505afa1580156110bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e091906139c9565b600d81905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161114191906141ae565b60206040518083038186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119191906139c9565b600e819055507f3d8abe40e52d258d399cd7d375b9bb4edc063445ff1d3f7639ac3dd50a6c1106426040516111c691906145d9565b60405180910390a1600d54600e5492509250509091565b6111e5612f99565b73ffffffffffffffffffffffffffffffffffffffff166112036125c5565b73ffffffffffffffffffffffffffffffffffffffff1614611259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611250906144d9565b60405180910390fd5b600b60009054906101000a900460ff16156112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090614599565b60405180910390fd5b8060098190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b60009054906101000a900460ff161561132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290614599565b60405180910390fd5b6000831161136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136590614539565b60405180910390fd5b600b60029054906101000a900460ff16156113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590614419565b60405180910390fd5b600b60019054906101000a900460ff1661140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490614419565b60405180910390fd5b60095483600c5461141e91906146e5565b111561145f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145690614479565b60405180910390fd5b6114ae333085600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613027909392919063ffffffff16565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a694fc3a846040518263ffffffff1660e01b815260040161150991906145d9565b600060405180830381600087803b15801561152357600080fd5b505af1158015611537573d6000803e3d6000fd5b5050505061154583836130b0565b7fa76194b11cf7b940f18e866ed3382a795bb09ca684db1b957d595417f63151f88284604051611576929190614229565b60405180910390a16001905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600b60009054906101000a900460ff1615611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90614599565b60405180910390fd5b600b60029054906101000a900460ff1615611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90614459565b60405180910390fd5b600b60019054906101000a900460ff16156116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90614519565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f906143b9565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600f54826117c191906148e2565b905060008111156118a7576000600c5482600d546117df919061476c565b6117e9919061473b565b90506000600c5483600e546117fe919061476c565b611808919061473b565b90506118573383600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b6118a43382600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b50505b6118f43383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243643383604051611925929190614229565b60405180910390a160019250505090565b6000600b60009054906101000a900460ff1615611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90614599565b60405180910390fd5b600b60029054906101000a900460ff16156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614419565b60405180910390fd5b600b60019054906101000a900460ff16611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90614419565b60405180910390fd5b6000806000611a7b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634613123565b92509250925060095481600c54611a9291906146e5565b1115611ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aca90614479565b60405180910390fd5b6000821115611b2a57611b293383600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b5b6000831115611b7b573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611b79573d6000803e3d6000fd5b505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a694fc3a826040518263ffffffff1660e01b8152600401611bd691906145d9565b600060405180830381600087803b158015611bf057600080fd5b505af1158015611c04573d6000803e3d6000fd5b50505050611c1281866130b0565b7f7034bb05cfe54b0d147fc0574ed166101e7f0313eb404e113974fbe2a998ca838582604051611c43929190614229565b60405180910390a1809350505050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611caa612f99565b73ffffffffffffffffffffffffffffffffffffffff16611cc86125c5565b73ffffffffffffffffffffffffffffffffffffffff1614611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d15906144d9565b60405180910390fd5b600b60019054906101000a900460ff1615611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d65906143d9565b60405180910390fd5b600b60009054906101000a900460ff1615611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590614599565b60405180910390fd5b6001600b60016101000a81548160ff021916908315150217905550565b600b60009054906101000a900460ff1681565b611df6612f99565b73ffffffffffffffffffffffffffffffffffffffff16611e146125c5565b73ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e61906144d9565b60405180910390fd5b600b60009054906101000a900460ff1615611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614599565b60405180910390fd5b600b60029054906101000a900460ff1615611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0190614459565b60405180910390fd5b600b60019054906101000a900460ff1615611f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5190614519565b60405180910390fd5b611fa73383600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b611ff43382600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61209b612f99565b73ffffffffffffffffffffffffffffffffffffffff166120b96125c5565b73ffffffffffffffffffffffffffffffffffffffff161461210f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612106906144d9565b60405180910390fd5b6121196000613401565b565b600b60009054906101000a900460ff161561216b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216290614599565b60405180910390fd5b600b60019054906101000a900460ff16156121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290614519565b60405180910390fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223f90614439565b60405180910390fd5b600f54601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156122d857506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b612317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230e906144b9565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600f548261236b919061473b565b9050600854600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123d857600080fd5b505afa1580156123ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241091906139c9565b8261241b91906146e5565b1061245b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612452906144f9565b60405180910390fd5b60008111156125115760005b8181101561250f57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842336040518263ffffffff1660e01b81526004016124ca91906141ae565b600060405180830381600087803b1580156124e457600080fd5b505af11580156124f8573d6000803e3d6000fd5b50505050808061250790614899565b915050612467565b505b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885338260405161259a929190614229565b60405180910390a15050565b600d5481565b600c5481565b600b60019054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61261c612f99565b73ffffffffffffffffffffffffffffffffffffffff1661263a6125c5565b73ffffffffffffffffffffffffffffffffffffffff1614612690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612687906144d9565b60405180910390fd5b600b60009054906101000a900460ff16156126e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d790614599565b60405180910390fd5b60005b8181101561278b57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842336040518263ffffffff1660e01b815260040161274691906141ae565b600060405180830381600087803b15801561276057600080fd5b505af1158015612774573d6000803e3d6000fd5b50505050808061278390614899565b9150506126e3565b5050565b60095481565b60106020528060005260406000206000915090505481565b60085481565b6060600267ffffffffffffffff8111156127f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156128245781602001602082028036833780820191505090505b5090508281600081518110612862577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816001815181106128d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b600b60029054906101000a900460ff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b600a5481565b612958612f99565b73ffffffffffffffffffffffffffffffffffffffff166129766125c5565b73ffffffffffffffffffffffffffffffffffffffff16146129cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c3906144d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3390614379565b60405180910390fd5b612a4581613401565b50565b612a50612f99565b73ffffffffffffffffffffffffffffffffffffffff16612a6e6125c5565b73ffffffffffffffffffffffffffffffffffffffff1614612ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abb906144d9565b60405180910390fd5b600b60009054906101000a900460ff1615612b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0b90614599565b60405180910390fd5b600b60029054906101000a900460ff1615612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b90614419565b60405180910390fd5b600b60019054906101000a900460ff16612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614419565b60405180910390fd5b6000600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c4691906141ae565b60206040518083038186803b158015612c5e57600080fd5b505afa158015612c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9691906139c9565b1115612dd457600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a694fc3a600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612d3591906141ae565b60206040518083038186803b158015612d4d57600080fd5b505afa158015612d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8591906139c9565b6040518263ffffffff1660e01b8152600401612da191906145d9565b600060405180830381600087803b158015612dbb57600080fd5b505af1158015612dcf573d6000803e3d6000fd5b505050505b600a54600c54612de4919061473b565b600f819055507fb9c5567aa0a4fb84cf102cd31fdfb097fc1f9f0005bfdee931550955bf4ff67242604051612e1991906145d9565b60405180910390a1565b6000811480612ebc575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401612e6a9291906141c9565b60206040518083038186803b158015612e8257600080fd5b505afa158015612e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eba91906139c9565b145b612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef2906145b9565b60405180910390fd5b612f7c8363095ea7b360e01b8484604051602401612f1a929190614229565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134c5565b505050565b6060612f90848460008561358c565b90509392505050565b600033905090565b6130228363a9059cbb60e01b8484604051602401612fc0929190614229565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134c5565b505050565b6130aa846323b872dd60e01b858585604051602401613048939291906141f2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134c5565b50505050565b81601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130ff91906146e5565b9250508190555081600c600082825461311891906146e5565b925050819055505050565b600080600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16637ff36ab5600288613179919061473b565b60006131858c8c6127b3565b30426040518663ffffffff1660e01b81526004016131a694939291906142f0565b6000604051808303818588803b1580156131bf57600080fd5b505af11580156131d3573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906131fd919061390d565b600181518110613236577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff1663f305d71960028a61326c919061473b565b8b8660008030426040518863ffffffff1660e01b815260040161329496959493929190614252565b6060604051808303818588803b1580156132ad57600080fd5b505af11580156132c1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132e69190613a6a565b809750819350829450505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161461335857818361335391906147c6565b613371565b80600289613366919061473b565b61337091906147c6565b5b9650600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146133d95781836133d491906147c6565b6133f2565b806002896133e7919061473b565b6133f191906147c6565b5b95505050505093509350939050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000613527826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612f819092919063ffffffff16565b905060008151111561358757808060200190518101906135479190613977565b613586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357d90614579565b60405180910390fd5b5b505050565b6060824710156135d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c8906143f9565b60405180910390fd5b6135da856136a0565b613619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361090614559565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516136429190614197565b60006040518083038185875af1925050503d806000811461367f576040519150601f19603f3d011682016040523d82523d6000602084013e613684565b606091505b50915091506136948282866136b3565b92505050949350505050565b600080823b905060008111915050919050565b606083156136c357829050613713565b6000835111156136d65782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370a9190614357565b60405180910390fd5b9392505050565b600061372d6137288461464e565b61461d565b9050808382526020820190508285602086028201111561374c57600080fd5b60005b8581101561377c5781613762888261384e565b84526020840193506020830192505060018101905061374f565b5050509392505050565b600081359050613795816149b1565b92915050565b60008083601f8401126137ad57600080fd5b8235905067ffffffffffffffff8111156137c657600080fd5b6020830191508360208202830111156137de57600080fd5b9250929050565b600082601f8301126137f657600080fd5b815161380684826020860161371a565b91505092915050565b60008135905061381e816149c8565b92915050565b600081519050613833816149c8565b92915050565b600081359050613848816149df565b92915050565b60008151905061385d816149df565b92915050565b60006020828403121561387557600080fd5b600061388384828501613786565b91505092915050565b6000806040838503121561389f57600080fd5b60006138ad85828601613786565b92505060206138be85828601613786565b9150509250929050565b600080602083850312156138db57600080fd5b600083013567ffffffffffffffff8111156138f557600080fd5b6139018582860161379b565b92509250509250929050565b60006020828403121561391f57600080fd5b600082015167ffffffffffffffff81111561393957600080fd5b613945848285016137e5565b91505092915050565b60006020828403121561396057600080fd5b600061396e8482850161380f565b91505092915050565b60006020828403121561398957600080fd5b600061399784828501613824565b91505092915050565b6000602082840312156139b257600080fd5b60006139c084828501613839565b91505092915050565b6000602082840312156139db57600080fd5b60006139e98482850161384e565b91505092915050565b60008060408385031215613a0557600080fd5b6000613a1385828601613839565b9250506020613a2485828601613786565b9150509250929050565b60008060408385031215613a4157600080fd5b6000613a4f85828601613839565b9250506020613a6085828601613839565b9150509250929050565b600080600060608486031215613a7f57600080fd5b6000613a8d8682870161384e565b9350506020613a9e8682870161384e565b9250506040613aaf8682870161384e565b9150509250925092565b6000613ac58383613ad1565b60208301905092915050565b613ada816147fa565b82525050565b613ae9816147fa565b82525050565b6000613afa8261468a565b613b0481856146b8565b9350613b0f8361467a565b8060005b83811015613b40578151613b278882613ab9565b9750613b32836146ab565b925050600181019050613b13565b5085935050505092915050565b613b568161480c565b82525050565b6000613b6782614695565b613b7181856146c9565b9350613b81818560208601614866565b80840191505092915050565b613b9681614842565b82525050565b613ba581614854565b82525050565b6000613bb6826146a0565b613bc081856146d4565b9350613bd0818560208601614866565b613bd9816149a0565b840191505092915050565b6000613bf16026836146d4565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c576015836146d4565b91507f4661726d696e67206973206e6f742061637469766500000000000000000000006000830152602082019050919050565b6000613c97600b836146d4565b91507f6e6f206465706f736974730000000000000000000000000000000000000000006000830152602082019050919050565b6000613cd76021836146d4565b91507f4465706f73697420706572696f6420697320616c72656164792073746172746560008301527f64000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d3d6026836146d4565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613da36019836146d4565b91507f4465706f736974732068617665206265656e20636c6f736564000000000000006000830152602082019050919050565b6000613de3601d836146d4565b91507f557365722068617320616c726561647920636c61696d6564206d696e740000006000830152602082019050919050565b6000613e236015836146d4565b91507f4661726d696e6720686173206e6f7420656e64656400000000000000000000006000830152602082019050919050565b6000613e636026836146d4565b91507f6465706f73697420616d6f756e742065786365656473206d6178204c5020646560008301527f706f7369747300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ec96016836146d4565b91507f436f6e7472616374206973206e6f7420706175736564000000000000000000006000830152602082019050919050565b6000613f096020836146d4565b91507f5573657220686173206e6f74206465706f736974656420656e6f756768204c506000830152602082019050919050565b6000613f496020836146d4565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613f896012836146d4565b91507f6d696e74206c696d6974207265616368656400000000000000000000000000006000830152602082019050919050565b6000613fc9601d836146d4565b91507f4465706f736974732068617665206e6f74206265656e20636c6f7365640000006000830152602082019050919050565b60006140096008836146d4565b91507f616d6f756e7420300000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614049601d836146d4565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614089602a836146d4565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006140ef6012836146d4565b91507f436f6e74726163742069732070617573656400000000000000000000000000006000830152602082019050919050565b600061412f6036836146d4565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b61419181614838565b82525050565b60006141a38284613b5c565b915081905092915050565b60006020820190506141c36000830184613ae0565b92915050565b60006040820190506141de6000830185613ae0565b6141eb6020830184613ae0565b9392505050565b60006060820190506142076000830186613ae0565b6142146020830185613ae0565b6142216040830184614188565b949350505050565b600060408201905061423e6000830185613ae0565b61424b6020830184614188565b9392505050565b600060c0820190506142676000830189613ae0565b6142746020830188614188565b6142816040830187613b8d565b61428e6060830186613b8d565b61429b6080830185613ae0565b6142a860a0830184614188565b979650505050505050565b600060208201905081810360008301526142cd8184613aef565b905092915050565b60006020820190506142ea6000830184613b4d565b92915050565b60006080820190506143056000830187613b8d565b81810360208301526143178186613aef565b90506143266040830185613ae0565b6143336060830184614188565b95945050505050565b60006020820190506143516000830184613b9c565b92915050565b600060208201905081810360008301526143718184613bab565b905092915050565b6000602082019050818103600083015261439281613be4565b9050919050565b600060208201905081810360008301526143b281613c4a565b9050919050565b600060208201905081810360008301526143d281613c8a565b9050919050565b600060208201905081810360008301526143f281613cca565b9050919050565b6000602082019050818103600083015261441281613d30565b9050919050565b6000602082019050818103600083015261443281613d96565b9050919050565b6000602082019050818103600083015261445281613dd6565b9050919050565b6000602082019050818103600083015261447281613e16565b9050919050565b6000602082019050818103600083015261449281613e56565b9050919050565b600060208201905081810360008301526144b281613ebc565b9050919050565b600060208201905081810360008301526144d281613efc565b9050919050565b600060208201905081810360008301526144f281613f3c565b9050919050565b6000602082019050818103600083015261451281613f7c565b9050919050565b6000602082019050818103600083015261453281613fbc565b9050919050565b6000602082019050818103600083015261455281613ffc565b9050919050565b600060208201905081810360008301526145728161403c565b9050919050565b600060208201905081810360008301526145928161407c565b9050919050565b600060208201905081810360008301526145b2816140e2565b9050919050565b600060208201905081810360008301526145d281614122565b9050919050565b60006020820190506145ee6000830184614188565b92915050565b60006040820190506146096000830185614188565b6146166020830184614188565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561464457614643614971565b5b8060405250919050565b600067ffffffffffffffff82111561466957614668614971565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006146f082614838565b91506146fb83614838565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147305761472f614913565b5b828201905092915050565b600061474682614838565b915061475183614838565b92508261476157614760614942565b5b828204905092915050565b600061477782614838565b915061478283614838565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147bb576147ba614913565b5b828202905092915050565b60006147d182614838565b91506147dc83614838565b9250828210156147ef576147ee614913565b5b828203905092915050565b600061480582614818565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061484d82614838565b9050919050565b600061485f82614838565b9050919050565b60005b83811015614884578082015181840152602081019050614869565b83811115614893576000848401525b50505050565b60006148a482614838565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148d7576148d6614913565b5b600182019050919050565b60006148ed82614838565b91506148f883614838565b92508261490857614907614942565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6149ba816147fa565b81146149c557600080fd5b50565b6149d18161480c565b81146149dc57600080fd5b50565b6149e881614838565b81146149f357600080fd5b5056fea2646970667358221220b9e8836d7c3168e2c432753ac76bd086a04bd46c931264412984a5dea15cd02164736f6c63430008000033000000000000000000000000ede855ced3e5a59aaa267abdddb0db21ccfe50720000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee5500000000000000000000000032eb7902d4134bf98a28b963d26de779af92a21200000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000007418f5a2621e13c05d1efbd71ec922070794b90a00000000000000000000000003ac1aa1ff470cf376e6b7cd3a3389ad6d922a740000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750600000000000000000000000000000000000000000000000000000000000008ae00000000000000000000000000000000000000000000034b2f1c8f6049c8000000000000000000000000000000000000000000000000000000000000000008ae

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

000000000000000000000000ede855ced3e5a59aaa267abdddb0db21ccfe50720000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee5500000000000000000000000032eb7902d4134bf98a28b963d26de779af92a21200000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000007418f5a2621e13c05d1efbd71ec922070794b90a00000000000000000000000003ac1aa1ff470cf376e6b7cd3a3389ad6d922a740000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750600000000000000000000000000000000000000000000000000000000000008ae00000000000000000000000000000000000000000000034b2f1c8f6049c8000000000000000000000000000000000000000000000000000000000000000008ae

-----Decoded View---------------
Arg [0] : _NFTContract (address): 0xede855ced3e5a59aaa267abdddb0db21ccfe5072
Arg [1] : _dpx (address): 0x6c2c06790b3e3e3c38e12ee22f8183b37a13ee55
Arg [2] : _rdpx (address): 0x32eb7902d4134bf98a28b963d26de779af92a212
Arg [3] : _weth (address): 0x82af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [4] : _lp (address): 0x7418f5a2621e13c05d1efbd71ec922070794b90a
Arg [5] : _stakingRewards (address): 0x03ac1aa1ff470cf376e6b7cd3a3389ad6d922a74
Arg [6] : _uniswapV2Router01 (address): 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506
Arg [7] : _maxSupply (uint256): 2222
Arg [8] : _maxLpDeposits (uint256): 15554000000000000000000
Arg [9] : _NFTsForSale (uint256): 2222

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 000000000000000000000000ede855ced3e5a59aaa267abdddb0db21ccfe5072
Arg [1] : 0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee55
Arg [2] : 00000000000000000000000032eb7902d4134bf98a28b963d26de779af92a212
Arg [3] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [4] : 0000000000000000000000007418f5a2621e13c05d1efbd71ec922070794b90a
Arg [5] : 00000000000000000000000003ac1aa1ff470cf376e6b7cd3a3389ad6d922a74
Arg [6] : 0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b47997506
Arg [7] : 00000000000000000000000000000000000000000000000000000000000008ae
Arg [8] : 00000000000000000000000000000000000000000000034b2f1c8f6049c80000
Arg [9] : 00000000000000000000000000000000000000000000000000000000000008ae


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.