Contract 0xa8a7bbe83960b29789d5cb06dcd2e6c1df20581c

 

Contract Overview

Gelato Network: Task Treasury
Balance:
1,757.79896143819522506 MATIC

MATIC Value:
$2,984.74 (@ $1.70/MATIC)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb81161d8817f361e38262c03e7420faaf9fc9fb3f27c04ec876aeae3878db851Deposit Funds241795852022-01-26 8:35:219 hrs 3 mins ago0x5e658773fb0b89c00129e627a576b4f6cea16e7b IN  Gelato Network: Task Treasury5 MATIC0.003261901666 99.302900234
0x9ba10a20498a9ec1cf74cd2ddc7f9a23448bcaf519bf4596b12bd235f244b308Deposit Funds241724092022-01-26 4:22:0213 hrs 17 mins ago0xfd4baeba231c5c434c5a73d81d34b1d5f12170f2 IN  Gelato Network: Task Treasury0.1 MATIC0.013527448967 117.648405554
0xaba5cc033d9ef8e60931eb747a67ba6bfffb3a86ed9fa5a5eee78b3c2e5fe175Deposit Funds241525312022-01-25 16:43:011 day 56 mins ago0x1a5e5243ade535c641784f421403dd6764dccd23 IN  Gelato Network: Task Treasury2 MATIC0.007204313441 62.656010869
0xa2fa23df2d8ae1cf53eb8ff075ba5959f9a6ca95a61e438e73312e0ff2d390ddWithdraw Funds241482972022-01-25 14:14:481 day 3 hrs ago0x5dae86a4ee3c7f0c724ec1b8e4d492455bbd452e IN  Gelato Network: Task Treasury0 MATIC0.007217237771 178.40603578
0xb2a372b76915bca7a0e8250cf7c9646c7d9a75f98cdd4612ea1ca6c9abced697Deposit Funds241481022022-01-25 14:08:061 day 3 hrs ago0x5dae86a4ee3c7f0c724ec1b8e4d492455bbd452e IN  Gelato Network: Task Treasury1 MATIC0.034971761019 304.149875806
0x1d85fbba917854f17dc58cbff24ef710f9e3ee17e8ca3ddef052e6ebb37a78faDeposit Funds241390592022-01-25 8:42:101 day 8 hrs ago0x482fb235af54b97a3e0c734bc45c4635bd9ba111 IN  Gelato Network: Task Treasury5 MATIC0.001671051517 50.872245427
0x21d4ddd241ce260136f368188bf472cc9c1bb5c4bb09a300dcd6bf921517ade2Deposit Funds241374102022-01-25 7:40:441 day 9 hrs ago0x936bb3d6492190fcf0d619a2f04dd54e622ad376 IN  Gelato Network: Task Treasury2 MATIC0.00540024574 46.966009816
0x06be03fc535c571e07fdbfce6c708755f3909ca031dc5ff691a09378f324e6b0Deposit Funds240845522022-01-24 0:09:262 days 17 hrs ago0x482fb235af54b97a3e0c734bc45c4635bd9ba111 IN  Gelato Network: Task Treasury0.5 MATIC0.004721725345 41.064908819
0x545cdebb0b05487d92b46d1b962fe6d84da379f909e6702cb81d209719ace1e3Deposit Funds240628302022-01-23 10:49:093 days 6 hrs ago0x806a940e1c431aa36077c4f6fb3e7d36cef2a9a7 IN  Gelato Network: Task Treasury0.1 MATIC0.005553500215 48.298866043
0x927ffec8a5f5b720ae373d2be73274170d3e50f0305bee604b791de5bddbeff6Deposit Funds240329582022-01-22 16:55:534 days 43 mins ago0xce3214768474f006c50189d2d9583f19e3791f96 IN  Gelato Network: Task Treasury3 MATIC0.011192081161 340.723367072
0x590a64b8ef161851576990da1f5481f0498ed9be490a06507ea287548fa49f0cDeposit Funds240235552022-01-22 11:19:164 days 6 hrs ago0x0ca35a03d3e570c34105be3585dac330bc145308 IN  Gelato Network: Task Treasury4 MATIC0.003892139381 118.489386916
0xae2bb66ba41853229aa8e7b810cdce6cc0834f5ea68c4f58c693c46209af8d49Deposit Funds240176012022-01-22 7:39:584 days 9 hrs ago0xb6643b2508f196b2fc97c826ad432575634facb4 IN  Gelato Network: Task Treasury15 MATIC0.103336648253 3,145.903807041
0x5e5f2f7ab650a558aa7527b3f691f5deb8909124fd07badf820fd974f12295e6Withdraw Funds240134502022-01-22 5:06:294 days 12 hrs ago0x4532280a66a0c1c709f7e0c40b14b4dea83253c1 IN  Gelato Network: Task Treasury0 MATIC0.0607725793491,501.818300543
0x78e4b5585d782dab9dd937d923524f844260e9a5bae05ac097c40119604c88adDeposit Funds240075782022-01-22 1:37:434 days 16 hrs ago0xeb5c8f43d5969e14df37b69fcb1139a08b393cbd IN  Gelato Network: Task Treasury25 MATIC0.002297340892 69.912991237
0x661793e9790b0e91481c4bf1566f538ecc318922b5db258d8c837ab0a9bf100aWithdraw Funds240004002022-01-21 21:28:164 days 20 hrs ago0x4532280a66a0c1c709f7e0c40b14b4dea83253c1 IN  Gelato Network: Task Treasury0 MATIC0.018629840024460.519108724
0x4dac2dbb791a023d1081860b2ed667d59739dbaa6d0249ee8e48571d55171f87Deposit Funds239995372022-01-21 20:52:104 days 20 hrs ago0xbdf62ede89d58692da0853410dfb18cc9c016f64 IN  Gelato Network: Task Treasury1 MATIC0.081064418135 705.018334484
0x6f36813a57fa033098de36508c8699cce1a8038c3673fd66c0e8b46d14990e3fWithdraw Funds239967182022-01-21 19:04:274 days 22 hrs ago0x3499604cf488845d9c6d327c7af2c93ba770b3c0 IN  Gelato Network: Task Treasury0 MATIC0.003986064611 83.956034617
0x381f3d619bbcd111cd616b9f063a0ddd483c18a358a10f0480211cf3329f57baDeposit Funds239956682022-01-21 18:21:594 days 23 hrs ago0x3aa6b43dc5e1faaeaae6347ad01d0713cf64a929 IN  Gelato Network: Task Treasury2 MATIC0.036059735937 313.612008292
0x089ed19355e09151a544db7f7f738a648af02a1070fdf2bc0bd8f8102362dfb0Deposit Funds239935682022-01-21 17:01:045 days 38 mins ago0xb0dd96118594903bacb2746eb228550c10b2b1da IN  Gelato Network: Task Treasury100 MATIC0.01347326561 410.020255961
0xa486a3756d46eb4daacb24f295473cb871d3da91cc6b5442e2f2b8fc22cead19Deposit Funds239932762022-01-21 16:48:525 days 50 mins ago0x3499604cf488845d9c6d327c7af2c93ba770b3c0 IN  Gelato Network: Task Treasury5 MATIC0.027700348903 240.910306858
0xa51bce48f105d5490301e60fcd39e00b00ae0dfab1c1742c5166c33ff5ad01d7Deposit Funds239890932022-01-21 14:07:475 days 3 hrs ago0xeb5c8f43d5969e14df37b69fcb1139a08b393cbd IN  Gelato Network: Task Treasury8 MATIC0.010055533231 306.123150003
0xecf5ba6a570872e43f876c63c11ce05aa77f588739232e42e11dbe63af98b7feWithdraw Funds239836772022-01-21 10:41:525 days 6 hrs ago0x9b591bf6970d271c4660df5e08d85773e998b59e IN  Gelato Network: Task Treasury0 MATIC0.002643645317 65.330037989
0x0a8283cff93da563df8b560b201ebf182b301744162165f653c4bfb7ef11d550Deposit Funds239833922022-01-21 10:32:065 days 7 hrs ago0x9b591bf6970d271c4660df5e08d85773e998b59e IN  Gelato Network: Task Treasury1 MATIC0.006626704644 57.632539397
0xe10179d1d3c058b642e41b95f00bc1ef0160d23e90fadea22deb94fbcc842b9eDeposit Funds239801692022-01-21 8:36:325 days 9 hrs ago0xe068647cddbd46bd762aa8083d6e607c53675bd4 IN  Gelato Network: Task Treasury10 MATIC0.002579459049 78.52712645
0xe24e3588cd28c197c2f6f6f9e3eec53ce4c48edee453135b8bb5ffc387bb4c2eDeposit Funds239506922022-01-20 15:13:276 days 2 hrs ago0x95043e2de084a48d2c39aa75a73d0bdda52ebed9 IN  Gelato Network: Task Treasury0.1 MATIC0.021134354649 183.805766547
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xf606b2033663fd87f2d55b5238a0b8095c58eeb0484c3a567f83e0fdc4b09cec241940112022-01-26 17:37:441 min ago Gelato Network: Task Treasury Gelato Network: Gelato0.008705306812304538 MATIC
0x5a509af934b64bf8be8463fb7f72704452ac49f4f1b5a0401feb849424193b4c241939762022-01-26 17:36:302 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.017572202865721809 MATIC
0xc13a98606846c47e0235c3c2ab507b37e68d9681af22ac15f8300a2588e064e1241938632022-01-26 17:32:406 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.002484710749255026 MATIC
0x914d46c39b01c633f33d8bc1073071e93e6a8caeb64a0eea2e4fd67cc5c24123241937862022-01-26 17:29:489 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.00891765530481998 MATIC
0x7dec0d5d07faf6902915d4f858000967f47167ed7b2dbc25baf92cae329d6904241937862022-01-26 17:29:489 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.005010843430040208 MATIC
0x4bf8d20cf84ae768c9ebdfa06bf902b4f06a52ed41d147f5ed97c637530ae161241937542022-01-26 17:27:4011 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.003464493632221 MATIC
0x87e6efc8a6f33e2ddd800cdd6df22380476f0bc1fa05e34b122f901d67e87b95241937442022-01-26 17:27:0012 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.003968399620922254 MATIC
0xf5b8c9a5a77ec4d3b65eecb925973c378c9c190d5d75c4a36b33c9f410c41946241937372022-01-26 17:26:3212 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.004575041006205198 MATIC
0x47a6a0e54c52f2a7bc0ed22db4abe880dd3b04aee83eadb10145f9487ac7d3f7241935982022-01-26 17:20:3418 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.003487386559242395 MATIC
0xbd57e8c0716eff46041db9a428917b9142f22965fe6a0f5be9ed470acd8a3964241935132022-01-26 17:17:4021 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.003090781944758156 MATIC
0xa681225e150f7adaa5733ab08948bd11351a660a9a64c0ab0dc58ad7e4d48716241934782022-01-26 17:16:3022 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.017612966656171954 MATIC
0x3bb8da61ce32f8591699735dfaff238095ccb3ceae28db5692493ada80f9aa56241934312022-01-26 17:14:5224 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.003432340138014775 MATIC
0x757a52f6f7b4c3ded6d277f8c15c2af047ffa6a304145973e87647b82569a2b3241933712022-01-26 17:12:4826 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.034905042776694741 MATIC
0xffca0548ba733b20de2492cd2516835f160ab718949e9fbe4c80345ca86559c9241933362022-01-26 17:11:3427 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.0195984829425168 MATIC
0xa639e15e65d4b0c000622b7234c78132e82a01c9d598f74499b62f8e3da85765241932872022-01-26 17:09:5629 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.020096938926390886 MATIC
0x322373e1c99619851ab6d89bb15aeed2b5cdcf8012a5a99f91764f6bf6523939241932522022-01-26 17:08:4230 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.003465260291565155 MATIC
0x4b5c635a1405fe4ac86076847922bb5e0a4fe6bb67b08d1f742a07e9a2e7f025241931952022-01-26 17:06:4432 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.00593529229353168 MATIC
0x8bbd262313dc57b7acf932387257514bff3fb2718ef7d92ac8f9eaa32745d961241931722022-01-26 17:05:5833 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.0199684373644396 MATIC
0xd30460d9906721a50b16705cc28811efd4b6ceea14655cfb7276cdc9f8902a5d241930842022-01-26 17:02:4036 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.00346439663248487 MATIC
0xc60afb537d1fb536e896004381940bab72f8411e8fddc7d1db18f6c246fa2a1a241930412022-01-26 16:59:4839 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.011365478717333554 MATIC
0x71ad4f60a1c84294b007393fa8a80d4e246cd8781440cf4ecfb29feda99003ea241930402022-01-26 16:59:4439 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.004083557425886191 MATIC
0x092427c7ff34e9e0a7123e34c0f332a3b5f365558b4cce2f7530b31032c5d5b4241929742022-01-26 16:56:5442 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.00348203615881543 MATIC
0x5e1710c29b6d30dd62de89249a897e0a75a28d718f24d41922811a277b943907241927862022-01-26 16:50:2648 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.003546700053645125 MATIC
0x0a25456cc5c37c076083a178b92a51c4cc2b1346167f520c584f262e4dc941e8241926312022-01-26 16:44:5454 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.0035120686107458 MATIC
0x1b4fc21b80fa858742095fe60901bbddf27f476fa46336467c68aea144743f63241924722022-01-26 16:39:2659 mins ago Gelato Network: Task Treasury Gelato Network: Gelato0.00343546544032829 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TaskTreasuryMatic

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 10 : Ownable.sol
// SPDX-License-Identifier: MIT

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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 2 of 10 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 3 of 10 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 4 of 10 : SafeERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC20.sol";
import "../../../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 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'
        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) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _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
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

