{
  "_format": "hh-sol-artifact-1",
  "contractName": "TokenRecoveryMock",
  "sourceName": "contracts/mocks/security/TokenRecoveryMock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "name": "forwarderRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IllegalInterfaceId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InconsistentArrayLengths",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenContract",
          "type": "address"
        }
      ],
      "name": "IncorrectTokenContractType",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotContractOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "__msgData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "forwarderRegistry",
      "outputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC20s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC721[]",
          "name": "contracts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC721s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60a03461013f57601f61107838819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261013f57516001600160a01b038116810361013f57336100e0575b6307f5828d60e41b6000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d6020527fa53d5a615b1d5279f1a6647c5c0f31bf064b1e70af135676a4a96aeaeb691a2f805460ff19166001179055608052604051610f1d908161015b823960805181818161096101528181610ac601528181610c8d0152610dd30152f35b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc80546001600160a01b0319163390811790915560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3610055565b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806301ffc9a7146109855780632b4c9f161461091657806331e66e1e14610893578063572b6c051461082f57806373c8a958146106ac5780638da5cb5b1461063b578063c3666c36146103f2578063f2fde38b146102fe5763f7ba94bd0361000e57346102a25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a25760043567ffffffffffffffff81116102a2576100d29036906004016109eb565b60243567ffffffffffffffff81116102a2576100f29036906004016109eb565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610133610dbc565b92541691169081036102d157508181036102a75760005b81811061015357005b61015e818387610bbd565b3573ffffffffffffffffffffffffffffffffffffffff81168091036102a257610188828587610bbd565b359081471061027057600080809381935af13d15610268573d9067ffffffffffffffff821161023957604051916101e760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610c1d565b82523d6000602084013e5b15610200575060010161014a565b80511561020f57602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060906101f2565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a25760043573ffffffffffffffffffffffffffffffffffffffff81168091036102a2577fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc610377610dbc565b90805473ffffffffffffffffffffffffffffffffffffffff80821693168381036102d157508383036103a557005b7fffffffffffffffffffffffff000000000000000000000000000000000000000016831790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b346102a25761040036610a1c565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610445610dbc565b92541691169081036102d15750808214801590610631575b6102a75760005b82811061046d57005b73ffffffffffffffffffffffffffffffffffffffff61049561049083858a610bbd565b610bfc565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa9081156105ca57600091610603575b50156105d6575073ffffffffffffffffffffffffffffffffffffffff61052461049083858a610bbd565b1690610534610490828689610bbd565b9161054082878b610bbd565b3592813b156102a257606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af19182156105ca576001926105b9575b5001610464565b60006105c491610c1d565b886105b2565b6040513d6000823e3d90fd5b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610624915060203d811161062a575b61061c8183610c1d565b810190610c5e565b896104fa565b503d610612565b508282141561045d565b346102a25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a257602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b346102a2576106ba36610a1c565b949293917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806106fd610dbc565b92541691169081036102d15750808314801590610825575b6102a75760005b83811061072557005b610730818388610bbd565b3573ffffffffffffffffffffffffffffffffffffffff8116908181036102a25760006020918a826107718761076a610490828f8f90610bbd565b938b610bbd565b356040519073ffffffffffffffffffffffffffffffffffffffff878301947fa9059cbb0000000000000000000000000000000000000000000000000000000086521660248301526044820152604481526107cc606482610c1d565b51925af1156105ca576000513d61081c5750803b155b6107ef575060010161071c565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b600114156107e2565b5085831415610715565b346102a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a25760043573ffffffffffffffffffffffffffffffffffffffff811681036102a257610889602091610aaf565b6040519015158152f35b346102a25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a25760406108cc610c76565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8484519586946020865281602087015286860137600085828601015201168101030190f35b346102a25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a2576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036102a257610889602091610b0e565b9181601f840112156102a25782359167ffffffffffffffff83116102a2576020808501948460051b0101116102a257565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102a25760043567ffffffffffffffff81116102a25781610a65916004016109eb565b9290929160243567ffffffffffffffff81116102a25781610a88916004016109eb565b929092916044359067ffffffffffffffff82116102a257610aab916004016109eb565b9091565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908115610b075773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114610bb7577f01ffc9a7000000000000000000000000000000000000000000000000000000008114610bb1576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b9190811015610bcd5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff811681036102a25790565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761023957604052565b908160209103126102a2575180151581036102a25790565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015610daa573233148015610db2575b610daa57803314908115610d09575b50610cd8576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3601903682116102a25760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa9081156105ca57600091610d8b575b5038610ccc565b610da4915060203d60201161062a5761061c8183610c1d565b38610d84565b506000903690565b5060183610610cbd565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015610ed8573233148015610edd575b610ed8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90803314908115610e47575b50610e4457503390565b90565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa9081156105ca57600091610eb9575b5038610e3a565b610ed2915060203d60201161062a5761061c8183610c1d565b38610eb2565b503390565b5060183610610e0356fea264697066735822122046f8728af92e416f9a00add1d1c2023f2ecf29138cb8c1b212c17f20696acfe764736f6c634300081e0033",
  "deployedBytecode": "0x6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806301ffc9a7146109855780632b4c9f161461091657806331e66e1e14610893578063572b6c051461082f57806373c8a958146106ac5780638da5cb5b1461063b578063c3666c36146103f2578063f2fde38b146102fe5763f7ba94bd0361000e57346102a25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a25760043567ffffffffffffffff81116102a2576100d29036906004016109eb565b60243567ffffffffffffffff81116102a2576100f29036906004016109eb565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610133610dbc565b92541691169081036102d157508181036102a75760005b81811061015357005b61015e818387610bbd565b3573ffffffffffffffffffffffffffffffffffffffff81168091036102a257610188828587610bbd565b359081471061027057600080809381935af13d15610268573d9067ffffffffffffffff821161023957604051916101e760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610c1d565b82523d6000602084013e5b15610200575060010161014a565b80511561020f57602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060906101f2565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a25760043573ffffffffffffffffffffffffffffffffffffffff81168091036102a2577fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc610377610dbc565b90805473ffffffffffffffffffffffffffffffffffffffff80821693168381036102d157508383036103a557005b7fffffffffffffffffffffffff000000000000000000000000000000000000000016831790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b346102a25761040036610a1c565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610445610dbc565b92541691169081036102d15750808214801590610631575b6102a75760005b82811061046d57005b73ffffffffffffffffffffffffffffffffffffffff61049561049083858a610bbd565b610bfc565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa9081156105ca57600091610603575b50156105d6575073ffffffffffffffffffffffffffffffffffffffff61052461049083858a610bbd565b1690610534610490828689610bbd565b9161054082878b610bbd565b3592813b156102a257606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af19182156105ca576001926105b9575b5001610464565b60006105c491610c1d565b886105b2565b6040513d6000823e3d90fd5b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610624915060203d811161062a575b61061c8183610c1d565b810190610c5e565b896104fa565b503d610612565b508282141561045d565b346102a25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a257602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b346102a2576106ba36610a1c565b949293917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806106fd610dbc565b92541691169081036102d15750808314801590610825575b6102a75760005b83811061072557005b610730818388610bbd565b3573ffffffffffffffffffffffffffffffffffffffff8116908181036102a25760006020918a826107718761076a610490828f8f90610bbd565b938b610bbd565b356040519073ffffffffffffffffffffffffffffffffffffffff878301947fa9059cbb0000000000000000000000000000000000000000000000000000000086521660248301526044820152604481526107cc606482610c1d565b51925af1156105ca576000513d61081c5750803b155b6107ef575060010161071c565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b600114156107e2565b5085831415610715565b346102a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a25760043573ffffffffffffffffffffffffffffffffffffffff811681036102a257610889602091610aaf565b6040519015158152f35b346102a25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a25760406108cc610c76565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8484519586946020865281602087015286860137600085828601015201168101030190f35b346102a25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a2576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036102a257610889602091610b0e565b9181601f840112156102a25782359167ffffffffffffffff83116102a2576020808501948460051b0101116102a257565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102a25760043567ffffffffffffffff81116102a25781610a65916004016109eb565b9290929160243567ffffffffffffffff81116102a25781610a88916004016109eb565b929092916044359067ffffffffffffffff82116102a257610aab916004016109eb565b9091565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908115610b075773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114610bb7577f01ffc9a7000000000000000000000000000000000000000000000000000000008114610bb1576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b9190811015610bcd5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff811681036102a25790565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761023957604052565b908160209103126102a2575180151581036102a25790565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015610daa573233148015610db2575b610daa57803314908115610d09575b50610cd8576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3601903682116102a25760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa9081156105ca57600091610d8b575b5038610ccc565b610da4915060203d60201161062a5761061c8183610c1d565b38610d84565b506000903690565b5060183610610cbd565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015610ed8573233148015610edd575b610ed8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90803314908115610e47575b50610e4457503390565b90565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa9081156105ca57600091610eb9575b5038610e3a565b610ed2915060203d60201161062a5761061c8183610c1d565b38610eb2565b503390565b5060183610610e0356fea264697066735822122046f8728af92e416f9a00add1d1c2023f2ecf29138cb8c1b212c17f20696acfe764736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
