{
  "address": "0x4C416F12B4c24559A38d5A93940d4b98e0aEF4D7",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IOpsProxyFactory",
          "name": "_opsProxyFactory",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "execAddresses",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "nonce1Balance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_taskCreator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onCreateTask",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "opsProxyFactory",
      "outputs": [
        {
          "internalType": "contract IOpsProxyFactory",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "taskId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "taskCreator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "execAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "execData",
          "type": "bytes"
        }
      ],
      "name": "postExecCall",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_taskCreator",
          "type": "address"
        }
      ],
      "name": "preCancelTask",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_taskCreator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_execAddress",
          "type": "address"
        }
      ],
      "name": "preCreateTask",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_taskCreator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_execAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_execData",
          "type": "bytes"
        }
      ],
      "name": "preExecCall",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "execData",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "taskCreator",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum LibDataTypes.Module",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "taskModuleAddresses",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "timedTask",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "nextExec",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "interval",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "transactionHash": "0x8503fb9757beff3baf6ad674f64264c55c2242448b575fcfa414411e88122a91",
  "receipt": {
    "to": null,
    "from": "0xF1108379d71ff2A785899F4C36010f841F1Fea04",
    "contractAddress": "0x4C416F12B4c24559A38d5A93940d4b98e0aEF4D7",
    "transactionIndex": 0,
    "gasUsed": "1138710",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "blockHash": "0x8a1affe3d88eaaafb4b65ac5bf18c080efc39827d5addff0e36bb13d09f703c9",
    "transactionHash": "0x8503fb9757beff3baf6ad674f64264c55c2242448b575fcfa414411e88122a91",
    "logs": [],
    "blockNumber": 72616829,
    "cumulativeGasUsed": "1138710",
    "status": 1,
    "byzantium": true
  },
  "args": ["0x44bde1bccdD06119262f1fE441FBe7341EaaC185"],
  "numDeployments": 1,
  "solcInputHash": "8bbf75e674a7470c3c5715f3b28e416b",
  "metadata": "{\"compiler\":{\"version\":\"0.8.14+commit.80d49f37\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IOpsProxyFactory\",\"name\":\"_opsProxyFactory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"execAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nonce1Balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_taskCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onCreateTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"opsProxyFactory\",\"outputs\":[{\"internalType\":\"contract IOpsProxyFactory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"taskCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"execAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"execData\",\"type\":\"bytes\"}],\"name\":\"postExecCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_taskCreator\",\"type\":\"address\"}],\"name\":\"preCancelTask\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_taskCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_execAddress\",\"type\":\"address\"}],\"name\":\"preCreateTask\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_taskCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_execAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_execData\",\"type\":\"bytes\"}],\"name\":\"preExecCall\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"execData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"taskCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum LibDataTypes.Module\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"taskModuleAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"timedTask\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"nextExec\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"interval\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"onCreateTask(bytes32,address,address,bytes,bytes)\":{\"params\":{\"execAddress\":\"Address of contract that should be called.\",\"execData\":\"Execution data to be called with / function selector if execution data is yet to be determined.\",\"initModuleArg\":\"Encoded arguments for module if any.\",\"taskCreator\":\"The address which created the task.\",\"taskId\":\"Unique hash of the task created.\"}},\"postExecCall(bytes32,address,address,bytes)\":{\"params\":{\"execAddress\":\"Address of contract that should be called.\",\"execData\":\"Execution data to be called with / function selector if execution data is yet to be determined.\",\"taskCreator\":\"The address which created the task.\",\"taskId\":\"Unique hash of the task created.\"}},\"preCancelTask(bytes32,address)\":{\"details\":\"Modules can override taskCreator.\",\"params\":{\"taskCreator\":\"The address which created the task.\",\"taskId\":\"Unique hash of the task created.\"},\"returns\":{\"_0\":\"address Overriden or original taskCreator.\"}},\"preCreateTask(address,address)\":{\"details\":\"_taskCreator cannot create task to other user's proxy\",\"params\":{\"execAddress\":\"Address of contract that should be called.\",\"taskCreator\":\"The address which created the task.\"},\"returns\":{\"_0\":\"address Overriden or original taskCreator.\",\"_1\":\"address Overriden or original execAddress.\"}},\"preExecCall(bytes32,address,address,bytes)\":{\"details\":\"_execData is encoded with proxy's `executeCall` function unless _execAddress is OpsProxy which assumes that _execData is encoded with `executeCall` or `batchExecuteCall`.\",\"params\":{\"execAddress\":\"Address of contract that should be called.\",\"execData\":\"Execution data to be called with / function selector if execution data is yet to be determined.\",\"taskCreator\":\"The address which created the task.\",\"taskId\":\"Unique hash of the task created.\"},\"returns\":{\"_0\":\"address Overriden or original execution address.\",\"execData\":\"bytes Overriden or original execution data.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onCreateTask(bytes32,address,address,bytes,bytes)\":{\"notice\":\"Initiates task module whenever `createTask` is being called.\"},\"postExecCall(bytes32,address,address,bytes)\":{\"notice\":\"Called during `exec` and after execAddress is called.\"},\"preCancelTask(bytes32,address)\":{\"notice\":\"Called before taskId is removed from _createdTasks[].\"},\"preCreateTask(address,address)\":{\"notice\":\"Called before generating taskId.\"},\"preExecCall(bytes32,address,address,bytes)\":{\"notice\":\"Called during `exec` and before execAddress is called.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/taskModules/ProxyModule.sol\":\"ProxyModule\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/structs/EnumerableSet.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x9772845c886f87a3aab315f8d6b68aa599027c20f441b131cd4afaf65b588900\",\"license\":\"MIT\"},\"contracts/OpsStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.12;\\nimport {\\n    EnumerableSet\\n} from \\\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\\\";\\nimport {LibDataTypes} from \\\"./libraries/LibDataTypes.sol\\\";\\n\\n/**\\n * @notice Storage layout of Ops smart contract.\\n */\\n// solhint-disable max-states-count\\nabstract contract OpsStorage {\\n    mapping(bytes32 => address) public taskCreator; ///@dev Deprecated\\n    mapping(bytes32 => address) public execAddresses; ///@dev Deprecated\\n    mapping(address => EnumerableSet.Bytes32Set) internal _createdTasks;\\n\\n    uint256 public fee;\\n    address public feeToken;\\n\\n    ///@dev Appended State\\n    mapping(bytes32 => LibDataTypes.Time) public timedTask;\\n    mapping(LibDataTypes.Module => address) public taskModuleAddresses;\\n    mapping(bytes32 => uint256) public nonce1Balance;\\n}\\n\",\"keccak256\":\"0xd708fd7b13f54d07308ee9e76fbacc07a3f30ef316c987c172a84eb7ea33a121\",\"license\":\"UNLICENSED\"},\"contracts/interfaces/IOpsProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.12;\\n\\ninterface IOpsProxy {\\n    /**\\n     * @notice Emitted when proxy calls a contract successfully in `executeCall`\\n     *\\n     * @param target Address of contract that is called\\n     * @param data Data used in the call.\\n     * @param value Native token value used in the call.\\n     * @param returnData Data returned by the call.\\n     */\\n    event ExecuteCall(\\n        address indexed target,\\n        bytes data,\\n        uint256 value,\\n        bytes returnData\\n    );\\n\\n    /**\\n     * @notice Multicall to different contracts with different datas.\\n     *\\n     * @param targets Addresses of contracts to be called.\\n     * @param datas Datas for each contract call.\\n     * @param values Native token value for each contract call.\\n     */\\n    function batchExecuteCall(\\n        address[] calldata targets,\\n        bytes[] calldata datas,\\n        uint256[] calldata values\\n    ) external payable;\\n\\n    /**\\n     * @notice Call to a single contract.\\n     *\\n     * @param target Address of contracts to be called.\\n     * @param data Data for contract call.\\n     * @param value Native token value for contract call.\\n     */\\n    function executeCall(\\n        address target,\\n        bytes calldata data,\\n        uint256 value\\n    ) external payable;\\n\\n    /**\\n     * @return address Ops smart contract address\\n     */\\n    function ops() external view returns (address);\\n\\n    /**\\n     * @return address Owner of the proxy\\n     */\\n    function owner() external view returns (address);\\n\\n    /**\\n     * @return uint256 version of OpsProxy.\\n     */\\n    function version() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x1b6e349287dfeb2735da8d3f7ae0aa5865996f7dd58622773b449a76bcaf881a\",\"license\":\"MIT\"},\"contracts/interfaces/IOpsProxyFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.12;\\n\\ninterface IOpsProxyFactory {\\n    /**\\n     * @notice Emitted when an OpsProxy is deployed.\\n     *\\n     * @param deployer Address which initiated the deployment\\n     * @param owner The address which the proxy is for.\\n     * @param proxy Address of deployed proxy.\\n     */\\n    event DeployProxy(\\n        address indexed deployer,\\n        address indexed owner,\\n        address indexed proxy\\n    );\\n\\n    /**\\n     * @notice Emitted when OpsProxy implementation to be deployed is changed.\\n     *\\n     * @param oldImplementation Previous OpsProxy implementation.\\n     * @param newImplementation Current OpsProxy implementation.\\n     */\\n    event SetImplementation(\\n        address indexed oldImplementation,\\n        address indexed newImplementation\\n    );\\n\\n    /**\\n     * @notice Emitted when OpsProxy implementation is added or removed from whitelist.\\n     *\\n     * @param implementation OpsProxy implementation.\\n     * @param whitelisted Added or removed from whitelist.\\n     */\\n    event UpdateWhitelistedImplementation(\\n        address indexed implementation,\\n        bool indexed whitelisted\\n    );\\n\\n    /**\\n     * @notice Deploys OpsProxy for the msg.sender.\\n     *\\n     * @return proxy Address of deployed proxy.\\n     */\\n    function deploy() external returns (address payable proxy);\\n\\n    /**\\n     * @notice Deploys OpsProxy for another address.\\n     *\\n     * @param owner Address to deploy the proxy for.\\n     *\\n     * @return proxy Address of deployed proxy.\\n     */\\n    function deployFor(address owner) external returns (address payable proxy);\\n\\n    /**\\n     * @notice Sets the OpsProxy implementation that will be deployed by OpsProxyFactory.\\n     *\\n     * @param newImplementation New implementation to be set.\\n     */\\n    function setImplementation(address newImplementation) external;\\n\\n    /**\\n     * @notice Add or remove OpsProxy implementation from the whitelist.\\n     *\\n     * @param implementation OpsProxy implementation.\\n     * @param whitelist Added or removed from whitelist.\\n     */\\n    function updateWhitelistedImplementations(\\n        address implementation,\\n        bool whitelist\\n    ) external;\\n\\n    /**\\n     * @notice Determines the OpsProxy address when it is not deployed.\\n     *\\n     * @param account Address to determine the proxy address for.\\n     */\\n    function determineProxyAddress(address account)\\n        external\\n        view\\n        returns (address);\\n\\n    /**\\n     * @return address Proxy address owned by account.\\n     * @return bool Whether if proxy is deployed\\n     */\\n    function getProxyOf(address account) external view returns (address, bool);\\n\\n    /**\\n     * @return address Owner of deployed proxy.\\n     */\\n    function ownerOf(address proxy) external view returns (address);\\n\\n    /**\\n     * @return bool Whether if implementation is whitelisted.\\n     */\\n    function whitelistedImplementations(address implementation)\\n        external\\n        view\\n        returns (bool);\\n}\\n\",\"keccak256\":\"0xf4852a06be6f35a0671cf951f455fb9a58320c0908914c3ab9e62f9d27affe2b\",\"license\":\"MIT\"},\"contracts/interfaces/ITaskModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.12;\\n\\n// solhint-disable max-line-length\\ninterface ITaskModule {\\n    /**\\n     * @notice Called before generating taskId.\\n     * @dev Modules can override execAddress or taskCreator. {See ProxyModule-preCreateTask}\\n     *\\n     * @param taskCreator The address which created the task.\\n     * @param execAddress Address of contract that should be called.\\n     *\\n     * @return address Overriden or original taskCreator.\\n     * @return address Overriden or original execAddress.\\n     */\\n    function preCreateTask(address taskCreator, address execAddress)\\n        external\\n        returns (address, address);\\n\\n    /**\\n     * @notice Initiates task module whenever `createTask` is being called.\\n     *\\n     * @param taskId Unique hash of the task created.\\n     * @param taskCreator The address which created the task.\\n     * @param execAddress Address of contract that should be called.\\n     * @param execData Execution data to be called with / function selector if execution data is yet to be determined.\\n     * @param initModuleArg Encoded arguments for module if any.\\n     */\\n    function onCreateTask(\\n        bytes32 taskId,\\n        address taskCreator,\\n        address execAddress,\\n        bytes calldata execData,\\n        bytes calldata initModuleArg\\n    ) external;\\n\\n    /**\\n     * @notice Called before taskId is removed from _createdTasks[].\\n     * @dev Modules can override taskCreator.\\n     *\\n     * @param taskId Unique hash of the task created.\\n     * @param taskCreator The address which created the task.\\n     *\\n     * @return address Overriden or original taskCreator.\\n     */\\n    function preCancelTask(bytes32 taskId, address taskCreator)\\n        external\\n        returns (address);\\n\\n    /**\\n     * @notice Called during `exec` and before execAddress is called.\\n     *\\n     * @param taskId Unique hash of the task created.\\n     * @param taskCreator The address which created the task.\\n     * @param execAddress Address of contract that should be called.\\n     * @param execData Execution data to be called with / function selector if execution data is yet to be determined.\\n     *\\n     * @return address Overriden or original execution address.\\n     * @return bytes Overriden or original execution data.\\n     */\\n    function preExecCall(\\n        bytes32 taskId,\\n        address taskCreator,\\n        address execAddress,\\n        bytes calldata execData\\n    ) external returns (address, bytes memory);\\n\\n    /**\\n     * @notice Called during `exec` and after execAddress is called.\\n     *\\n     * @param taskId Unique hash of the task created.\\n     * @param taskCreator The address which created the task.\\n     * @param execAddress Address of contract that should be called.\\n     * @param execData Execution data to be called with / function selector if execution data is yet to be determined.\\n     */\\n    function postExecCall(\\n        bytes32 taskId,\\n        address taskCreator,\\n        address execAddress,\\n        bytes calldata execData\\n    ) external;\\n}\\n\",\"keccak256\":\"0xd537257852c23ce7d0bc392b03aba1efd750be372d64a01edf1c726ef7c4274d\",\"license\":\"MIT\"},\"contracts/libraries/LibDataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.12;\\n\\n// solhint-disable max-line-length\\nlibrary LibDataTypes {\\n    /**\\n     * @notice Whitelisted modules that are available for users to customise conditions and specifications of their tasks.\\n     *\\n     * @param RESOLVER Use dynamic condition & input data for execution. {See ResolverModule.sol}\\n     * @param TIME Repeated execution of task at a specified timing and interval. {See TimeModule.sol}\\n     * @param PROXY Creates a dedicated caller (msg.sender) to be used when executing the task. {See ProxyModule.sol}\\n     * @param SINGLE_EXEC Task is cancelled after one execution. {See SingleExecModule.sol}\\n     * @param WEB3_FUNCTION Use off-chain condition & input data for execution. {See Web3FunctionModule.sol}\\n     */\\n    enum Module {\\n        RESOLVER,\\n        TIME,\\n        PROXY,\\n        SINGLE_EXEC,\\n        WEB3_FUNCTION\\n    }\\n\\n    /**\\n     * @notice Struct to contain modules and their relative arguments that are used for task creation.\\n     *\\n     * @param modules List of selected modules.\\n     * @param args Arguments of modules if any. Pass \\\"0x\\\" for modules which does not require args {See encodeModuleArg}\\n     */\\n    struct ModuleData {\\n        Module[] modules;\\n        bytes[] args;\\n    }\\n\\n    /**\\n     * @notice Struct for time module.\\n     *\\n     * @param nextExec Time when the next execution should occur.\\n     * @param interval Time interval between each execution.\\n     */\\n    struct Time {\\n        uint128 nextExec;\\n        uint128 interval;\\n    }\\n}\\n\",\"keccak256\":\"0x5876a9713daf67a36768b25454b3317c015e46db2abf77820dee2845fac55ee0\",\"license\":\"MIT\"},\"contracts/taskModules/ProxyModule.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.12;\\n\\nimport {TaskModuleBase} from \\\"./TaskModuleBase.sol\\\";\\nimport {IOpsProxy} from \\\"../interfaces/IOpsProxy.sol\\\";\\nimport {IOpsProxyFactory} from \\\"../interfaces/IOpsProxyFactory.sol\\\";\\n\\ncontract ProxyModule is TaskModuleBase {\\n    IOpsProxyFactory public immutable opsProxyFactory;\\n\\n    constructor(IOpsProxyFactory _opsProxyFactory) {\\n        opsProxyFactory = _opsProxyFactory;\\n    }\\n\\n    /**\\n     * @inheritdoc TaskModuleBase\\n     */\\n    function onCreateTask(\\n        bytes32,\\n        address _taskCreator,\\n        address,\\n        bytes calldata,\\n        bytes calldata\\n    ) external override {\\n        _deployIfNoProxy(_taskCreator);\\n    }\\n\\n    /**\\n     * @inheritdoc TaskModuleBase\\n     * @dev _taskCreator cannot create task to other user's proxy\\n     */\\n    function preCreateTask(address _taskCreator, address _execAddress)\\n        external\\n        view\\n        override\\n        returns (address, address)\\n    {\\n        address ownerOfExecAddress = opsProxyFactory.ownerOf(_execAddress);\\n\\n        if (ownerOfExecAddress != address(0)) {\\n            // creating task to proxy\\n            require(\\n                _taskCreator == ownerOfExecAddress ||\\n                    _taskCreator == _execAddress,\\n                \\\"ProxyModule: Only owner of proxy\\\"\\n            );\\n\\n            return (ownerOfExecAddress, _execAddress);\\n        } else {\\n            address ownerOfTaskCreator = opsProxyFactory.ownerOf(_taskCreator);\\n\\n            if (ownerOfTaskCreator != address(0)) {\\n                // creating task to non proxy, with proxy\\n                // give task ownership to proxy owner\\n                return (ownerOfTaskCreator, _execAddress);\\n            }\\n\\n            // creating task to non proxy, without proxy\\n            return (_taskCreator, _execAddress);\\n        }\\n    }\\n\\n    function preCancelTask(bytes32, address _taskCreator)\\n        external\\n        view\\n        override\\n        returns (address)\\n    {\\n        address ownerOfTaskCreator = opsProxyFactory.ownerOf(_taskCreator);\\n\\n        if (ownerOfTaskCreator != address(0)) {\\n            return ownerOfTaskCreator;\\n        }\\n\\n        return _taskCreator;\\n    }\\n\\n    /**\\n     * @inheritdoc TaskModuleBase\\n     * @dev _execData is encoded with proxy's `executeCall` function\\n     * unless _execAddress is OpsProxy which assumes that _execData is encoded\\n     * with `executeCall` or `batchExecuteCall`.\\n     */\\n    function preExecCall(\\n        bytes32,\\n        address _taskCreator,\\n        address _execAddress,\\n        bytes calldata _execData\\n    ) external view override returns (address, bytes memory execData) {\\n        (address proxy, ) = opsProxyFactory.getProxyOf(_taskCreator);\\n\\n        execData = _execAddress == proxy\\n            ? _execData\\n            : _encodeWithOpsProxy(_execAddress, _execData);\\n\\n        _execAddress = proxy;\\n\\n        return (_execAddress, execData);\\n    }\\n\\n    function _deployIfNoProxy(address _taskCreator) private {\\n        bool isTaskCreatorProxy = opsProxyFactory.ownerOf(_taskCreator) !=\\n            address(0);\\n\\n        if (!isTaskCreatorProxy) {\\n            (, bool deployed) = opsProxyFactory.getProxyOf(_taskCreator);\\n            if (!deployed) opsProxyFactory.deployFor(_taskCreator);\\n        }\\n    }\\n\\n    function _encodeWithOpsProxy(address _execAddress, bytes calldata _execData)\\n        private\\n        pure\\n        returns (bytes memory)\\n    {\\n        return\\n            abi.encodeWithSelector(\\n                IOpsProxy.executeCall.selector,\\n                _execAddress,\\n                _execData,\\n                0\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0xe681a040fb7054876217145013a02ba86e73aaf06ec69940a0a7ce80a9c6a657\",\"license\":\"UNLICENSED\"},\"contracts/taskModules/TaskModuleBase.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.12;\\n\\nimport {OpsStorage} from \\\"../OpsStorage.sol\\\";\\nimport {ITaskModule} from \\\"../interfaces/ITaskModule.sol\\\";\\n\\n// solhint-disable no-empty-blocks\\nabstract contract TaskModuleBase is OpsStorage, ITaskModule {\\n    ///@inheritdoc ITaskModule\\n    function preCreateTask(address _taskCreator, address _execAddress)\\n        external\\n        virtual\\n        override\\n        returns (address, address)\\n    {\\n        return (_taskCreator, _execAddress);\\n    }\\n\\n    ///@inheritdoc ITaskModule\\n    function onCreateTask(\\n        bytes32,\\n        address,\\n        address,\\n        bytes calldata,\\n        bytes calldata\\n    ) external virtual override {}\\n\\n    ///@inheritdoc ITaskModule\\n    function preCancelTask(bytes32, address _taskCreator)\\n        external\\n        virtual\\n        override\\n        returns (address)\\n    {\\n        return _taskCreator;\\n    }\\n\\n    ///@inheritdoc ITaskModule\\n    function preExecCall(\\n        bytes32,\\n        address,\\n        address _execAddress,\\n        bytes calldata _execData\\n    ) external virtual override returns (address, bytes memory) {\\n        return (_execAddress, _execData);\\n    }\\n\\n    ///@inheritdoc ITaskModule\\n    function postExecCall(\\n        bytes32 taskId,\\n        address taskCreator,\\n        address execAddress,\\n        bytes calldata execData\\n    ) external virtual override {}\\n}\\n\",\"keccak256\":\"0x1e6d8e0779844997da48d4deeadb7b25e352d7ec96de1726229902167befd457\",\"license\":\"UNLICENSED\"}},\"version\":1}",
  "bytecode": "[encoded data, 10770 characters]",
  "deployedBytecode": "[encoded data, 10036 characters]",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "onCreateTask(bytes32,address,address,bytes,bytes)": {
        "params": {
          "execAddress": "Address of contract that should be called.",
          "execData": "Execution data to be called with / function selector if execution data is yet to be determined.",
          "initModuleArg": "Encoded arguments for module if any.",
          "taskCreator": "The address which created the task.",
          "taskId": "Unique hash of the task created."
        }
      },
      "postExecCall(bytes32,address,address,bytes)": {
        "params": {
          "execAddress": "Address of contract that should be called.",
          "execData": "Execution data to be called with / function selector if execution data is yet to be determined.",
          "taskCreator": "The address which created the task.",
          "taskId": "Unique hash of the task created."
        }
      },
      "preCancelTask(bytes32,address)": {
        "details": "Modules can override taskCreator.",
        "params": {
          "taskCreator": "The address which created the task.",
          "taskId": "Unique hash of the task created."
        },
        "returns": {
          "_0": "address Overriden or original taskCreator."
        }
      },
      "preCreateTask(address,address)": {
        "details": "_taskCreator cannot create task to other user's proxy",
        "params": {
          "execAddress": "Address of contract that should be called.",
          "taskCreator": "The address which created the task."
        },
        "returns": {
          "_0": "address Overriden or original taskCreator.",
          "_1": "address Overriden or original execAddress."
        }
      },
      "preExecCall(bytes32,address,address,bytes)": {
        "details": "_execData is encoded with proxy's `executeCall` function unless _execAddress is OpsProxy which assumes that _execData is encoded with `executeCall` or `batchExecuteCall`.",
        "params": {
          "execAddress": "Address of contract that should be called.",
          "execData": "Execution data to be called with / function selector if execution data is yet to be determined.",
          "taskCreator": "The address which created the task.",
          "taskId": "Unique hash of the task created."
        },
        "returns": {
          "_0": "address Overriden or original execution address.",
          "execData": "bytes Overriden or original execution data."
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "onCreateTask(bytes32,address,address,bytes,bytes)": {
        "notice": "Initiates task module whenever `createTask` is being called."
      },
      "postExecCall(bytes32,address,address,bytes)": {
        "notice": "Called during `exec` and after execAddress is called."
      },
      "preCancelTask(bytes32,address)": {
        "notice": "Called before taskId is removed from _createdTasks[]."
      },
      "preCreateTask(address,address)": {
        "notice": "Called before generating taskId."
      },
      "preExecCall(bytes32,address,address,bytes)": {
        "notice": "Called during `exec` and before execAddress is called."
      }
    },
    "version": 1
  },
  "storageLayout": {
    "storage": [
      {
        "astId": 2472,
        "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
        "label": "taskCreator",
        "offset": 0,
        "slot": "0",
        "type": "t_mapping(t_bytes32,t_address)"
      },
      {
        "astId": 2477,
        "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
        "label": "execAddresses",
        "offset": 0,
        "slot": "1",
        "type": "t_mapping(t_bytes32,t_address)"
      },
      {
        "astId": 2483,
        "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
        "label": "_createdTasks",
        "offset": 0,
        "slot": "2",
        "type": "t_mapping(t_address,t_struct(Bytes32Set)1433_storage)"
      },
      {
        "astId": 2485,
        "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
        "label": "fee",
        "offset": 0,
        "slot": "3",
        "type": "t_uint256"
      },
      {
        "astId": 2487,
        "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
        "label": "feeToken",
        "offset": 0,
        "slot": "4",
        "type": "t_address"
      },
      {
        "astId": 2493,
        "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
        "label": "timedTask",
        "offset": 0,
        "slot": "5",
        "type": "t_mapping(t_bytes32,t_struct(Time)5164_storage)"
      },
      {
        "astId": 2498,
        "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
        "label": "taskModuleAddresses",
        "offset": 0,
        "slot": "6",
        "type": "t_mapping(t_enum(Module)5151,t_address)"
      },
      {
        "astId": 2502,
        "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
        "label": "nonce1Balance",
        "offset": 0,
        "slot": "7",
        "type": "t_mapping(t_bytes32,t_uint256)"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_array(t_bytes32)dyn_storage": {
        "base": "t_bytes32",
        "encoding": "dynamic_array",
        "label": "bytes32[]",
        "numberOfBytes": "32"
      },
      "t_bytes32": {
        "encoding": "inplace",
        "label": "bytes32",
        "numberOfBytes": "32"
      },
      "t_enum(Module)5151": {
        "encoding": "inplace",
        "label": "enum LibDataTypes.Module",
        "numberOfBytes": "1"
      },
      "t_mapping(t_address,t_struct(Bytes32Set)1433_storage)": {
        "encoding": "mapping",
        "key": "t_address",
        "label": "mapping(address => struct EnumerableSet.Bytes32Set)",
        "numberOfBytes": "32",
        "value": "t_struct(Bytes32Set)1433_storage"
      },
      "t_mapping(t_bytes32,t_address)": {
        "encoding": "mapping",
        "key": "t_bytes32",
        "label": "mapping(bytes32 => address)",
        "numberOfBytes": "32",
        "value": "t_address"
      },
      "t_mapping(t_bytes32,t_struct(Time)5164_storage)": {
        "encoding": "mapping",
        "key": "t_bytes32",
        "label": "mapping(bytes32 => struct LibDataTypes.Time)",
        "numberOfBytes": "32",
        "value": "t_struct(Time)5164_storage"
      },
      "t_mapping(t_bytes32,t_uint256)": {
        "encoding": "mapping",
        "key": "t_bytes32",
        "label": "mapping(bytes32 => uint256)",
        "numberOfBytes": "32",
        "value": "t_uint256"
      },
      "t_mapping(t_enum(Module)5151,t_address)": {
        "encoding": "mapping",
        "key": "t_enum(Module)5151",
        "label": "mapping(enum LibDataTypes.Module => address)",
        "numberOfBytes": "32",
        "value": "t_address"
      },
      "t_struct(Bytes32Set)1433_storage": {
        "encoding": "inplace",
        "label": "struct EnumerableSet.Bytes32Set",
        "members": [
          {
            "astId": 1432,
            "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
            "label": "_inner",
            "offset": 0,
            "slot": "0",
            "type": "t_struct(Set)1239_storage"
          }
        ],
        "numberOfBytes": "64"
      },
      "t_struct(Set)1239_storage": {
        "encoding": "inplace",
        "label": "struct EnumerableSet.Set",
        "members": [
          {
            "astId": 1234,
            "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
            "label": "_values",
            "offset": 0,
            "slot": "0",
            "type": "t_array(t_bytes32)dyn_storage"
          },
          {
            "astId": 1238,
            "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
            "label": "_indexes",
            "offset": 0,
            "slot": "1",
            "type": "t_mapping(t_bytes32,t_uint256)"
          }
        ],
        "numberOfBytes": "64"
      },
      "t_struct(Time)5164_storage": {
        "encoding": "inplace",
        "label": "struct LibDataTypes.Time",
        "members": [
          {
            "astId": 5161,
            "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
            "label": "nextExec",
            "offset": 0,
            "slot": "0",
            "type": "t_uint128"
          },
          {
            "astId": 5163,
            "contract": "contracts/taskModules/ProxyModule.sol:ProxyModule",
            "label": "interval",
            "offset": 16,
            "slot": "0",
            "type": "t_uint128"
          }
        ],
        "numberOfBytes": "32"
      },
      "t_uint128": {
        "encoding": "inplace",
        "label": "uint128",
        "numberOfBytes": "16"
      },
      "t_uint256": {
        "encoding": "inplace",
        "label": "uint256",
        "numberOfBytes": "32"
      }
    }
  }
}