File 5 of 10 : Address.sol
// SPDX-License-Identifier: MIT

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

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

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

File 6 of 10 : Context.sol
// SPDX-License-Identifier: MIT

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 7 of 10 : Math.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute.
        return (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2);
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds up instead
     * of rounding down.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a / b + (a % b == 0 ? 0 : 1);
    }
}

File 8 of 10 : EnumerableSet.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

            if (lastIndex != toDeleteIndex) {
                bytes32 lastvalue = set._values[lastIndex];

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

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

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

            return true;
        } else {
            return false;
        }
    }

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

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

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

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

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

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

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

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

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

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

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

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

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

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

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

    // UintSet

    struct UintSet {
        Set _inner;
    }

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

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

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

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

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

File 9 of 10 : FGelato.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.0;

import {SafeERC20, IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

function _transfer(
    address payable _to,
    address _paymentToken,
    uint256 _amount
) {
    if (_paymentToken == ETH) {
        (bool success, ) = _to.call{value: _amount}("");
        require(success, "_transfer: ETH transfer failed");
    } else {
        SafeERC20.safeTransfer(IERC20(_paymentToken), _to, _amount);
    }
}

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

import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
import {SafeERC20, IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
import {_transfer, ETH} from "./FGelato.sol";

contract TaskTreasuryMatic is Ownable, ReentrancyGuard {
    using EnumerableSet for EnumerableSet.AddressSet;
    using SafeERC20 for IERC20;

    uint256 public maxFee;
    mapping(address => mapping(address => uint256)) public userTokenBalance;
    mapping(address => EnumerableSet.AddressSet) internal _tokenCredits;
    EnumerableSet.AddressSet internal _whitelistedServices;
    address payable public immutable gelato;

    event FundsDeposited(
        address indexed sender,
        address indexed token,
        uint256 indexed amount
    );
    event FundsWithdrawn(
        address indexed receiver,
        address indexed initiator,
        address indexed token,
        uint256 amount
    );

    constructor(address payable _gelato) {
        gelato = _gelato;
        maxFee = 1 ether;
    }

    modifier onlyWhitelistedServices() {
        require(
            _whitelistedServices.contains(msg.sender),
            "TaskTreasury: onlyWhitelistedServices"
        );
        _;
    }

    /// @notice Function to deposit Funds which will be used to execute transactions on various services
    /// @param _receiver Address receiving the credits
    /// @param _token Token to be credited, use "0xeeee...." for ETH
    /// @param _amount Amount to be credited
    function depositFunds(
        address _receiver,
        address _token,
        uint256 _amount
    ) external payable {
        uint256 depositAmount;
        if (_token == ETH) {
            depositAmount = msg.value;
        } else {
            IERC20 token = IERC20(_token);
            uint256 preBalance = token.balanceOf(address(this));
            token.safeTransferFrom(msg.sender, address(this), _amount);
            uint256 postBalance = token.balanceOf(address(this));
            depositAmount = postBalance - preBalance;
        }

        userTokenBalance[_receiver][_token] =
            userTokenBalance[_receiver][_token] +
            depositAmount;

        if (!_tokenCredits[_receiver].contains(_token))
            _tokenCredits[_receiver].add(_token);

        emit FundsDeposited(_receiver, _token, depositAmount);
    }

    /// @notice Function to withdraw Funds back to the _receiver
    /// @param _receiver Address receiving the credits
    /// @param _token Token to be credited, use "0xeeee...." for ETH
    /// @param _amount Amount to be credited
    function withdrawFunds(
        address payable _receiver,
        address _token,
        uint256 _amount
    ) external nonReentrant {
        uint256 balance = userTokenBalance[msg.sender][_token];

        uint256 withdrawAmount = Math.min(balance, _amount);

        userTokenBalance[msg.sender][_token] = balance - withdrawAmount;

        _transfer(_receiver, _token, withdrawAmount);

        if (withdrawAmount == balance) _tokenCredits[msg.sender].remove(_token);

        emit FundsWithdrawn(_receiver, msg.sender, _token, withdrawAmount);
    }

    /// @notice Function called by whitelisted services to handle payments, e.g. PokeMe"
    /// @param _token Token to be used for payment by users
    /// @param _amount Amount to be deducted
    /// @param _user Address of user whose balance will be deducted
    function useFunds(
        address _token,
        uint256 _amount,
        address _user
    ) external onlyWhitelistedServices {
        if (maxFee != 0) require(maxFee >= _amount, "TaskTreasury: useFunds: Overchared" );
        userTokenBalance[_user][_token] =
            userTokenBalance[_user][_token] -
            _amount;

        if (userTokenBalance[_user][_token] == 0)
            _tokenCredits[_user].remove(_token);

        _transfer(gelato, _token, _amount);
    }

    // Governance functions

    /// @notice Add new service that can call useFunds. Gelato Governance
    /// @param _service New service to add
    function addWhitelistedService(address _service) external onlyOwner {
        require(
            !_whitelistedServices.contains(_service),
            "TaskTreasury: addWhitelistedService: whitelisted"
        );
        _whitelistedServices.add(_service);
    }

    /// @notice Remove old service that can call useFunds. Gelato Governance
    /// @param _service Old service to remove
    function removeWhitelistedService(address _service) external onlyOwner {
        require(
            _whitelistedServices.contains(_service),
            "TaskTreasury: addWhitelistedService: !whitelisted"
        );
        _whitelistedServices.remove(_service);
    }

    /// @notice Change maxFee charged by Gelato (only relevant on Layer2s)
    /// @param _newMaxFee New Max Fee to charge
    function setMaxFee(uint256 _newMaxFee) external onlyOwner {
        maxFee = _newMaxFee;
    }

    // View Funcs

    /// @notice Helper func to get all deposited tokens by a user
    /// @param _user User to get the balances from
    function getCreditTokensByUser(address _user)
        external
        view
        returns (address[] memory)
    {
        uint256 length = _tokenCredits[_user].length();
        address[] memory creditTokens = new address[](length);

        for (uint256 i; i < length; i++) {
            creditTokens[i] = _tokenCredits[_user].at(i);
        }
        return creditTokens;
    }

    function getWhitelistedServices() external view returns (address[] memory) {
        uint256 length = _whitelistedServices.length();
        address[] memory whitelistedServices = new address[](length);

        for (uint256 i; i < length; i++) {
            whitelistedServices[i] = _whitelistedServices.at(i);
        }
        return whitelistedServices;
    }

}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_gelato","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","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"},{"inputs":[{"internalType":"address","name":"_service","type":"address"}],"name":"addWhitelistedService","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositFunds","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"gelato","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getCreditTokensByUser","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelistedServices","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","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":"address","name":"_service","type":"address"}],"name":"removeWhitelistedService","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxFee","type":"uint256"}],"name":"setMaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"useFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_receiver","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b5060405162002a5138038062002a5183398181016040528101906200003791906200018e565b620000576200004b620000ab60201b60201c565b620000b360201b60201c565b600180819055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050670de0b6b3a76400006002819055505062000208565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000815190506200018881620001ee565b92915050565b600060208284031215620001a157600080fd5b6000620001b18482850162000177565b91505092915050565b6000620001c782620001ce565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620001f981620001ba565b81146200020557600080fd5b50565b60805160601c6128236200022e6000396000818161073f0152610b1a01526128236000f3fe6080604052600436106100dd5760003560e01c8063715018a61161007f578063b47064c811610059578063b47064c814610286578063c1461d57146102c3578063c63aa029146102df578063f2fde38b14610308576100dd565b8063715018a61461021b578063848f5f3d146102325780638da5cb5b1461025b576100dd565b8063573ea575116100bb578063573ea575146101735780635dfad06a1461019e5780636f192acc146101c9578063710e5d2f146101f2576100dd565b806301f59d16146100e25780631c20fadd1461010d5780632bf30a0e14610136575b600080fd5b3480156100ee57600080fd5b506100f7610331565b604051610104919061256b565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f9190611c61565b610337565b005b34801561014257600080fd5b5061015d60048036038101906101589190611c38565b610590565b60405161016a91906123c7565b60405180910390f35b34801561017f57600080fd5b5061018861073d565b604051610195919061234c565b60405180910390f35b3480156101aa57600080fd5b506101b3610761565b6040516101c091906123c7565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190611d3b565b610892565b005b3480156101fe57600080fd5b5061021960048036038101906102149190611db3565b610b45565b005b34801561022757600080fd5b50610230610bcb565b005b34801561023e57600080fd5b5061025960048036038101906102549190611c38565b610c53565b005b34801561026757600080fd5b50610270610d3a565b60405161027d9190612331565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190611cb0565b610d63565b6040516102ba919061256b565b60405180910390f35b6102dd60048036038101906102d89190611cec565b610d88565b005b3480156102eb57600080fd5b5061030660048036038101906103019190611c38565b611149565b005b34801561031457600080fd5b5061032f600480360381019061032a9190611c38565b611231565b005b60025481565b6002600154141561037d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103749061254b565b60405180910390fd5b60026001819055506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006104128284611329565b905080826104209190612647565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104ab858583611342565b818114156105065761050484600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061144d90919063ffffffff16565b505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fc322efa58c9cb2c39cfffdac61d35c8643f5cbf13c6a7d0034de2cf18923aff38460405161057a919061256b565b60405180910390a4505060018081905550505050565b606060006105db600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061147d565b905060008167ffffffffffffffff81111561061f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561064d5781602001602082028036833780820191505090505b50905060005b82811015610732576106ac81600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061149290919063ffffffff16565b8282815181106106e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061072a90612708565b915050610653565b508092505050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600061076f600561147d565b905060008167ffffffffffffffff8111156107b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156107e15781602001602082028036833780820191505090505b50905060005b828110156108895761080381600561149290919063ffffffff16565b82828151811061083c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061088190612708565b9150506107e7565b50809250505090565b6108a63360056114ac90919063ffffffff16565b6108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc9061250b565b60405180910390fd5b60006002541461093557816002541015610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092b9061244b565b60405180910390fd5b5b81600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109bd9190612647565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610b1557610b1383600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061144d90919063ffffffff16565b505b610b407f00000000000000000000000000000000000000000000000000000000000000008484611342565b505050565b610b4d6114dc565b73ffffffffffffffffffffffffffffffffffffffff16610b6b610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb8906124ab565b60405180910390fd5b8060028190555050565b610bd36114dc565b73ffffffffffffffffffffffffffffffffffffffff16610bf1610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e906124ab565b60405180910390fd5b610c5160006114e4565b565b610c5b6114dc565b73ffffffffffffffffffffffffffffffffffffffff16610c79610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc6906124ab565b60405180910390fd5b610ce38160056114ac90919063ffffffff16565b610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d199061242b565b60405180910390fd5b610d3681600561144d90919063ffffffff16565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003602052816000526040600020602052806000526040600020600091509150505481565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dda57349050610f38565b600083905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e1a9190612331565b60206040518083038186803b158015610e3257600080fd5b505afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a9190611ddc565b9050610e993330868573ffffffffffffffffffffffffffffffffffffffff166115a8909392919063ffffffff16565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ed49190612331565b60206040518083038186803b158015610eec57600080fd5b505afa158015610f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f249190611ddc565b90508181610f329190612647565b93505050505b80600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fc091906125f1565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061109183600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206114ac90919063ffffffff16565b6110e8576110e683600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061163190919063ffffffff16565b505b808373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff0d0e99cae184d0187b093b48894117462462379674a6e11d89c3fbb618e96b060405160405180910390a450505050565b6111516114dc565b73ffffffffffffffffffffffffffffffffffffffff1661116f610d3a565b73ffffffffffffffffffffffffffffffffffffffff16146111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc906124ab565b60405180910390fd5b6111d98160056114ac90919063ffffffff16565b15611219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611210906124cb565b60405180910390fd5b61122d81600561163190919063ffffffff16565b5050565b6112396114dc565b73ffffffffffffffffffffffffffffffffffffffff16611257610d3a565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a4906124ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113149061240b565b60405180910390fd5b611326816114e4565b50565b6000818310611338578161133a565b825b905092915050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561143c5760008373ffffffffffffffffffffffffffffffffffffffff16826040516113b09061231c565b60006040518083038185875af1925050503d80600081146113ed576040519150601f19603f3d011682016040523d82523d6000602084013e6113f2565b606091505b5050905080611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d9061248b565b60405180910390fd5b50611448565b611447828483611661565b5b505050565b6000611475836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6116e7565b905092915050565b600061148b8260000161186d565b9050919050565b60006114a1836000018361187e565b60001c905092915050565b60006114d4836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6118cf565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61162b846323b872dd60e01b8585856040516024016115c993929190612367565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118f2565b50505050565b6000611659836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6119b9565b905092915050565b6116e28363a9059cbb60e01b848460405160240161168092919061239e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118f2565b505050565b600080836001016000848152602001908152602001600020549050600081146118615760006001826117199190612647565b90506000600186600001805490506117319190612647565b90508181146117ec576000866000018281548110611778577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050808760000184815481106117c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480611826577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611867565b60009150505b92915050565b600081600001805490509050919050565b60008260000182815481106118bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000611954826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611a299092919063ffffffff16565b90506000815111156119b457808060200190518101906119749190611d8a565b6119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa9061252b565b60405180910390fd5b5b505050565b60006119c583836118cf565b611a1e578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611a23565b600090505b92915050565b6060611a388484600085611a41565b90509392505050565b606082471015611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d9061246b565b60405180910390fd5b611a8f85611b55565b611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac5906124eb565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611af79190612305565b60006040518083038185875af1925050503d8060008114611b34576040519150601f19603f3d011682016040523d82523d6000602084013e611b39565b606091505b5091509150611b49828286611b68565b92505050949350505050565b600080823b905060008111915050919050565b60608315611b7857829050611bc8565b600083511115611b8b5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf91906123e9565b60405180910390fd5b9392505050565b600081359050611bde81612791565b92915050565b600081359050611bf3816127a8565b92915050565b600081519050611c08816127bf565b92915050565b600081359050611c1d816127d6565b92915050565b600081519050611c32816127d6565b92915050565b600060208284031215611c4a57600080fd5b6000611c5884828501611bcf565b91505092915050565b600080600060608486031215611c7657600080fd5b6000611c8486828701611be4565b9350506020611c9586828701611bcf565b9250506040611ca686828701611c0e565b9150509250925092565b60008060408385031215611cc357600080fd5b6000611cd185828601611bcf565b9250506020611ce285828601611bcf565b9150509250929050565b600080600060608486031215611d0157600080fd5b6000611d0f86828701611bcf565b9350506020611d2086828701611bcf565b9250506040611d3186828701611c0e565b9150509250925092565b600080600060608486031215611d5057600080fd5b6000611d5e86828701611bcf565b9350506020611d6f86828701611c0e565b9250506040611d8086828701611bcf565b9150509250925092565b600060208284031215611d9c57600080fd5b6000611daa84828501611bf9565b91505092915050565b600060208284031215611dc557600080fd5b6000611dd384828501611c0e565b91505092915050565b600060208284031215611dee57600080fd5b6000611dfc84828501611c23565b91505092915050565b6000611e118383611e2c565b60208301905092915050565b611e268161268d565b82525050565b611e358161267b565b82525050565b611e448161267b565b82525050565b6000611e5582612596565b611e5f81856125c4565b9350611e6a83612586565b8060005b83811015611e9b578151611e828882611e05565b9750611e8d836125b7565b925050600181019050611e6e565b5085935050505092915050565b6000611eb3826125a1565b611ebd81856125d5565b9350611ecd8185602086016126d5565b80840191505092915050565b6000611ee4826125ac565b611eee81856125e0565b9350611efe8185602086016126d5565b611f0781612780565b840191505092915050565b6000611f1f6026836125e0565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611f856031836125e0565b91507f5461736b54726561737572793a2061646457686974656c69737465645365727660008301527f6963653a202177686974656c69737465640000000000000000000000000000006020830152604082019050919050565b6000611feb6022836125e0565b91507f5461736b54726561737572793a2075736546756e64733a204f7665726368617260008301527f65640000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120516026836125e0565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120b7601e836125e0565b91507f5f7472616e736665723a20455448207472616e73666572206661696c656400006000830152602082019050919050565b60006120f76020836125e0565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006121376030836125e0565b91507f5461736b54726561737572793a2061646457686974656c69737465645365727660008301527f6963653a2077686974656c6973746564000000000000000000000000000000006020830152604082019050919050565b600061219d6000836125d5565b9150600082019050919050565b60006121b7601d836125e0565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006121f76025836125e0565b91507f5461736b54726561737572793a206f6e6c7957686974656c697374656453657260008301527f76696365730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061225d602a836125e0565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006122c3601f836125e0565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6122ff816126cb565b82525050565b60006123118284611ea8565b915081905092915050565b600061232782612190565b9150819050919050565b60006020820190506123466000830184611e3b565b92915050565b60006020820190506123616000830184611e1d565b92915050565b600060608201905061237c6000830186611e3b565b6123896020830185611e3b565b61239660408301846122f6565b949350505050565b60006040820190506123b36000830185611e3b565b6123c060208301846122f6565b9392505050565b600060208201905081810360008301526123e18184611e4a565b905092915050565b600060208201905081810360008301526124038184611ed9565b905092915050565b6000602082019050818103600083015261242481611f12565b9050919050565b6000602082019050818103600083015261244481611f78565b9050919050565b6000602082019050818103600083015261246481611fde565b9050919050565b6000602082019050818103600083015261248481612044565b9050919050565b600060208201905081810360008301526124a4816120aa565b9050919050565b600060208201905081810360008301526124c4816120ea565b9050919050565b600060208201905081810360008301526124e48161212a565b9050919050565b60006020820190508181036000830152612504816121aa565b9050919050565b60006020820190508181036000830152612524816121ea565b9050919050565b6000602082019050818103600083015261254481612250565b9050919050565b60006020820190508181036000830152612564816122b6565b9050919050565b600060208201905061258060008301846122f6565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006125fc826126cb565b9150612607836126cb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561263c5761263b612751565b5b828201905092915050565b6000612652826126cb565b915061265d836126cb565b9250828210156126705761266f612751565b5b828203905092915050565b6000612686826126ab565b9050919050565b6000612698826126ab565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156126f35780820151818401526020810190506126d8565b83811115612702576000848401525b50505050565b6000612713826126cb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561274657612745612751565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000601f19601f8301169050919050565b61279a8161267b565b81146127a557600080fd5b50565b6127b18161268d565b81146127bc57600080fd5b50565b6127c88161269f565b81146127d357600080fd5b50565b6127df816126cb565b81146127ea57600080fd5b5056fea26469706673582212207742ed032f1d2199ebc1dfb381d39212ea87d48f52f862bff330e1d7cd52be3064736f6c634300080000330000000000000000000000007598e84b2e114ab62cab288ce5f7d5f6bad35bba

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

0000000000000000000000007598e84b2e114ab62cab288ce5f7d5f6bad35bba

-----Decoded View---------------
Arg [0] : _gelato (address): 0x7598e84b2e114ab62cab288ce5f7d5f6bad35bba

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007598e84b2e114ab62cab288ce5f7d5f6bad35bba


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.