[
    {
        "type": "constructor",
        "inputs": [
            { "name": "_usdc", "type": "address", "internalType": "address" },
            { "name": "_entryPoint", "type": "address", "internalType": "address" }
        ],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "allowContracts",
        "inputs": [
            {
                "name": "contractAddresses",
                "type": "address[]",
                "internalType": "address[]"
            },
            {
                "name": "shouldEnableAllowlist",
                "type": "bool",
                "internalType": "bool"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "allowedContracts",
        "inputs": [
            { "name": "user", "type": "address", "internalType": "address" },
            {
                "name": "contractAddress",
                "type": "address",
                "internalType": "address"
            }
        ],
        "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "disallowContracts",
        "inputs": [
            {
                "name": "contractAddresses",
                "type": "address[]",
                "internalType": "address[]"
            },
            {
                "name": "shouldEnableAllowlist",
                "type": "bool",
                "internalType": "bool"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "entryPoint",
        "inputs": [],
        "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "execute",
        "inputs": [
            { "name": "amount", "type": "uint256", "internalType": "uint256" },
            {
                "name": "ops",
                "type": "tuple[]",
                "internalType": "struct PackedUserOperation[]",
                "components": [
                    { "name": "sender", "type": "address", "internalType": "address" },
                    { "name": "nonce", "type": "uint256", "internalType": "uint256" },
                    { "name": "initCode", "type": "bytes", "internalType": "bytes" },
                    { "name": "callData", "type": "bytes", "internalType": "bytes" },
                    {
                        "name": "accountGasLimits",
                        "type": "bytes32",
                        "internalType": "bytes32"
                    },
                    {
                        "name": "preVerificationGas",
                        "type": "uint256",
                        "internalType": "uint256"
                    },
                    { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" },
                    {
                        "name": "paymasterAndData",
                        "type": "bytes",
                        "internalType": "bytes"
                    },
                    { "name": "signature", "type": "bytes", "internalType": "bytes" }
                ]
            },
            {
                "name": "beneficiary",
                "type": "address",
                "internalType": "address payable"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "executeWithPermit",
        "inputs": [
            {
                "name": "permit",
                "type": "tuple",
                "internalType": "struct IUSD1.Permit",
                "components": [
                    { "name": "owner", "type": "address", "internalType": "address" },
                    { "name": "spender", "type": "address", "internalType": "address" },
                    { "name": "value", "type": "uint256", "internalType": "uint256" },
                    { "name": "deadline", "type": "uint256", "internalType": "uint256" },
                    { "name": "v", "type": "uint8", "internalType": "uint8" },
                    { "name": "r", "type": "bytes32", "internalType": "bytes32" },
                    { "name": "s", "type": "bytes32", "internalType": "bytes32" }
                ]
            },
            {
                "name": "ops",
                "type": "tuple[]",
                "internalType": "struct PackedUserOperation[]",
                "components": [
                    { "name": "sender", "type": "address", "internalType": "address" },
                    { "name": "nonce", "type": "uint256", "internalType": "uint256" },
                    { "name": "initCode", "type": "bytes", "internalType": "bytes" },
                    { "name": "callData", "type": "bytes", "internalType": "bytes" },
                    {
                        "name": "accountGasLimits",
                        "type": "bytes32",
                        "internalType": "bytes32"
                    },
                    {
                        "name": "preVerificationGas",
                        "type": "uint256",
                        "internalType": "uint256"
                    },
                    { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" },
                    {
                        "name": "paymasterAndData",
                        "type": "bytes",
                        "internalType": "bytes"
                    },
                    { "name": "signature", "type": "bytes", "internalType": "bytes" }
                ]
            },
            {
                "name": "beneficiary",
                "type": "address",
                "internalType": "address payable"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "executed",
        "inputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
        "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "isAllowlistEnabled",
        "inputs": [
            { "name": "user", "type": "address", "internalType": "address" }
        ],
        "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "usdc",
        "inputs": [],
        "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
        "stateMutability": "view"
    },
    {
        "type": "event",
        "name": "ContractsAllowed",
        "inputs": [
            {
                "name": "user",
                "type": "address",
                "indexed": true,
                "internalType": "address"
            },
            {
                "name": "contractAddresses",
                "type": "address[]",
                "indexed": false,
                "internalType": "address[]"
            },
            {
                "name": "shouldEnableAllowlist",
                "type": "bool",
                "indexed": false,
                "internalType": "bool"
            }
        ],
        "anonymous": false
    },
    {
        "type": "event",
        "name": "ContractsDisallowed",
        "inputs": [
            {
                "name": "user",
                "type": "address",
                "indexed": true,
                "internalType": "address"
            },
            {
                "name": "contractAddresses",
                "type": "address[]",
                "indexed": false,
                "internalType": "address[]"
            },
            {
                "name": "shouldEnableAllowlist",
                "type": "bool",
                "indexed": false,
                "internalType": "bool"
            }
        ],
        "anonymous": false
    },
    {
        "type": "event",
        "name": "Executed",
        "inputs": [
            {
                "name": "id",
                "type": "bytes32",
                "indexed": false,
                "internalType": "bytes32"
            }
        ],
        "anonymous": false
    },
    { "type": "error", "name": "AlreadyExecuted", "inputs": [] },
    { "type": "error", "name": "ContractNotAllowed", "inputs": [] },
    { "type": "error", "name": "EmptyOps", "inputs": [] },
    { "type": "error", "name": "InvalidAmount", "inputs": [] },
    { "type": "error", "name": "OpSenderMismatch", "inputs": [] },
    {
        "type": "error",
        "name": "SafeERC20FailedOperation",
        "inputs": [
            { "name": "token", "type": "address", "internalType": "address" }
        ]
    },
    { "type": "error", "name": "UnsupportedToken", "inputs": [] }
]
