{
    "contractName": "Penalizer",
    "abi": [
        {
            "inputs": [],
            "name": "versionPenalizer",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "unsignedTx1",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "signature1",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "unsignedTx2",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "signature2",
                    "type": "bytes"
                },
                {
                    "internalType": "contract IRelayHub",
                    "name": "hub",
                    "type": "address"
                }
            ],
            "name": "penalizeRepeatedNonce",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "unsignedTx",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "signature",
                    "type": "bytes"
                },
                {
                    "internalType": "contract IRelayHub",
                    "name": "hub",
                    "type": "address"
                }
            ],
            "name": "penalizeIllegalTransaction",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"unsignedTx\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"contract IRelayHub\",\"name\":\"hub\",\"type\":\"address\"}],\"name\":\"penalizeIllegalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"unsignedTx1\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature1\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"unsignedTx2\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature2\",\"type\":\"bytes\"},{\"internalType\":\"contract IRelayHub\",\"name\":\"hub\",\"type\":\"address\"}],\"name\":\"penalizeRepeatedNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionPenalizer\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/dror/IdeaProjects/gsn/contracts/Penalizer.sol\":\"Penalizer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/dror/IdeaProjects/gsn/contracts/Penalizer.sol\":{\"keccak256\":\"0x22e0b7dcf1334c548255fde28f5eb2ef9ebf8ceefa24a9f295ed039ffc7c1868\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4824caa99e261bc4611e360196cf3f26ab1a6790fe8c74266d07516b92acf09d\",\"dweb:/ipfs/QmRyPu45zKmYAiKcK6xHY3BCXSL1AiLkikZeepg1FNT5dA\"]},\"/Users/dror/IdeaProjects/gsn/contracts/forwarder/IForwarder.sol\":{\"keccak256\":\"0x253fd0f17ff0a73a96d83570b9d6bdc027b64e3ff0aca19d6c0b621bd5156aee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd3169e07849f996eb281bf4700cea430e45eda54a80169f0a360362cc2a8e84\",\"dweb:/ipfs/QmXa1x3UpA9tAa26Fwf4b4MkVqeEfEFgDPhNfRMtwJuoms\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/GsnTypes.sol\":{\"keccak256\":\"0xedcb9a8dfeed8c622844c604c5ebdb3a9fb92f859a1530b9327fb85476206062\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5fba2e08a6793d60d41c49c817a8837f7fdec6706950e804f79bac0a88b9bad0\",\"dweb:/ipfs/QmPnrUNzGvshVLrSmgBN4kB2Z2NXTzCyWuegjHo15292uD\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IPenalizer.sol\":{\"keccak256\":\"0xc6ec80c3d450957fc53cec0b90ce71b944a3ddcfb4bb042a9466896555b2088b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af7bb36c0c66d939a0bf87a0badceefa1d2d803fa8de399e49fd8ef6ad652951\",\"dweb:/ipfs/Qmf5mTwDyWYhuWK1GgeKaH4JCtQJFqsRnUSxn1nGV6bYKQ\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IRelayHub.sol\":{\"keccak256\":\"0xea80327e2ca933cc697857c5546702c56ad84c4a3ffd92c7a90c980eedf4f79e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ebdd033b54c1e4701be43e0c12ca163564304c498eab2097d0326cb645ea81c\",\"dweb:/ipfs/QmWVLAaDmqAiB2EADZBuVojgzjYfX2gYk2o7wBqHm42Tpr\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IStakeManager.sol\":{\"keccak256\":\"0xef5e2a00a9aa741faa94cf828dc060b05566dc87e32f2b41577e7d3a97f2cd8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99cc978b676db13da12ef5da9cc509715c3f24896b98cbac1af0f9d2d0ede554\",\"dweb:/ipfs/QmWBxE1Uxru5j26xBJ9tFzivCtdy5Fe6mZuC8mgLsmubyX\"]},\"/Users/dror/IdeaProjects/gsn/contracts/utils/GsnUtils.sol\":{\"keccak256\":\"0x8f13a7751fe2d62056aafcd2492bac22defb01f05aee34e6b7827db66c6578ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28710b609b3066f482cdcbedd4f14255f4363b89dc6052d8da78ecfab4ef1681\",\"dweb:/ipfs/QmU7v21Qtm1wppx16nxdoh3VMSoaK66vyFYMezMXEZ15Db\"]},\"/Users/dror/IdeaProjects/gsn/contracts/utils/MinLibBytes.sol\":{\"keccak256\":\"0x96c2ad0c80e0db9a849d8f8c9ea865dface3b11983435fcfbd02cd05037293f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://643018a775e0d9df91ac9d28c9b5afc586f322eb14cb4cb9bcb0154a9bbf14e6\",\"dweb:/ipfs/QmPTAEP4VminSwttSwhvT2svenkLkjKsRtXiLpLAPc6ajC\"]},\"/Users/dror/IdeaProjects/gsn/contracts/utils/RLPReader.sol\":{\"keccak256\":\"0xefb73dcf656d263b8ebbeb5814eee9f0d6b483ae664fc89718d36fcf3009f699\",\"license\":\"APACHE-2.0\",\"urls\":[\"bzz-raw://960179857ce1b0fa0dbbdecbb2ac2d0425e247ba446e4fa8ba70f9eed73913e2\",\"dweb:/ipfs/QmQPy1pNZ5rJwsBC5M4GJ6o51mDaLr872zAEvUtmtgoi6m\"]},\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0x1efcb1ccef6b3bce65467c4b704cec8d0582e35ff48352269ba8cda4b54ae3da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f40d4c72c7f8dfdfb9fd048de5d3ece0020dfcd057b29f0630fd703e7fbe7301\",\"dweb:/ipfs/QmSw7Q9JVVbVDWwVbaJjHhkPmTm8GF3nwVTZUfnmPqTdNm\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5\",\"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV\"]}},\"version\":1}",
    "bytecode": "0x60e060405260226080818152906200134460a039805162000029916000916020909101906200003e565b503480156200003757600080fd5b50620000e3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200008157805160ff1916838001178555620000b1565b82800160010185558215620000b1579182015b82811115620000b157825182559160200191906001019062000094565b50620000bf929150620000c3565b5090565b620000e091905b80821115620000bf5760008155600101620000ca565b90565b61125180620000f36000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806339ee150a14610046578063a03136571461005b578063f913fe3e14610079575b600080fd5b610059610054366004610da3565b61008c565b005b610063610243565b6040516100709190610ecc565b60405180910390f35b610059610087366004610cdb565b6102d1565b604051632ad311b560e01b815281906001600160a01b03821690632ad311b5906100ba903390600401610e80565b60206040518083038186803b1580156100d257600080fd5b505afa1580156100e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010a9190610cbb565b61012f5760405162461bcd60e51b815260040161012690611001565b60405180910390fd5b610137610be4565b610140856104f6565b9050826001600160a01b031681606001516001600160a01b031614156101ce57600061016f8260a00151610531565b604083015160a08401519192506001600160e01b031983166313da12b560e11b141591600091906101a1906004610544565b1415905081806101ae5750805b6101ca5760405162461bcd60e51b815260040161012690610f6d565b5050505b600061020985876040516020016101e59190610e23565b6040516020818303038152906040528051906020012061055d90919063ffffffff16565b90506001600160a01b0381166102315760405162461bcd60e51b8152600401610126906111c1565b61023b818561068b565b505050505050565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102c95780601f1061029e576101008083540402835291602001916102c9565b820191906000526020600020905b8154815290600101906020018083116102ac57829003601f168201915b505050505081565b604051632ad311b560e01b815281906001600160a01b03821690632ad311b5906102ff903390600401610e80565b60206040518083038186803b15801561031757600080fd5b505afa15801561032b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f9190610cbb565b61036b5760405162461bcd60e51b815260040161012690611001565b600061038286886040516020016101e59190610e23565b9050600061039b85876040516020016101e59190610e23565b9050806001600160a01b0316826001600160a01b0316146103ce5760405162461bcd60e51b8152600401610126906110d2565b6001600160a01b0382166103f45760405162461bcd60e51b8152600401610126906111c1565b6103fc610be4565b610405896104f6565b905061040f610be4565b610418886104f6565b805183519192501461043c5760405162461bcd60e51b815260040161012690611072565b60608260a001518360400151846060015185608001516040516020016104659493929190610e3f565b604051602081830303815290604052905060608260a0015183604001518460600151856080015160405160200161049f9493929190610e3f565b60405160208183030381529060405290508080519060200120828051906020012014156104de5760405162461bcd60e51b8152600401610126906110fc565b6104e8868961068b565b505050505050505050505050565b6104fe610be4565b610507826106e7565b60a087015260808601526001600160a01b031660608501526040840152602083015281525b919050565b600061053e8260006107a1565b92915050565b600061055683836020026004016107da565b9392505050565b600081516041146105805760405162461bcd60e51b815260040161012690610f36565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156105d25760405162461bcd60e51b815260040161012690611030565b8060ff16601b141580156105ea57508060ff16601c14155b156106075760405162461bcd60e51b815260040161012690611121565b60006001878386866040516000815260200160405260405161062c9493929190610eae565b6020604051602081039080840390855afa15801561064e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166106815760405162461bcd60e51b815260040161012690610eff565b9695505050505050565b604051633af34c6b60e21b81526001600160a01b0382169063ebcd31ac906106b99085903390600401610e94565b600060405180830381600087803b1580156106d357600080fd5b505af115801561023b573d6000803e3d6000fd5b60008060008060006060806107036106fe896107e6565b61082b565b90506107228160008151811061071557fe5b6020026020010151610922565b6107328260018151811061071557fe5b6107428360028151811061071557fe5b61075f8460038151811061075257fe5b6020026020010151610950565b61076f8560048151811061071557fe5b61078c8660058151811061077f57fe5b6020026020010151610980565b949d939c50919a509850965090945092505050565b600081600401835110156107c75760405162461bcd60e51b81526004016101269061118a565b5001602001516001600160e01b03191690565b60006105568383610a02565b6107ee610c23565b815161080e5750604080518082019091526000808252602082015261052c565b506040805180820190915281518152602082810190820152919050565b606061083682610a31565b6108525760405162461bcd60e51b815260040161012690611163565b600061085d83610a5d565b90508067ffffffffffffffff8111801561087657600080fd5b506040519080825280602002602001820160405280156108b057816020015b61089d610c23565b8152602001906001900390816108955790505b50915060006108c28460200151610aaa565b60208501510190506000805b83811015610919576108df83610b13565b915060405180604001604052808381526020018481525085828151811061090257fe5b6020908102919091010152918101916001016108ce565b50505050919050565b6000806109328360200151610aaa565b83516020948501518201519190039093036101000a90920492915050565b60006015826000015111156109775760405162461bcd60e51b815260040161012690610fa4565b61053e82610922565b606060006109918360200151610aaa565b835190915081900360608167ffffffffffffffff811180156109b257600080fd5b506040519080825280601f01601f1916602001820160405280156109dd576020820181803683370190505b50905060008160200190506109f9848760200151018285610ba3565b50949350505050565b60008160200183511015610a285760405162461bcd60e51b81526004016101269061109b565b50016020015190565b6020810151805160009190821a9060c0821015610a535760009250505061052c565b5060019392505050565b600080600090506000610a738460200151610aaa565b602085015185519181019250015b80821015610aa157610a9282610b13565b60019093019290910190610a81565b50909392505050565b8051600090811a6080811015610ac457600091505061052c565b60b8811080610adf575060c08110801590610adf575060f881105b15610aee57600191505061052c565b60c0811015610b025760b51901905061052c565b60f51901905061052c565b50919050565b8051600090811a6080811015610b2d57600191505061052c565b60b8811015610b4157607e1901905061052c565b60c0811015610b6e5760b78103600184019350806020036101000a84510460018201810193505050610b0d565b60f8811015610b825760be1901905061052c565b60019290920151602083900360f7016101000a900490910160f51901919050565b5b60208110610bc3578251825260209283019290910190601f1901610ba4565b915181516020939093036101000a6000190180199091169216919091179052565b6040518060c0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b604051806040016040528060008152602001600081525090565b600082601f830112610c4d578081fd5b813567ffffffffffffffff80821115610c64578283fd5b604051601f8301601f191681016020018281118282101715610c84578485fd5b604052828152925082848301602001861015610c9f57600080fd5b8260208601602083013760006020848301015250505092915050565b600060208284031215610ccc578081fd5b81518015158114610556578182fd5b600080600080600060a08688031215610cf2578081fd5b853567ffffffffffffffff80821115610d09578283fd5b610d1589838a01610c3d565b96506020880135915080821115610d2a578283fd5b610d3689838a01610c3d565b95506040880135915080821115610d4b578283fd5b610d5789838a01610c3d565b94506060880135915080821115610d6c578283fd5b50610d7988828901610c3d565b92505060808601356001600160a01b0381168114610d95578182fd5b809150509295509295909350565b600080600060608486031215610db7578283fd5b833567ffffffffffffffff80821115610dce578485fd5b610dda87838801610c3d565b94506020860135915080821115610def578384fd5b50610dfc86828701610c3d565b92505060408401356001600160a01b0381168114610e18578182fd5b809150509250925092565b60008251610e358184602087016111eb565b9190910192915050565b60008551610e51818460208a016111eb565b919091019384525060609190911b6bffffffffffffffffffffffff191660208301526034820152605401919050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082528251806020840152610eeb8160408501602087016111eb565b601f01601f19169190910160400192915050565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b60208082526017908201527f4c6567616c2072656c6179207472616e73616374696f6e000000000000000000604082015260600190565b6020808252603a908201527f496e76616c696420524c504974656d2e2041646472657373657320617265206560408201527f6e636f64656420696e203230206279746573206f72206c657373000000000000606082015260800190565b6020808252601590820152742ab735b737bbb7103932b630bc9036b0b730b3b2b960591b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b6020808252600f908201526e446966666572656e74206e6f6e636560881b604082015260600190565b6020808252601b908201527f72656164427974657333323a206461746120746f6f2073686f72740000000000604082015260600190565b60208082526010908201526f2234b33332b932b73a1039b4b3b732b960811b604082015260600190565b6020808252600b908201526a1d1e081a5cc8195c5d585b60aa1b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b6020808252600d908201526c1a5cd31a5cdd0819985a5b1959609a1b604082015260600190565b6020808252601a908201527f726561644279746573343a206461746120746f6f2073686f7274000000000000604082015260600190565b60208082526010908201526f1958dc9958dbdd995c8819985a5b195960821b604082015260600190565b60005b838110156112065781810151838201526020016111ee565b83811115611215576000848401525b5050505056fea2646970667358221220b8623af626c093144e7b703ceb555f957c77979f6540f364d048150dff23c9a964736f6c634300060a0033322e302e302b6f70656e67736e2e70656e616c697a65722e6970656e616c697a6572",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806339ee150a14610046578063a03136571461005b578063f913fe3e14610079575b600080fd5b610059610054366004610da3565b61008c565b005b610063610243565b6040516100709190610ecc565b60405180910390f35b610059610087366004610cdb565b6102d1565b604051632ad311b560e01b815281906001600160a01b03821690632ad311b5906100ba903390600401610e80565b60206040518083038186803b1580156100d257600080fd5b505afa1580156100e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010a9190610cbb565b61012f5760405162461bcd60e51b815260040161012690611001565b60405180910390fd5b610137610be4565b610140856104f6565b9050826001600160a01b031681606001516001600160a01b031614156101ce57600061016f8260a00151610531565b604083015160a08401519192506001600160e01b031983166313da12b560e11b141591600091906101a1906004610544565b1415905081806101ae5750805b6101ca5760405162461bcd60e51b815260040161012690610f6d565b5050505b600061020985876040516020016101e59190610e23565b6040516020818303038152906040528051906020012061055d90919063ffffffff16565b90506001600160a01b0381166102315760405162461bcd60e51b8152600401610126906111c1565b61023b818561068b565b505050505050565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102c95780601f1061029e576101008083540402835291602001916102c9565b820191906000526020600020905b8154815290600101906020018083116102ac57829003601f168201915b505050505081565b604051632ad311b560e01b815281906001600160a01b03821690632ad311b5906102ff903390600401610e80565b60206040518083038186803b15801561031757600080fd5b505afa15801561032b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f9190610cbb565b61036b5760405162461bcd60e51b815260040161012690611001565b600061038286886040516020016101e59190610e23565b9050600061039b85876040516020016101e59190610e23565b9050806001600160a01b0316826001600160a01b0316146103ce5760405162461bcd60e51b8152600401610126906110d2565b6001600160a01b0382166103f45760405162461bcd60e51b8152600401610126906111c1565b6103fc610be4565b610405896104f6565b905061040f610be4565b610418886104f6565b805183519192501461043c5760405162461bcd60e51b815260040161012690611072565b60608260a001518360400151846060015185608001516040516020016104659493929190610e3f565b604051602081830303815290604052905060608260a0015183604001518460600151856080015160405160200161049f9493929190610e3f565b60405160208183030381529060405290508080519060200120828051906020012014156104de5760405162461bcd60e51b8152600401610126906110fc565b6104e8868961068b565b505050505050505050505050565b6104fe610be4565b610507826106e7565b60a087015260808601526001600160a01b031660608501526040840152602083015281525b919050565b600061053e8260006107a1565b92915050565b600061055683836020026004016107da565b9392505050565b600081516041146105805760405162461bcd60e51b815260040161012690610f36565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156105d25760405162461bcd60e51b815260040161012690611030565b8060ff16601b141580156105ea57508060ff16601c14155b156106075760405162461bcd60e51b815260040161012690611121565b60006001878386866040516000815260200160405260405161062c9493929190610eae565b6020604051602081039080840390855afa15801561064e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166106815760405162461bcd60e51b815260040161012690610eff565b9695505050505050565b604051633af34c6b60e21b81526001600160a01b0382169063ebcd31ac906106b99085903390600401610e94565b600060405180830381600087803b1580156106d357600080fd5b505af115801561023b573d6000803e3d6000fd5b60008060008060006060806107036106fe896107e6565b61082b565b90506107228160008151811061071557fe5b6020026020010151610922565b6107328260018151811061071557fe5b6107428360028151811061071557fe5b61075f8460038151811061075257fe5b6020026020010151610950565b61076f8560048151811061071557fe5b61078c8660058151811061077f57fe5b6020026020010151610980565b949d939c50919a509850965090945092505050565b600081600401835110156107c75760405162461bcd60e51b81526004016101269061118a565b5001602001516001600160e01b03191690565b60006105568383610a02565b6107ee610c23565b815161080e5750604080518082019091526000808252602082015261052c565b506040805180820190915281518152602082810190820152919050565b606061083682610a31565b6108525760405162461bcd60e51b815260040161012690611163565b600061085d83610a5d565b90508067ffffffffffffffff8111801561087657600080fd5b506040519080825280602002602001820160405280156108b057816020015b61089d610c23565b8152602001906001900390816108955790505b50915060006108c28460200151610aaa565b60208501510190506000805b83811015610919576108df83610b13565b915060405180604001604052808381526020018481525085828151811061090257fe5b6020908102919091010152918101916001016108ce565b50505050919050565b6000806109328360200151610aaa565b83516020948501518201519190039093036101000a90920492915050565b60006015826000015111156109775760405162461bcd60e51b815260040161012690610fa4565b61053e82610922565b606060006109918360200151610aaa565b835190915081900360608167ffffffffffffffff811180156109b257600080fd5b506040519080825280601f01601f1916602001820160405280156109dd576020820181803683370190505b50905060008160200190506109f9848760200151018285610ba3565b50949350505050565b60008160200183511015610a285760405162461bcd60e51b81526004016101269061109b565b50016020015190565b6020810151805160009190821a9060c0821015610a535760009250505061052c565b5060019392505050565b600080600090506000610a738460200151610aaa565b602085015185519181019250015b80821015610aa157610a9282610b13565b60019093019290910190610a81565b50909392505050565b8051600090811a6080811015610ac457600091505061052c565b60b8811080610adf575060c08110801590610adf575060f881105b15610aee57600191505061052c565b60c0811015610b025760b51901905061052c565b60f51901905061052c565b50919050565b8051600090811a6080811015610b2d57600191505061052c565b60b8811015610b4157607e1901905061052c565b60c0811015610b6e5760b78103600184019350806020036101000a84510460018201810193505050610b0d565b60f8811015610b825760be1901905061052c565b60019290920151602083900360f7016101000a900490910160f51901919050565b5b60208110610bc3578251825260209283019290910190601f1901610ba4565b915181516020939093036101000a6000190180199091169216919091179052565b6040518060c0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b604051806040016040528060008152602001600081525090565b600082601f830112610c4d578081fd5b813567ffffffffffffffff80821115610c64578283fd5b604051601f8301601f191681016020018281118282101715610c84578485fd5b604052828152925082848301602001861015610c9f57600080fd5b8260208601602083013760006020848301015250505092915050565b600060208284031215610ccc578081fd5b81518015158114610556578182fd5b600080600080600060a08688031215610cf2578081fd5b853567ffffffffffffffff80821115610d09578283fd5b610d1589838a01610c3d565b96506020880135915080821115610d2a578283fd5b610d3689838a01610c3d565b95506040880135915080821115610d4b578283fd5b610d5789838a01610c3d565b94506060880135915080821115610d6c578283fd5b50610d7988828901610c3d565b92505060808601356001600160a01b0381168114610d95578182fd5b809150509295509295909350565b600080600060608486031215610db7578283fd5b833567ffffffffffffffff80821115610dce578485fd5b610dda87838801610c3d565b94506020860135915080821115610def578384fd5b50610dfc86828701610c3d565b92505060408401356001600160a01b0381168114610e18578182fd5b809150509250925092565b60008251610e358184602087016111eb565b9190910192915050565b60008551610e51818460208a016111eb565b919091019384525060609190911b6bffffffffffffffffffffffff191660208301526034820152605401919050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082528251806020840152610eeb8160408501602087016111eb565b601f01601f19169190910160400192915050565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b60208082526017908201527f4c6567616c2072656c6179207472616e73616374696f6e000000000000000000604082015260600190565b6020808252603a908201527f496e76616c696420524c504974656d2e2041646472657373657320617265206560408201527f6e636f64656420696e203230206279746573206f72206c657373000000000000606082015260800190565b6020808252601590820152742ab735b737bbb7103932b630bc9036b0b730b3b2b960591b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b6020808252600f908201526e446966666572656e74206e6f6e636560881b604082015260600190565b6020808252601b908201527f72656164427974657333323a206461746120746f6f2073686f72740000000000604082015260600190565b60208082526010908201526f2234b33332b932b73a1039b4b3b732b960811b604082015260600190565b6020808252600b908201526a1d1e081a5cc8195c5d585b60aa1b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b6020808252600d908201526c1a5cd31a5cdd0819985a5b1959609a1b604082015260600190565b6020808252601a908201527f726561644279746573343a206461746120746f6f2073686f7274000000000000604082015260600190565b60208082526010908201526f1958dc9958dbdd995c8819985a5b195960821b604082015260600190565b60005b838110156112065781810151838201526020016111ee565b83811115611215576000848401525b5050505056fea2646970667358221220b8623af626c093144e7b703ceb555f957c77979f6540f364d048150dff23c9a964736f6c634300060a0033",
    "immutableReferences": {},
    "sourceMap": "326:78:4:-:0;287:3895;326:78;;287:3895;326:78;;;287:3895;326:78;;;;;;;;;;;;;;;:::i;:::-;;287:3895;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;287:3895:4;;;-1:-1:-1;287:3895:4;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
    "deployedSourceMap": "287:3895:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3208:850;;;;;;;;;:::i;:::-;;326:78;;;:::i;:::-;;;;;;;;;;;;;;;;950:2252;;;;;;;;;:::i;3208:850::-;864:36;;-1:-1:-1;;;864:36:4;;3383:3;;-1:-1:-1;;;;;864:24:4;;;;;:36;;889:10;;864:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;856:70;;;;-1:-1:-1;;;856:70:4;;;;;;;;;;;;;;;;;3402:28:::1;;:::i;:::-;3433:29;3451:10;3433:17;:29::i;:::-;3402:60;;3500:3;-1:-1:-1::0;;;;;3476:28:4::1;:9;:12;;;-1:-1:-1::0;;;;;3476:28:4::1;;3472:407;;;3520:15;3538:37;3560:9;:14;;;3538:21;:37::i;:::-;3731:18;::::0;::::1;::::0;3709:14:::1;::::0;::::1;::::0;3520:55;;-1:-1:-1;;;;;;;3614:40:4;::::1;-1:-1:-1::0;;;3614:40:4::1;;::::0;3589:22:::1;::::0;3731:18;3691:36:::1;::::0;3725:1:::1;3691:17;:36::i;:::-;:58;;3668:81;;3788:17;:36;;;;3809:15;3788:36;3763:105;;;;-1:-1:-1::0;;;3763:105:4::1;;;;;;;;;3472:407;;;;3888:13;3904:58;3952:9;3931:10;3914:28;;;;;;;;;;;;;;;;;;;;;;3904:39;;;;;;:47;;:58;;;;:::i;:::-;3888:74:::0;-1:-1:-1;;;;;;3980:19:4;::::1;3972:48;;;;-1:-1:-1::0;;;3972:48:4::1;;;;;;;;;4031:20;4040:5;4047:3;4031:8;:20::i;:::-;936:1;;3208:850:::0;;;;:::o;326:78::-;;;;;;;;;;;;;;;-1:-1:-1;;326:78:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;950:2252::-;864:36;;-1:-1:-1;;;864:36:4;;1189:3;;-1:-1:-1;;;;;864:24:4;;;;;:36;;889:10;;864:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;856:70;;;;-1:-1:-1;;;856:70:4;;;;;;;;;2076:13:::1;2092:60;2141:10;2119:11;2102:29;;;;;;;;;2092:60;2076:76;;2162:13;2178:60;2227:10;2205:11;2188:29;;;;;;;;;2178:60;2162:76;;2266:5;-1:-1:-1::0;;;;;2257:14:4::1;:5;-1:-1:-1::0;;;;;2257:14:4::1;;2249:43;;;;-1:-1:-1::0;;;2249:43:4::1;;;;;;;;;-1:-1:-1::0;;;;;2310:19:4;::::1;2302:48;;;;-1:-1:-1::0;;;2302:48:4::1;;;;;;;;;2361:29;;:::i;:::-;2393:30;2411:11;2393:17;:30::i;:::-;2361:62;;2433:29;;:::i;:::-;2465:30;2483:11;2465:17;:30::i;:::-;2775:16:::0;;2755;;2433:62;;-1:-1:-1;2755:36:4::1;2747:64;;;;-1:-1:-1::0;;;2747:64:4::1;;;;;;;;;2822:25;2875:10;:15;;;2892:10;:19;;;2913:10;:13;;;2928:10;:16;;;2858:87;;;;;;;;;;;;;;;;;;;;;;;;;2822:123;;2956:25;3009:10;:15;;;3026:10;:19;;;3047:10;:13;;;3062:10;:16;;;2992:87;;;;;;;;;;;;;;;;;;;;;;;;;2956:123;;3135:12;3125:23;;;;;;3108:12;3098:23;;;;;;:50;;3090:74;;;;-1:-1:-1::0;;;3090:74:4::1;;;;;;;;;3175:20;3184:5;3191:3;3175:8;:20::i;:::-;936:1;;;;;;950:2252:::0;;;;;;:::o;441:358::-;519:30;;:::i;:::-;720:43;748:14;720:27;:43::i;:::-;700:16;;;561:202;673:17;;;561:202;-1:-1:-1;;;;;561:202:4;649:14;;;561:202;619:20;;;561:202;589:20;;;561:202;;;441:358;;;;:::o;226:133:30:-;293:6;318:34;341:7;350:1;318:22;:34::i;:::-;311:41;226:133;-1:-1:-1;;226:133:30:o;637:153::-;712:4;735:48;759:7;772:5;780:2;772:10;768:1;:14;735:23;:48::i;:::-;728:55;637:153;-1:-1:-1;;;637:153:30:o;1064:2068:36:-;1142:7;1203:9;:16;1223:2;1203:22;1199:94;;1241:41;;-1:-1:-1;;;1241:41:36;;;;;;;;1199:94;1643:4;1628:20;;1622:27;1688:4;1673:20;;1667:27;1741:4;1726:20;;1720:27;1359:9;1712:36;2659:66;2646:79;;2642:154;;;2741:44;;-1:-1:-1;;;2741:44:36;;;;;;;;2642:154;2810:1;:7;;2815:2;2810:7;;:18;;;;;2821:1;:7;;2826:2;2821:7;;2810:18;2806:93;;;2844:44;;-1:-1:-1;;;2844:44:36;;;;;;;;2806:93;2993:14;3010:24;3020:4;3026:1;3029;3032;3010:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3010:24:36;;-1:-1:-1;;3010:24:36;;;-1:-1:-1;;;;;;;3052:20:36;;3044:57;;;;-1:-1:-1;;;3044:57:36;;;;;;;;;3119:6;1064:2068;-1:-1:-1;;;;;;1064:2068:36:o;4064:116:4:-;4136:37;;-1:-1:-1;;;4136:37:4;;-1:-1:-1;;;;;4136:12:4;;;;;:37;;4149:11;;4162:10;;4136:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;761:391:32;840:4;846;852;858:7;867:4;873:12;896:33;932:35;:26;:14;:24;:26::i;:::-;:33;:35::i;:::-;896:71;;1022:18;:6;1029:1;1022:9;;;;;;;;;;;;;;:16;:18::i;:::-;1042;:6;1049:1;1042:9;;;;;;;:18;1062;:6;1069:1;1062:9;;;;;;;:18;1082:21;:6;1089:1;1082:9;;;;;;;;;;;;;;:19;:21::i;:::-;1105:18;:6;1112:1;1105:9;;;;;;;:18;1125:19;:6;1132:1;1125:9;;;;;;;;;;;;;;:17;:19::i;:::-;1014:131;;;;-1:-1:-1;1014:131:32;;-1:-1:-1;1014:131:32;-1:-1:-1;1014:131:32;-1:-1:-1;1014:131:32;;-1:-1:-1;761:391:32;-1:-1:-1;;;761:391:32:o;2482:571:31:-;2602:13;2651:5;2659:1;2651:9;2639:1;:8;:21;;2631:60;;;;-1:-1:-1;;;2631:60:31;;;;;;;;;-1:-1:-1;2786:21:31;2803:2;2786:21;2780:28;-1:-1:-1;;;;;;2935:79:31;;2482:571::o;2256:220::-;2377:14;2424:21;2436:1;2439:5;2424:11;:21::i;1208:281:32:-;1269:14;;:::i;:::-;1299:11;;1295:54;;-1:-1:-1;1336:13:32;;;;;;;;;-1:-1:-1;1336:13:32;;;;;;;1329:20;;1295:54;-1:-1:-1;1454:28:32;;;;;;;;;1462:11;;1454:28;;1423:4;1413:15;;;1454:28;;;;1208:281;;;:::o;1552:488::-;1612:23;1655:12;1662:4;1655:6;:12::i;:::-;1647:38;;;;-1:-1:-1;;;1647:38:32;;;;;;;;;1695:10;1708:14;1717:4;1708:8;:14::i;:::-;1695:27;;1755:5;1741:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1732:29;;1771:11;1799:27;1814:4;:11;;;1799:14;:27::i;:::-;1785:11;;;;:41;;-1:-1:-1;1836:12:32;;1858:176;1879:5;1875:1;:9;1858:176;;;1915:19;1927:6;1915:11;:19::i;:::-;1905:29;;1960:24;;;;;;;;1968:7;1960:24;;;;1977:6;1960:24;;;1948:6;1955:1;1948:9;;;;;;;;;;;;;;;;;:36;2007:16;;;;1886:3;;1858:176;;;;1552:488;;;;;;:::o;5745:377::-;5805:4;5821:11;5835:27;5850:4;:11;;;5835:14;:27::i;:::-;5883:8;;5924:11;;;;;:20;;6012:13;5883:17;;;6036:12;;;6031:3;6027:22;6008:42;;;;5745:377;-1:-1:-1;;5745:377:32:o;5465:274::-;5528:7;5629:2;5617:4;:8;;;:14;;5609:85;;;;-1:-1:-1;;;5609:85:32;;;;;;;;;5719:12;5726:4;5719:6;:12::i;6128:405::-;6189:12;6213:11;6227:27;6242:4;:11;;;6227:14;:27::i;:::-;6275:8;;6213:41;;-1:-1:-1;6275:17:32;;;6325:19;6275:17;6347:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6347:14:32;;6325:36;;6371:12;6437:6;6431:4;6427:17;6416:28;;6463:40;6482:6;6468:4;:11;;;:20;6490:7;6499:3;6463:4;:40::i;:::-;-1:-1:-1;6520:6:32;6128:405;-1:-1:-1;;;;6128:405:32:o;1642:371:31:-;1763:14;1813:5;1821:2;1813:10;1801:1;:8;:22;;1793:63;;;;-1:-1:-1;;;1793:63:31;;;;;;;;;-1:-1:-1;1952:21:31;1969:2;1952:21;1946:28;;1642:371::o;2171:287:32:-;2282:11;;;;2343:13;;2231:4;;2335:22;;;;297:4;2380:24;;2376:54;;;2425:5;2418:12;;;;;;2376:54;-1:-1:-1;2447:4:32;;2171:287;-1:-1:-1;;;2171:287:32:o;2526:386::-;2588:4;2604:10;2617:1;2604:14;;2628:12;2657:27;2672:4;:11;;;2657:14;:27::i;:::-;2643:11;;;;2722:8;;2643:41;;;;-1:-1:-1;2708:22:32;2740:144;2757:6;2747:7;:16;2740:144;;;2799:20;2811:7;2799:11;:20::i;:::-;2866:7;;;;;2789:30;;;;2740:144;;;-1:-1:-1;2900:5:32;;2526:386;-1:-1:-1;;;2526:386:32:o;4204:537::-;4340:13;;4264:4;;4332:22;;208:4;4377:26;;4373:361;;;4424:1;4417:8;;;;;4373:361;253:4;4444:25;;;:83;;-1:-1:-1;297:4:32;4474:25;;;;;:52;;-1:-1:-1;340:4:32;4503:23;;4474:52;4440:294;;;4548:1;4541:8;;;;;4440:294;297:4;4568:24;;4564:170;;;-1:-1:-1;;4632:35:32;;-1:-1:-1;4625:42:32;;4564:170;-1:-1:-1;;4701:33:32;;-1:-1:-1;4694:40:32;;4564:170;4204:537;;;;:::o;2960:1193::-;3097:13;;3017:8;;3089:22;;208:4;3134:26;;3130:1017;;;3181:1;3174:8;;;;;3130:1017;253:4;3201:25;;3197:950;;;-1:-1:-1;;3247:30:32;;-1:-1:-1;3240:37:32;;3197:950;297:4;3296:24;;3292:855;;;3389:4;3382:5;3378:16;3468:1;3460:6;3456:14;3446:24;;3602:7;3598:2;3594:16;3589:3;3585:26;3576:6;3570:13;3566:46;3695:1;3686:7;3682:15;3673:7;3669:29;3662:36;;;;3345:367;;;340:4;3740:23;;3736:411;;;-1:-1:-1;;3786:28:32;;-1:-1:-1;3779:35:32;;3736:411;3950:1;3938:14;;;;3988:13;4016:2;4012:16;;;3906:4;4012:16;4007:3;4003:26;3984:46;;4094:29;;;-1:-1:-1;;4094:29:32;;2960:1193;-1:-1:-1;2960:1193:32:o;6686:665::-;6802:193;377:2;6809:16;;6802:193;;6899:10;;6886:24;;377:2;6937:16;;;;6967:17;;;;-1:-1:-1;;6827:16:32;6802:193;;;7176:10;;7247:11;;377:2;7104:15;;;;7096:3;:24;-1:-1:-1;;7096:28:32;7188:9;;7172:26;;;7243:22;;7313:21;;;;7300:35;;7143:202::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;141:440::-;;242:3;235:4;227:6;223:17;219:27;209:2;;-1:-1;;250:12;209:2;297:6;284:20;18228:18;;18220:6;18217:30;18214:2;;;-1:-1;;18250:12;18214:2;17884;17878:9;18323;18304:17;;-1:-1;;18300:33;17910:17;;18391:4;17910:17;17970:34;;;18006:22;;;17967:62;17964:2;;;-1:-1;;18032:12;17964:2;17884;18051:22;389:21;;;310:73;-1:-1;310:73;489:16;;;18391:4;489:16;486:25;-1:-1;483:2;;;524:1;;514:12;483:2;20242:6;18391:4;431:6;427:17;18391:4;465:5;461:16;20219:30;20298:1;18391:4;20289:6;465:5;20280:16;;20273:27;;;;202:379;;;;;762:257;;874:2;862:9;853:7;849:23;845:32;842:2;;;-1:-1;;880:12;842:2;86:6;80:13;21158:5;19265:13;19258:21;21136:5;21133:32;21123:2;;-1:-1;;21169:12;1026:1195;;;;;;1252:3;1240:9;1231:7;1227:23;1223:33;1220:2;;;-1:-1;;1259:12;1220:2;1317:17;1304:31;1355:18;;1347:6;1344:30;1341:2;;;-1:-1;;1377:12;1341:2;1407:62;1461:7;1452:6;1441:9;1437:22;1407:62;;;1397:72;;1534:2;1523:9;1519:18;1506:32;1492:46;;1355:18;1550:6;1547:30;1544:2;;;-1:-1;;1580:12;1544:2;1610:62;1664:7;1655:6;1644:9;1640:22;1610:62;;;1600:72;;1737:2;1726:9;1722:18;1709:32;1695:46;;1355:18;1753:6;1750:30;1747:2;;;-1:-1;;1783:12;1747:2;1813:62;1867:7;1858:6;1847:9;1843:22;1813:62;;;1803:72;;1940:2;1929:9;1925:18;1912:32;1898:46;;1355:18;1956:6;1953:30;1950:2;;;-1:-1;;1986:12;1950:2;;2016:62;2070:7;2061:6;2050:9;2046:22;2016:62;;;2006:72;-1:-1;;2115:3;2173:22;;674:20;-1:-1;;;;;19548:54;;21272:53;;21262:2;;-1:-1;;21329:12;21262:2;2124:81;;;;1214:1007;;;;;;;;;2228:735;;;;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;-1:-1;;2408:12;2370:2;2466:17;2453:31;2504:18;;2496:6;2493:30;2490:2;;;-1:-1;;2526:12;2490:2;2556:62;2610:7;2601:6;2590:9;2586:22;2556:62;;;2546:72;;2683:2;2672:9;2668:18;2655:32;2641:46;;2504:18;2699:6;2696:30;2693:2;;;-1:-1;;2729:12;2693:2;;2759:62;2813:7;2804:6;2793:9;2789:22;2759:62;;;2749:72;-1:-1;;2858:2;2915:22;;674:20;-1:-1;;;;;19548:54;;21272:53;;21262:2;;-1:-1;;21329:12;21262:2;2866:81;;;;2364:599;;;;;;9438:271;;3822:5;18500:12;3933:52;3978:6;3973:3;3966:4;3959:5;3955:16;3933:52;;;3997:16;;;;;9572:137;-1:-1;;9572:137;9716:688;;3822:5;18500:12;3933:52;3978:6;3973:3;3966:4;3959:5;3955:16;3933:52;;;3997:16;;;;3613:37;;;-1:-1;21049:2;21045:14;;;;-1:-1;;21045:14;3966:4;10145:12;;3472:58;10256:12;;;3613:37;10367:12;;;9934:470;-1:-1;9934:470;10411:238;-1:-1;;;;;19548:54;;;;3049:58;;10546:2;10531:18;;10517:132;10656:365;-1:-1;;;;;19548:54;;;3206:45;;19548:54;;11007:2;10992:18;;3206:45;10827:2;10812:18;;10798:223;11028:548;3613:37;;;19764:4;19753:16;;;;11396:2;11381:18;;9391:35;11479:2;11464:18;;3613:37;11562:2;11547:18;;3613:37;11235:3;11220:19;;11206:370;11583:310;;11730:2;11751:17;11744:47;4170:5;18500:12;18939:6;11730:2;11719:9;11715:18;18927:19;4264:52;4309:6;18967:14;11719:9;18967:14;11730:2;4290:5;4286:16;4264:52;;;18323:9;20938:14;-1:-1;;20934:28;4328:39;;;;18967:14;4328:39;;11701:192;-1:-1;;11701:192;11900:416;12100:2;12114:47;;;4604:2;12085:18;;;18927:19;4640:26;18967:14;;;4620:47;4686:12;;;12071:245;12323:416;12523:2;12537:47;;;4937:2;12508:18;;;18927:19;4973:33;18967:14;;;4953:54;5026:12;;;12494:245;12746:416;12946:2;12960:47;;;5277:2;12931:18;;;18927:19;5313:25;18967:14;;;5293:46;5358:12;;;12917:245;13169:416;13369:2;13383:47;;;5609:2;13354:18;;;18927:19;5645:34;18967:14;;;5625:55;5714:28;5700:12;;;5693:50;5762:12;;;13340:245;13592:416;13792:2;13806:47;;;6013:2;13777:18;;;18927:19;-1:-1;;;18967:14;;;6029:44;6092:12;;;13763:245;14015:416;14215:2;14229:47;;;6343:2;14200:18;;;18927:19;6379:34;18967:14;;;6359:55;-1:-1;;;6434:12;;;6427:26;6472:12;;;14186:245;14438:416;14638:2;14652:47;;;6723:2;14623:18;;;18927:19;-1:-1;;;18967:14;;;6739:38;6796:12;;;14609:245;14861:416;15061:2;15075:47;;;7047:2;15046:18;;;18927:19;7083:29;18967:14;;;7063:50;7132:12;;;15032:245;15284:416;15484:2;15498:47;;;7383:2;15469:18;;;18927:19;-1:-1;;;18967:14;;;7399:39;7457:12;;;15455:245;15707:416;15907:2;15921:47;;;7708:2;15892:18;;;18927:19;-1:-1;;;18967:14;;;7724:34;7777:12;;;15878:245;16130:416;16330:2;16344:47;;;8028:2;16315:18;;;18927:19;8064:34;18967:14;;;8044:55;-1:-1;;;8119:12;;;8112:26;8157:12;;;16301:245;16553:416;16753:2;16767:47;;;8408:2;16738:18;;;18927:19;-1:-1;;;18967:14;;;8424:36;8479:12;;;16724:245;16976:416;17176:2;17190:47;;;8730:2;17161:18;;;18927:19;8766:28;18967:14;;;8746:49;8814:12;;;17147:245;17399:416;17599:2;17613:47;;;9065:2;17584:18;;;18927:19;-1:-1;;;18967:14;;;9081:39;9139:12;;;17570:245;20315:268;20380:1;20387:101;20401:6;20398:1;20395:13;20387:101;;;20468:11;;;20462:18;20449:11;;;20442:39;20423:2;20416:10;20387:101;;;20503:6;20500:1;20497:13;20494:2;;;20380:1;20559:6;20554:3;20550:16;20543:27;20494:2;;20364:219;;;",
    "source": "// SPDX-License-Identifier:MIT\npragma solidity ^0.6.2;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts/cryptography/ECDSA.sol\";\n\nimport \"./utils/RLPReader.sol\";\nimport \"./utils/GsnUtils.sol\";\nimport \"./interfaces/IRelayHub.sol\";\nimport \"./interfaces/IPenalizer.sol\";\n\ncontract Penalizer is IPenalizer{\n\n    string public override versionPenalizer = \"2.0.0+opengsn.penalizer.ipenalizer\";\n\n    using ECDSA for bytes32;\n\n    function decodeTransaction(bytes memory rawTransaction) private pure returns (Transaction memory transaction) {\n        (transaction.nonce,\n        transaction.gasPrice,\n        transaction.gasLimit,\n        transaction.to,\n        transaction.value,\n        transaction.data) = RLPReader.decodeTransaction(rawTransaction);\n        return transaction;\n\n    }\n\n    modifier relayManagerOnly(IRelayHub hub) {\n        require(hub.isRelayManagerStaked(msg.sender), \"Unknown relay manager\");\n        _;\n    }\n\n    function penalizeRepeatedNonce(\n        bytes memory unsignedTx1,\n        bytes memory signature1,\n        bytes memory unsignedTx2,\n        bytes memory signature2,\n        IRelayHub hub\n    )\n    public\n    override\n    relayManagerOnly(hub)\n    {\n        // Can be called by a relay manager only.\n        // If a relay attacked the system by signing multiple transactions with the same nonce\n        // (so only one is accepted), anyone can grab both transactions from the blockchain and submit them here.\n        // Check whether unsignedTx1 != unsignedTx2, that both are signed by the same address,\n        // and that unsignedTx1.nonce == unsignedTx2.nonce.\n        // If all conditions are met, relay is considered an \"offending relay\".\n        // The offending relay will be unregistered immediately, its stake will be forfeited and given\n        // to the address who reported it (msg.sender), thus incentivizing anyone to report offending relays.\n        // If reported via a relay, the forfeited stake is split between\n        // msg.sender (the relay used for reporting) and the address that reported it.\n\n        address addr1 = keccak256(abi.encodePacked(unsignedTx1)).recover(signature1);\n        address addr2 = keccak256(abi.encodePacked(unsignedTx2)).recover(signature2);\n\n        require(addr1 == addr2, \"Different signer\");\n        require(addr1 != address(0), \"ecrecover failed\");\n\n        Transaction memory decodedTx1 = decodeTransaction(unsignedTx1);\n        Transaction memory decodedTx2 = decodeTransaction(unsignedTx2);\n\n        // checking that the same nonce is used in both transaction, with both signed by the same address\n        // and the actual data is different\n        // note: we compare the hash of the tx to save gas over iterating both byte arrays\n        require(decodedTx1.nonce == decodedTx2.nonce, \"Different nonce\");\n\n        bytes memory dataToCheck1 =\n        abi.encodePacked(decodedTx1.data, decodedTx1.gasLimit, decodedTx1.to, decodedTx1.value);\n\n        bytes memory dataToCheck2 =\n        abi.encodePacked(decodedTx2.data, decodedTx2.gasLimit, decodedTx2.to, decodedTx2.value);\n\n        require(keccak256(dataToCheck1) != keccak256(dataToCheck2), \"tx is equal\");\n\n        penalize(addr1, hub);\n    }\n\n    function penalizeIllegalTransaction(\n        bytes memory unsignedTx,\n        bytes memory signature,\n        IRelayHub hub\n    )\n    public\n    override\n    relayManagerOnly(hub)\n    {\n        Transaction memory decodedTx = decodeTransaction(unsignedTx);\n        if (decodedTx.to == address(hub)) {\n            bytes4 selector = GsnUtils.getMethodSig(decodedTx.data);\n            bool isWrongMethodCall = selector != IRelayHub.relayCall.selector;\n            bool isGasLimitWrong = GsnUtils.getParam(decodedTx.data, 4) != decodedTx.gasLimit;\n            require(\n                isWrongMethodCall || isGasLimitWrong,\n                \"Legal relay transaction\");\n        }\n        address relay = keccak256(abi.encodePacked(unsignedTx)).recover(signature);\n        require(relay != address(0), \"ecrecover failed\");\n\n        penalize(relay, hub);\n    }\n\n    function penalize(address relayWorker, IRelayHub hub) private {\n        hub.penalize(relayWorker, msg.sender);\n    }\n}\n",
    "sourcePath": "/Users/dror/IdeaProjects/gsn/contracts/Penalizer.sol",
    "ast": {
        "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/Penalizer.sol",
        "exportedSymbols": {
            "Penalizer": [
                696
            ]
        },
        "id": 697,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 404,
                "literals": [
                    "solidity",
                    "^",
                    "0.6",
                    ".2"
                ],
                "nodeType": "PragmaDirective",
                "src": "31:23:4"
            },
            {
                "id": 405,
                "literals": [
                    "experimental",
                    "ABIEncoderV2"
                ],
                "nodeType": "PragmaDirective",
                "src": "55:33:4"
            },
            {
                "absolutePath": "@openzeppelin/contracts/cryptography/ECDSA.sol",
                "file": "@openzeppelin/contracts/cryptography/ECDSA.sol",
                "id": 406,
                "nodeType": "ImportDirective",
                "scope": 697,
                "sourceUnit": 6566,
                "src": "90:56:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/utils/RLPReader.sol",
                "file": "./utils/RLPReader.sol",
                "id": 407,
                "nodeType": "ImportDirective",
                "scope": 697,
                "sourceUnit": 6267,
                "src": "148:31:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/utils/GsnUtils.sol",
                "file": "./utils/GsnUtils.sol",
                "id": 408,
                "nodeType": "ImportDirective",
                "scope": 697,
                "sourceUnit": 5575,
                "src": "180:30:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IRelayHub.sol",
                "file": "./interfaces/IRelayHub.sol",
                "id": 409,
                "nodeType": "ImportDirective",
                "scope": 697,
                "sourceUnit": 3593,
                "src": "211:36:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IPenalizer.sol",
                "file": "./interfaces/IPenalizer.sol",
                "id": 410,
                "nodeType": "ImportDirective",
                "scope": 697,
                "sourceUnit": 3355,
                "src": "248:37:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "arguments": null,
                        "baseName": {
                            "contractScope": null,
                            "id": 411,
                            "name": "IPenalizer",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3354,
                            "src": "309:10:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPenalizer_$3354",
                                "typeString": "contract IPenalizer"
                            }
                        },
                        "id": 412,
                        "nodeType": "InheritanceSpecifier",
                        "src": "309:10:4"
                    }
                ],
                "contractDependencies": [
                    3354
                ],
                "contractKind": "contract",
                "documentation": null,
                "fullyImplemented": true,
                "id": 696,
                "linearizedBaseContracts": [
                    696,
                    3354
                ],
                "name": "Penalizer",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "baseFunctions": [
                            3353
                        ],
                        "constant": false,
                        "functionSelector": "a0313657",
                        "id": 416,
                        "mutability": "mutable",
                        "name": "versionPenalizer",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 414,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "340:8:4"
                        },
                        "scope": 696,
                        "src": "326:78:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 413,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "326:6:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "argumentTypes": null,
                            "hexValue": "322e302e302b6f70656e67736e2e70656e616c697a65722e6970656e616c697a6572",
                            "id": 415,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "368:36:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2a7b92619680d22e323adb39aba5da42f22b13104ef1387367db452afb9fb124",
                                "typeString": "literal_string \"2.0.0+opengsn.penalizer.ipenalizer\""
                            },
                            "value": "2.0.0+opengsn.penalizer.ipenalizer"
                        },
                        "visibility": "public"
                    },
                    {
                        "id": 419,
                        "libraryName": {
                            "contractScope": null,
                            "id": 417,
                            "name": "ECDSA",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 6565,
                            "src": "417:5:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ECDSA_$6565",
                                "typeString": "library ECDSA"
                            }
                        },
                        "nodeType": "UsingForDirective",
                        "src": "411:24:4",
                        "typeName": {
                            "id": 418,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "427:7:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                            }
                        }
                    },
                    {
                        "body": {
                            "id": 448,
                            "nodeType": "Block",
                            "src": "551:248:4",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 444,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "components": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 426,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "562:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 428,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3315,
                                                    "src": "562:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 429,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "589:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 430,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasPrice",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3317,
                                                    "src": "589:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 431,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "619:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 432,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasLimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3319,
                                                    "src": "619:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 433,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "649:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 434,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "to",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3321,
                                                    "src": "649:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 435,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "673:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 436,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "value",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3323,
                                                    "src": "673:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 437,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "700:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 438,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "data",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3325,
                                                    "src": "700:16:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "id": 439,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "TupleExpression",
                                            "src": "561:156:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(uint256,uint256,uint256,address,uint256,bytes memory)"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 442,
                                                    "name": "rawTransaction",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 421,
                                                    "src": "748:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 440,
                                                    "name": "RLPReader",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6266,
                                                    "src": "720:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_RLPReader_$6266_$",
                                                        "typeString": "type(library RLPReader)"
                                                    }
                                                },
                                                "id": 441,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "decodeTransaction",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5781,
                                                "src": "720:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$",
                                                    "typeString": "function (bytes memory) pure returns (uint256,uint256,uint256,address,uint256,bytes memory)"
                                                }
                                            },
                                            "id": 443,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "720:43:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(uint256,uint256,uint256,address,uint256,bytes memory)"
                                            }
                                        },
                                        "src": "561:202:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 445,
                                    "nodeType": "ExpressionStatement",
                                    "src": "561:202:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 446,
                                        "name": "transaction",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 424,
                                        "src": "780:11:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                            "typeString": "struct IPenalizer.Transaction memory"
                                        }
                                    },
                                    "functionReturnParameters": 425,
                                    "id": 447,
                                    "nodeType": "Return",
                                    "src": "773:18:4"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 449,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "decodeTransaction",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 422,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 421,
                                    "mutability": "mutable",
                                    "name": "rawTransaction",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 449,
                                    "src": "468:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 420,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "468:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "467:29:4"
                        },
                        "returnParameters": {
                            "id": 425,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 424,
                                    "mutability": "mutable",
                                    "name": "transaction",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 449,
                                    "src": "519:30:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                        "typeString": "struct IPenalizer.Transaction"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 423,
                                        "name": "Transaction",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3326,
                                        "src": "519:11:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Transaction_$3326_storage_ptr",
                                            "typeString": "struct IPenalizer.Transaction"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "518:32:4"
                        },
                        "scope": 696,
                        "src": "441:358:4",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 463,
                            "nodeType": "Block",
                            "src": "846:98:4",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 456,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -15,
                                                            "src": "889:3:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 457,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sender",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "889:10:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 454,
                                                        "name": "hub",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 451,
                                                        "src": "864:3:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                            "typeString": "contract IRelayHub"
                                                        }
                                                    },
                                                    "id": 455,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "isRelayManagerStaked",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3580,
                                                    "src": "864:24:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view external returns (bool)"
                                                    }
                                                },
                                                "id": 458,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "864:36:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "556e6b6e6f776e2072656c6179206d616e61676572",
                                                "id": 459,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "902:23:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_4062f4f4dfeb8454c4cd76623d839ee376b2a8801fdbb3e3b6ac36643c45ed8b",
                                                    "typeString": "literal_string \"Unknown relay manager\""
                                                },
                                                "value": "Unknown relay manager"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_4062f4f4dfeb8454c4cd76623d839ee376b2a8801fdbb3e3b6ac36643c45ed8b",
                                                    "typeString": "literal_string \"Unknown relay manager\""
                                                }
                                            ],
                                            "id": 453,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "856:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 460,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "856:70:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 461,
                                    "nodeType": "ExpressionStatement",
                                    "src": "856:70:4"
                                },
                                {
                                    "id": 462,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "936:1:4"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 464,
                        "name": "relayManagerOnly",
                        "nodeType": "ModifierDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 452,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 451,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 464,
                                    "src": "831:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 450,
                                        "name": "IRelayHub",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3592,
                                        "src": "831:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "830:15:4"
                        },
                        "src": "805:139:4",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            3339
                        ],
                        "body": {
                            "id": 587,
                            "nodeType": "Block",
                            "src": "1198:2004:4",
                            "statements": [
                                {
                                    "assignments": [
                                        482
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 482,
                                            "mutability": "mutable",
                                            "name": "addr1",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2076:13:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 481,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2076:7:4",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 492,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 490,
                                                "name": "signature1",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 468,
                                                "src": "2141:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 486,
                                                                "name": "unsignedTx1",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 466,
                                                                "src": "2119:11:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 484,
                                                                "name": "abi",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -1,
                                                                "src": "2102:3:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_abi",
                                                                    "typeString": "abi"
                                                                }
                                                            },
                                                            "id": 485,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "encodePacked",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "2102:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                                "typeString": "function () pure returns (bytes memory)"
                                                            }
                                                        },
                                                        "id": 487,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "2102:29:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "id": 483,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "2092:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 488,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2092:40:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "id": 489,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "recover",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6547,
                                            "src": "2092:48:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                                            }
                                        },
                                        "id": 491,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2092:60:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2076:76:4"
                                },
                                {
                                    "assignments": [
                                        494
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 494,
                                            "mutability": "mutable",
                                            "name": "addr2",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2162:13:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 493,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2162:7:4",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 504,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 502,
                                                "name": "signature2",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 472,
                                                "src": "2227:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 498,
                                                                "name": "unsignedTx2",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 470,
                                                                "src": "2205:11:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 496,
                                                                "name": "abi",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -1,
                                                                "src": "2188:3:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_abi",
                                                                    "typeString": "abi"
                                                                }
                                                            },
                                                            "id": 497,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "encodePacked",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "2188:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                                "typeString": "function () pure returns (bytes memory)"
                                                            }
                                                        },
                                                        "id": 499,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "2188:29:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "id": 495,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "2178:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 500,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2178:40:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "id": 501,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "recover",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6547,
                                            "src": "2178:48:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                                            }
                                        },
                                        "id": 503,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2178:60:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2162:76:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 508,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 506,
                                                    "name": "addr1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 482,
                                                    "src": "2257:5:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 507,
                                                    "name": "addr2",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 494,
                                                    "src": "2266:5:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "2257:14:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "446966666572656e74207369676e6572",
                                                "id": 509,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2273:18:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_77f12a9a496b062a6cd97e7e01fa86a04f9bf1daea28d37b7b1a6dcb31f1445a",
                                                    "typeString": "literal_string \"Different signer\""
                                                },
                                                "value": "Different signer"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_77f12a9a496b062a6cd97e7e01fa86a04f9bf1daea28d37b7b1a6dcb31f1445a",
                                                    "typeString": "literal_string \"Different signer\""
                                                }
                                            ],
                                            "id": 505,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2249:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 510,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2249:43:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 511,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2249:43:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 518,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 513,
                                                    "name": "addr1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 482,
                                                    "src": "2310:5:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 516,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2327:1:4",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 515,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "2319:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 514,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2319:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 517,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2319:10:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "2310:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "65637265636f766572206661696c6564",
                                                "id": 519,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2331:18:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_e58270ee9df7f123e74980140856b47d916f4de0f2167d7d0ac95254b56c5356",
                                                    "typeString": "literal_string \"ecrecover failed\""
                                                },
                                                "value": "ecrecover failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_e58270ee9df7f123e74980140856b47d916f4de0f2167d7d0ac95254b56c5356",
                                                    "typeString": "literal_string \"ecrecover failed\""
                                                }
                                            ],
                                            "id": 512,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2302:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 520,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2302:48:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 521,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2302:48:4"
                                },
                                {
                                    "assignments": [
                                        523
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 523,
                                            "mutability": "mutable",
                                            "name": "decodedTx1",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2361:29:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                "typeString": "struct IPenalizer.Transaction"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 522,
                                                "name": "Transaction",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3326,
                                                "src": "2361:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Transaction_$3326_storage_ptr",
                                                    "typeString": "struct IPenalizer.Transaction"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 527,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 525,
                                                "name": "unsignedTx1",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 466,
                                                "src": "2411:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 524,
                                            "name": "decodeTransaction",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 449,
                                            "src": "2393:17:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_Transaction_$3326_memory_ptr_$",
                                                "typeString": "function (bytes memory) pure returns (struct IPenalizer.Transaction memory)"
                                            }
                                        },
                                        "id": 526,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2393:30:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                            "typeString": "struct IPenalizer.Transaction memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2361:62:4"
                                },
                                {
                                    "assignments": [
                                        529
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 529,
                                            "mutability": "mutable",
                                            "name": "decodedTx2",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2433:29:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                "typeString": "struct IPenalizer.Transaction"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 528,
                                                "name": "Transaction",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3326,
                                                "src": "2433:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Transaction_$3326_storage_ptr",
                                                    "typeString": "struct IPenalizer.Transaction"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 533,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 531,
                                                "name": "unsignedTx2",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 470,
                                                "src": "2483:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 530,
                                            "name": "decodeTransaction",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 449,
                                            "src": "2465:17:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_Transaction_$3326_memory_ptr_$",
                                                "typeString": "function (bytes memory) pure returns (struct IPenalizer.Transaction memory)"
                                            }
                                        },
                                        "id": 532,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2465:30:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                            "typeString": "struct IPenalizer.Transaction memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2433:62:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 539,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 535,
                                                        "name": "decodedTx1",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 523,
                                                        "src": "2755:10:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 536,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3315,
                                                    "src": "2755:16:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 537,
                                                        "name": "decodedTx2",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 529,
                                                        "src": "2775:10:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 538,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3315,
                                                    "src": "2775:16:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2755:36:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "446966666572656e74206e6f6e6365",
                                                "id": 540,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2793:17:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_6136512038ef862fc08c559b09cc7aa2cae962bda7bdd342d620a678fd11a712",
                                                    "typeString": "literal_string \"Different nonce\""
                                                },
                                                "value": "Different nonce"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_6136512038ef862fc08c559b09cc7aa2cae962bda7bdd342d620a678fd11a712",
                                                    "typeString": "literal_string \"Different nonce\""
                                                }
                                            ],
                                            "id": 534,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2747:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 541,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2747:64:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 542,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2747:64:4"
                                },
                                {
                                    "assignments": [
                                        544
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 544,
                                            "mutability": "mutable",
                                            "name": "dataToCheck1",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2822:25:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 543,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2822:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 556,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 547,
                                                    "name": "decodedTx1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 523,
                                                    "src": "2875:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 548,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "data",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3325,
                                                "src": "2875:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 549,
                                                    "name": "decodedTx1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 523,
                                                    "src": "2892:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 550,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "gasLimit",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3319,
                                                "src": "2892:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 551,
                                                    "name": "decodedTx1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 523,
                                                    "src": "2913:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 552,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "to",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3321,
                                                "src": "2913:13:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 553,
                                                    "name": "decodedTx1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 523,
                                                    "src": "2928:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 554,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3323,
                                                "src": "2928:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 545,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "2858:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 546,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodePacked",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "2858:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 555,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2858:87:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2822:123:4"
                                },
                                {
                                    "assignments": [
                                        558
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 558,
                                            "mutability": "mutable",
                                            "name": "dataToCheck2",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2956:25:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 557,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2956:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 570,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 561,
                                                    "name": "decodedTx2",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 529,
                                                    "src": "3009:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 562,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "data",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3325,
                                                "src": "3009:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 563,
                                                    "name": "decodedTx2",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 529,
                                                    "src": "3026:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 564,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "gasLimit",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3319,
                                                "src": "3026:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 565,
                                                    "name": "decodedTx2",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 529,
                                                    "src": "3047:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 566,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "to",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3321,
                                                "src": "3047:13:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 567,
                                                    "name": "decodedTx2",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 529,
                                                    "src": "3062:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 568,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3323,
                                                "src": "3062:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 559,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "2992:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 560,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodePacked",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "2992:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 569,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2992:87:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2956:123:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                "id": 578,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 573,
                                                            "name": "dataToCheck1",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 544,
                                                            "src": "3108:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "id": 572,
                                                        "name": "keccak256",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -8,
                                                        "src": "3098:9:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                            "typeString": "function (bytes memory) pure returns (bytes32)"
                                                        }
                                                    },
                                                    "id": 574,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3098:23:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 576,
                                                            "name": "dataToCheck2",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 558,
                                                            "src": "3135:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "id": 575,
                                                        "name": "keccak256",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -8,
                                                        "src": "3125:9:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                            "typeString": "function (bytes memory) pure returns (bytes32)"
                                                        }
                                                    },
                                                    "id": 577,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3125:23:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "src": "3098:50:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "747820697320657175616c",
                                                "id": 579,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3150:13:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_822839638978993ab14d31c59e1ff905c0afbb4298c5da6313df4ee328f5a727",
                                                    "typeString": "literal_string \"tx is equal\""
                                                },
                                                "value": "tx is equal"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_822839638978993ab14d31c59e1ff905c0afbb4298c5da6313df4ee328f5a727",
                                                    "typeString": "literal_string \"tx is equal\""
                                                }
                                            ],
                                            "id": 571,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3090:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 580,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3090:74:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 581,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3090:74:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 583,
                                                "name": "addr1",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 482,
                                                "src": "3184:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 584,
                                                "name": "hub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 474,
                                                "src": "3191:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            ],
                                            "id": 582,
                                            "name": "penalize",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 695,
                                            "src": "3175:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_contract$_IRelayHub_$3592_$returns$__$",
                                                "typeString": "function (address,contract IRelayHub)"
                                            }
                                        },
                                        "id": 585,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3175:20:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 586,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3175:20:4"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "f913fe3e",
                        "id": 588,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "argumentTypes": null,
                                        "id": 478,
                                        "name": "hub",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 474,
                                        "src": "1189:3:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    }
                                ],
                                "id": 479,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 477,
                                    "name": "relayManagerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 464,
                                    "src": "1172:16:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$_t_contract$_IRelayHub_$3592_$",
                                        "typeString": "modifier (contract IRelayHub)"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "1172:21:4"
                            }
                        ],
                        "name": "penalizeRepeatedNonce",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 476,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1159:8:4"
                        },
                        "parameters": {
                            "id": 475,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 466,
                                    "mutability": "mutable",
                                    "name": "unsignedTx1",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 588,
                                    "src": "990:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 465,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "990:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 468,
                                    "mutability": "mutable",
                                    "name": "signature1",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 588,
                                    "src": "1024:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 467,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1024:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 470,
                                    "mutability": "mutable",
                                    "name": "unsignedTx2",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 588,
                                    "src": "1057:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 469,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1057:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 472,
                                    "mutability": "mutable",
                                    "name": "signature2",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 588,
                                    "src": "1091:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 471,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1091:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 474,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 588,
                                    "src": "1124:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 473,
                                        "name": "IRelayHub",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3592,
                                        "src": "1124:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "980:163:4"
                        },
                        "returnParameters": {
                            "id": 480,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1198:0:4"
                        },
                        "scope": 696,
                        "src": "950:2252:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3348
                        ],
                        "body": {
                            "id": 678,
                            "nodeType": "Block",
                            "src": "3392:666:4",
                            "statements": [
                                {
                                    "assignments": [
                                        602
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 602,
                                            "mutability": "mutable",
                                            "name": "decodedTx",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 678,
                                            "src": "3402:28:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                "typeString": "struct IPenalizer.Transaction"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 601,
                                                "name": "Transaction",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3326,
                                                "src": "3402:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Transaction_$3326_storage_ptr",
                                                    "typeString": "struct IPenalizer.Transaction"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 606,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 604,
                                                "name": "unsignedTx",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 590,
                                                "src": "3451:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 603,
                                            "name": "decodeTransaction",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 449,
                                            "src": "3433:17:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_Transaction_$3326_memory_ptr_$",
                                                "typeString": "function (bytes memory) pure returns (struct IPenalizer.Transaction memory)"
                                            }
                                        },
                                        "id": 605,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3433:29:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                            "typeString": "struct IPenalizer.Transaction memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3402:60:4"
                                },
                                {
                                    "condition": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        },
                                        "id": 613,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 607,
                                                "name": "decodedTx",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 602,
                                                "src": "3476:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                    "typeString": "struct IPenalizer.Transaction memory"
                                                }
                                            },
                                            "id": 608,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "to",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3321,
                                            "src": "3476:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 611,
                                                    "name": "hub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 594,
                                                    "src": "3500:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                        "typeString": "contract IRelayHub"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                        "typeString": "contract IRelayHub"
                                                    }
                                                ],
                                                "id": 610,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "3492:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_address_$",
                                                    "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                    "id": 609,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "3492:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": null,
                                                        "typeString": null
                                                    }
                                                }
                                            },
                                            "id": 612,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3492:12:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "3476:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": null,
                                    "id": 650,
                                    "nodeType": "IfStatement",
                                    "src": "3472:407:4",
                                    "trueBody": {
                                        "id": 649,
                                        "nodeType": "Block",
                                        "src": "3506:373:4",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    615
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 615,
                                                        "mutability": "mutable",
                                                        "name": "selector",
                                                        "nodeType": "VariableDeclaration",
                                                        "overrides": null,
                                                        "scope": 649,
                                                        "src": "3520:15:4",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        "typeName": {
                                                            "id": 614,
                                                            "name": "bytes4",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3520:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes4",
                                                                "typeString": "bytes4"
                                                            }
                                                        },
                                                        "value": null,
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 621,
                                                "initialValue": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 618,
                                                                "name": "decodedTx",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 602,
                                                                "src": "3560:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                                    "typeString": "struct IPenalizer.Transaction memory"
                                                                }
                                                            },
                                                            "id": 619,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "data",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3325,
                                                            "src": "3560:14:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 616,
                                                            "name": "GsnUtils",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5574,
                                                            "src": "3538:8:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_GsnUtils_$5574_$",
                                                                "typeString": "type(library GsnUtils)"
                                                            }
                                                        },
                                                        "id": 617,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "getMethodSig",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5545,
                                                        "src": "3538:21:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                                            "typeString": "function (bytes memory) pure returns (bytes4)"
                                                        }
                                                    },
                                                    "id": 620,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3538:37:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "3520:55:4"
                                            },
                                            {
                                                "assignments": [
                                                    623
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 623,
                                                        "mutability": "mutable",
                                                        "name": "isWrongMethodCall",
                                                        "nodeType": "VariableDeclaration",
                                                        "overrides": null,
                                                        "scope": 649,
                                                        "src": "3589:22:4",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        },
                                                        "typeName": {
                                                            "id": 622,
                                                            "name": "bool",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3589:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        "value": null,
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 629,
                                                "initialValue": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    },
                                                    "id": 628,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "id": 624,
                                                        "name": "selector",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 615,
                                                        "src": "3614:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "!=",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 625,
                                                                "name": "IRelayHub",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3592,
                                                                "src": "3626:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_IRelayHub_$3592_$",
                                                                    "typeString": "type(contract IRelayHub)"
                                                                }
                                                            },
                                                            "id": 626,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "relayCall",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3493,
                                                            "src": "3626:19:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_declaration_nonpayable$_t_uint256_$_t_struct$_RelayRequest_$3232_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                                "typeString": "function IRelayHub.relayCall(uint256,struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,uint256) returns (bool,bytes memory)"
                                                            }
                                                        },
                                                        "id": 627,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "3626:28:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    "src": "3614:40:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "3589:65:4"
                                            },
                                            {
                                                "assignments": [
                                                    631
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 631,
                                                        "mutability": "mutable",
                                                        "name": "isGasLimitWrong",
                                                        "nodeType": "VariableDeclaration",
                                                        "overrides": null,
                                                        "scope": 649,
                                                        "src": "3668:20:4",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        },
                                                        "typeName": {
                                                            "id": 630,
                                                            "name": "bool",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3668:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        "value": null,
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 641,
                                                "initialValue": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 640,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 634,
                                                                    "name": "decodedTx",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 602,
                                                                    "src": "3709:9:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                                    }
                                                                },
                                                                "id": 635,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "data",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3325,
                                                                "src": "3709:14:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "hexValue": "34",
                                                                "id": 636,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "3725:1:4",
                                                                "subdenomination": null,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_4_by_1",
                                                                    "typeString": "int_const 4"
                                                                },
                                                                "value": "4"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_rational_4_by_1",
                                                                    "typeString": "int_const 4"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 632,
                                                                "name": "GsnUtils",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5574,
                                                                "src": "3691:8:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_GsnUtils_$5574_$",
                                                                    "typeString": "type(library GsnUtils)"
                                                                }
                                                            },
                                                            "id": 633,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "getParam",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5566,
                                                            "src": "3691:17:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                                                                "typeString": "function (bytes memory,uint256) pure returns (uint256)"
                                                            }
                                                        },
                                                        "id": 637,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3691:36:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "!=",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 638,
                                                            "name": "decodedTx",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 602,
                                                            "src": "3731:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                                "typeString": "struct IPenalizer.Transaction memory"
                                                            }
                                                        },
                                                        "id": 639,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasLimit",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3319,
                                                        "src": "3731:18:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "3691:58:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "3668:81:4"
                                            },
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            "id": 645,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "argumentTypes": null,
                                                                "id": 643,
                                                                "name": "isWrongMethodCall",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 623,
                                                                "src": "3788:17:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "||",
                                                            "rightExpression": {
                                                                "argumentTypes": null,
                                                                "id": 644,
                                                                "name": "isGasLimitWrong",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 631,
                                                                "src": "3809:15:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "src": "3788:36:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "4c6567616c2072656c6179207472616e73616374696f6e",
                                                            "id": 646,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3842:25:4",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_22b6e321d1f4cb50754e524e834e05384aed148cd455d6fb6045faefaf95dc1a",
                                                                "typeString": "literal_string \"Legal relay transaction\""
                                                            },
                                                            "value": "Legal relay transaction"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_22b6e321d1f4cb50754e524e834e05384aed148cd455d6fb6045faefaf95dc1a",
                                                                "typeString": "literal_string \"Legal relay transaction\""
                                                            }
                                                        ],
                                                        "id": 642,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            -18,
                                                            -18
                                                        ],
                                                        "referencedDeclaration": -18,
                                                        "src": "3763:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 647,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3763:105:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 648,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3763:105:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "assignments": [
                                        652
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 652,
                                            "mutability": "mutable",
                                            "name": "relay",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 678,
                                            "src": "3888:13:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 651,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3888:7:4",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 662,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 660,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 592,
                                                "src": "3952:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 656,
                                                                "name": "unsignedTx",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 590,
                                                                "src": "3931:10:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 654,
                                                                "name": "abi",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -1,
                                                                "src": "3914:3:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_abi",
                                                                    "typeString": "abi"
                                                                }
                                                            },
                                                            "id": 655,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "encodePacked",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "3914:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                                "typeString": "function () pure returns (bytes memory)"
                                                            }
                                                        },
                                                        "id": 657,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3914:28:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "id": 653,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "3904:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 658,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3904:39:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "id": 659,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "recover",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6547,
                                            "src": "3904:47:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                                            }
                                        },
                                        "id": 661,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3904:58:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3888:74:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 669,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 664,
                                                    "name": "relay",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 652,
                                                    "src": "3980:5:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 667,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3997:1:4",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 666,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3989:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 665,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3989:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 668,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3989:10:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "3980:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "65637265636f766572206661696c6564",
                                                "id": 670,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4001:18:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_e58270ee9df7f123e74980140856b47d916f4de0f2167d7d0ac95254b56c5356",
                                                    "typeString": "literal_string \"ecrecover failed\""
                                                },
                                                "value": "ecrecover failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_e58270ee9df7f123e74980140856b47d916f4de0f2167d7d0ac95254b56c5356",
                                                    "typeString": "literal_string \"ecrecover failed\""
                                                }
                                            ],
                                            "id": 663,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3972:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 671,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3972:48:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 672,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3972:48:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 674,
                                                "name": "relay",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 652,
                                                "src": "4040:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 675,
                                                "name": "hub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 594,
                                                "src": "4047:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            ],
                                            "id": 673,
                                            "name": "penalize",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 695,
                                            "src": "4031:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_contract$_IRelayHub_$3592_$returns$__$",
                                                "typeString": "function (address,contract IRelayHub)"
                                            }
                                        },
                                        "id": 676,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4031:20:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 677,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4031:20:4"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "39ee150a",
                        "id": 679,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "argumentTypes": null,
                                        "id": 598,
                                        "name": "hub",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 594,
                                        "src": "3383:3:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    }
                                ],
                                "id": 599,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 597,
                                    "name": "relayManagerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 464,
                                    "src": "3366:16:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$_t_contract$_IRelayHub_$3592_$",
                                        "typeString": "modifier (contract IRelayHub)"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "3366:21:4"
                            }
                        ],
                        "name": "penalizeIllegalTransaction",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 596,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3353:8:4"
                        },
                        "parameters": {
                            "id": 595,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 590,
                                    "mutability": "mutable",
                                    "name": "unsignedTx",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 679,
                                    "src": "3253:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 589,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3253:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 592,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 679,
                                    "src": "3286:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 591,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3286:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 594,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 679,
                                    "src": "3318:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 593,
                                        "name": "IRelayHub",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3592,
                                        "src": "3318:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3243:94:4"
                        },
                        "returnParameters": {
                            "id": 600,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3392:0:4"
                        },
                        "scope": 696,
                        "src": "3208:850:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 694,
                            "nodeType": "Block",
                            "src": "4126:54:4",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 689,
                                                "name": "relayWorker",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 681,
                                                "src": "4149:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 690,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "4162:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 691,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "4162:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 686,
                                                "name": "hub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 683,
                                                "src": "4136:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            },
                                            "id": 688,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "penalize",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3500,
                                            "src": "4136:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_payable_$returns$__$",
                                                "typeString": "function (address,address payable) external"
                                            }
                                        },
                                        "id": 692,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4136:37:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 693,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4136:37:4"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 695,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalize",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 684,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 681,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 695,
                                    "src": "4082:19:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 680,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4082:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 683,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 695,
                                    "src": "4103:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 682,
                                        "name": "IRelayHub",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3592,
                                        "src": "4103:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4081:36:4"
                        },
                        "returnParameters": {
                            "id": 685,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4126:0:4"
                        },
                        "scope": 696,
                        "src": "4064:116:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "private"
                    }
                ],
                "scope": 697,
                "src": "287:3895:4"
            }
        ],
        "src": "31:4152:4"
    },
    "legacyAST": {
        "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/Penalizer.sol",
        "exportedSymbols": {
            "Penalizer": [
                696
            ]
        },
        "id": 697,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 404,
                "literals": [
                    "solidity",
                    "^",
                    "0.6",
                    ".2"
                ],
                "nodeType": "PragmaDirective",
                "src": "31:23:4"
            },
            {
                "id": 405,
                "literals": [
                    "experimental",
                    "ABIEncoderV2"
                ],
                "nodeType": "PragmaDirective",
                "src": "55:33:4"
            },
            {
                "absolutePath": "@openzeppelin/contracts/cryptography/ECDSA.sol",
                "file": "@openzeppelin/contracts/cryptography/ECDSA.sol",
                "id": 406,
                "nodeType": "ImportDirective",
                "scope": 697,
                "sourceUnit": 6566,
                "src": "90:56:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/utils/RLPReader.sol",
                "file": "./utils/RLPReader.sol",
                "id": 407,
                "nodeType": "ImportDirective",
                "scope": 697,
                "sourceUnit": 6267,
                "src": "148:31:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/utils/GsnUtils.sol",
                "file": "./utils/GsnUtils.sol",
                "id": 408,
                "nodeType": "ImportDirective",
                "scope": 697,
                "sourceUnit": 5575,
                "src": "180:30:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IRelayHub.sol",
                "file": "./interfaces/IRelayHub.sol",
                "id": 409,
                "nodeType": "ImportDirective",
                "scope": 697,
                "sourceUnit": 3593,
                "src": "211:36:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IPenalizer.sol",
                "file": "./interfaces/IPenalizer.sol",
                "id": 410,
                "nodeType": "ImportDirective",
                "scope": 697,
                "sourceUnit": 3355,
                "src": "248:37:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "arguments": null,
                        "baseName": {
                            "contractScope": null,
                            "id": 411,
                            "name": "IPenalizer",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3354,
                            "src": "309:10:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPenalizer_$3354",
                                "typeString": "contract IPenalizer"
                            }
                        },
                        "id": 412,
                        "nodeType": "InheritanceSpecifier",
                        "src": "309:10:4"
                    }
                ],
                "contractDependencies": [
                    3354
                ],
                "contractKind": "contract",
                "documentation": null,
                "fullyImplemented": true,
                "id": 696,
                "linearizedBaseContracts": [
                    696,
                    3354
                ],
                "name": "Penalizer",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "baseFunctions": [
                            3353
                        ],
                        "constant": false,
                        "functionSelector": "a0313657",
                        "id": 416,
                        "mutability": "mutable",
                        "name": "versionPenalizer",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 414,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "340:8:4"
                        },
                        "scope": 696,
                        "src": "326:78:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 413,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "326:6:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "argumentTypes": null,
                            "hexValue": "322e302e302b6f70656e67736e2e70656e616c697a65722e6970656e616c697a6572",
                            "id": 415,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "368:36:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2a7b92619680d22e323adb39aba5da42f22b13104ef1387367db452afb9fb124",
                                "typeString": "literal_string \"2.0.0+opengsn.penalizer.ipenalizer\""
                            },
                            "value": "2.0.0+opengsn.penalizer.ipenalizer"
                        },
                        "visibility": "public"
                    },
                    {
                        "id": 419,
                        "libraryName": {
                            "contractScope": null,
                            "id": 417,
                            "name": "ECDSA",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 6565,
                            "src": "417:5:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ECDSA_$6565",
                                "typeString": "library ECDSA"
                            }
                        },
                        "nodeType": "UsingForDirective",
                        "src": "411:24:4",
                        "typeName": {
                            "id": 418,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "427:7:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                            }
                        }
                    },
                    {
                        "body": {
                            "id": 448,
                            "nodeType": "Block",
                            "src": "551:248:4",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 444,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "components": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 426,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "562:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 428,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3315,
                                                    "src": "562:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 429,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "589:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 430,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasPrice",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3317,
                                                    "src": "589:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 431,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "619:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 432,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasLimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3319,
                                                    "src": "619:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 433,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "649:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 434,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "to",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3321,
                                                    "src": "649:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 435,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "673:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 436,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "value",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3323,
                                                    "src": "673:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 437,
                                                        "name": "transaction",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 424,
                                                        "src": "700:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 438,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "data",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3325,
                                                    "src": "700:16:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "id": 439,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "TupleExpression",
                                            "src": "561:156:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(uint256,uint256,uint256,address,uint256,bytes memory)"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 442,
                                                    "name": "rawTransaction",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 421,
                                                    "src": "748:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 440,
                                                    "name": "RLPReader",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6266,
                                                    "src": "720:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_RLPReader_$6266_$",
                                                        "typeString": "type(library RLPReader)"
                                                    }
                                                },
                                                "id": 441,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "decodeTransaction",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5781,
                                                "src": "720:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$",
                                                    "typeString": "function (bytes memory) pure returns (uint256,uint256,uint256,address,uint256,bytes memory)"
                                                }
                                            },
                                            "id": 443,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "720:43:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(uint256,uint256,uint256,address,uint256,bytes memory)"
                                            }
                                        },
                                        "src": "561:202:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 445,
                                    "nodeType": "ExpressionStatement",
                                    "src": "561:202:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 446,
                                        "name": "transaction",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 424,
                                        "src": "780:11:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                            "typeString": "struct IPenalizer.Transaction memory"
                                        }
                                    },
                                    "functionReturnParameters": 425,
                                    "id": 447,
                                    "nodeType": "Return",
                                    "src": "773:18:4"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 449,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "decodeTransaction",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 422,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 421,
                                    "mutability": "mutable",
                                    "name": "rawTransaction",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 449,
                                    "src": "468:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 420,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "468:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "467:29:4"
                        },
                        "returnParameters": {
                            "id": 425,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 424,
                                    "mutability": "mutable",
                                    "name": "transaction",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 449,
                                    "src": "519:30:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                        "typeString": "struct IPenalizer.Transaction"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 423,
                                        "name": "Transaction",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3326,
                                        "src": "519:11:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Transaction_$3326_storage_ptr",
                                            "typeString": "struct IPenalizer.Transaction"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "518:32:4"
                        },
                        "scope": 696,
                        "src": "441:358:4",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 463,
                            "nodeType": "Block",
                            "src": "846:98:4",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 456,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -15,
                                                            "src": "889:3:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 457,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sender",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "889:10:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 454,
                                                        "name": "hub",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 451,
                                                        "src": "864:3:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                            "typeString": "contract IRelayHub"
                                                        }
                                                    },
                                                    "id": 455,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "isRelayManagerStaked",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3580,
                                                    "src": "864:24:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view external returns (bool)"
                                                    }
                                                },
                                                "id": 458,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "864:36:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "556e6b6e6f776e2072656c6179206d616e61676572",
                                                "id": 459,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "902:23:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_4062f4f4dfeb8454c4cd76623d839ee376b2a8801fdbb3e3b6ac36643c45ed8b",
                                                    "typeString": "literal_string \"Unknown relay manager\""
                                                },
                                                "value": "Unknown relay manager"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_4062f4f4dfeb8454c4cd76623d839ee376b2a8801fdbb3e3b6ac36643c45ed8b",
                                                    "typeString": "literal_string \"Unknown relay manager\""
                                                }
                                            ],
                                            "id": 453,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "856:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 460,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "856:70:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 461,
                                    "nodeType": "ExpressionStatement",
                                    "src": "856:70:4"
                                },
                                {
                                    "id": 462,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "936:1:4"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 464,
                        "name": "relayManagerOnly",
                        "nodeType": "ModifierDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 452,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 451,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 464,
                                    "src": "831:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 450,
                                        "name": "IRelayHub",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3592,
                                        "src": "831:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "830:15:4"
                        },
                        "src": "805:139:4",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            3339
                        ],
                        "body": {
                            "id": 587,
                            "nodeType": "Block",
                            "src": "1198:2004:4",
                            "statements": [
                                {
                                    "assignments": [
                                        482
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 482,
                                            "mutability": "mutable",
                                            "name": "addr1",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2076:13:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 481,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2076:7:4",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 492,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 490,
                                                "name": "signature1",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 468,
                                                "src": "2141:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 486,
                                                                "name": "unsignedTx1",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 466,
                                                                "src": "2119:11:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 484,
                                                                "name": "abi",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -1,
                                                                "src": "2102:3:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_abi",
                                                                    "typeString": "abi"
                                                                }
                                                            },
                                                            "id": 485,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "encodePacked",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "2102:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                                "typeString": "function () pure returns (bytes memory)"
                                                            }
                                                        },
                                                        "id": 487,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "2102:29:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "id": 483,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "2092:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 488,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2092:40:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "id": 489,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "recover",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6547,
                                            "src": "2092:48:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                                            }
                                        },
                                        "id": 491,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2092:60:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2076:76:4"
                                },
                                {
                                    "assignments": [
                                        494
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 494,
                                            "mutability": "mutable",
                                            "name": "addr2",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2162:13:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 493,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2162:7:4",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 504,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 502,
                                                "name": "signature2",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 472,
                                                "src": "2227:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 498,
                                                                "name": "unsignedTx2",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 470,
                                                                "src": "2205:11:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 496,
                                                                "name": "abi",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -1,
                                                                "src": "2188:3:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_abi",
                                                                    "typeString": "abi"
                                                                }
                                                            },
                                                            "id": 497,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "encodePacked",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "2188:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                                "typeString": "function () pure returns (bytes memory)"
                                                            }
                                                        },
                                                        "id": 499,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "2188:29:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "id": 495,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "2178:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 500,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2178:40:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "id": 501,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "recover",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6547,
                                            "src": "2178:48:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                                            }
                                        },
                                        "id": 503,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2178:60:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2162:76:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 508,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 506,
                                                    "name": "addr1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 482,
                                                    "src": "2257:5:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 507,
                                                    "name": "addr2",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 494,
                                                    "src": "2266:5:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "2257:14:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "446966666572656e74207369676e6572",
                                                "id": 509,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2273:18:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_77f12a9a496b062a6cd97e7e01fa86a04f9bf1daea28d37b7b1a6dcb31f1445a",
                                                    "typeString": "literal_string \"Different signer\""
                                                },
                                                "value": "Different signer"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_77f12a9a496b062a6cd97e7e01fa86a04f9bf1daea28d37b7b1a6dcb31f1445a",
                                                    "typeString": "literal_string \"Different signer\""
                                                }
                                            ],
                                            "id": 505,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2249:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 510,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2249:43:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 511,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2249:43:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 518,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 513,
                                                    "name": "addr1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 482,
                                                    "src": "2310:5:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 516,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2327:1:4",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 515,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "2319:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 514,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2319:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 517,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2319:10:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "2310:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "65637265636f766572206661696c6564",
                                                "id": 519,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2331:18:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_e58270ee9df7f123e74980140856b47d916f4de0f2167d7d0ac95254b56c5356",
                                                    "typeString": "literal_string \"ecrecover failed\""
                                                },
                                                "value": "ecrecover failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_e58270ee9df7f123e74980140856b47d916f4de0f2167d7d0ac95254b56c5356",
                                                    "typeString": "literal_string \"ecrecover failed\""
                                                }
                                            ],
                                            "id": 512,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2302:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 520,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2302:48:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 521,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2302:48:4"
                                },
                                {
                                    "assignments": [
                                        523
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 523,
                                            "mutability": "mutable",
                                            "name": "decodedTx1",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2361:29:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                "typeString": "struct IPenalizer.Transaction"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 522,
                                                "name": "Transaction",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3326,
                                                "src": "2361:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Transaction_$3326_storage_ptr",
                                                    "typeString": "struct IPenalizer.Transaction"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 527,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 525,
                                                "name": "unsignedTx1",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 466,
                                                "src": "2411:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 524,
                                            "name": "decodeTransaction",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 449,
                                            "src": "2393:17:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_Transaction_$3326_memory_ptr_$",
                                                "typeString": "function (bytes memory) pure returns (struct IPenalizer.Transaction memory)"
                                            }
                                        },
                                        "id": 526,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2393:30:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                            "typeString": "struct IPenalizer.Transaction memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2361:62:4"
                                },
                                {
                                    "assignments": [
                                        529
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 529,
                                            "mutability": "mutable",
                                            "name": "decodedTx2",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2433:29:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                "typeString": "struct IPenalizer.Transaction"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 528,
                                                "name": "Transaction",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3326,
                                                "src": "2433:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Transaction_$3326_storage_ptr",
                                                    "typeString": "struct IPenalizer.Transaction"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 533,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 531,
                                                "name": "unsignedTx2",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 470,
                                                "src": "2483:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 530,
                                            "name": "decodeTransaction",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 449,
                                            "src": "2465:17:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_Transaction_$3326_memory_ptr_$",
                                                "typeString": "function (bytes memory) pure returns (struct IPenalizer.Transaction memory)"
                                            }
                                        },
                                        "id": 532,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2465:30:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                            "typeString": "struct IPenalizer.Transaction memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2433:62:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 539,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 535,
                                                        "name": "decodedTx1",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 523,
                                                        "src": "2755:10:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 536,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3315,
                                                    "src": "2755:16:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 537,
                                                        "name": "decodedTx2",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 529,
                                                        "src": "2775:10:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                            "typeString": "struct IPenalizer.Transaction memory"
                                                        }
                                                    },
                                                    "id": 538,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3315,
                                                    "src": "2775:16:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2755:36:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "446966666572656e74206e6f6e6365",
                                                "id": 540,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2793:17:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_6136512038ef862fc08c559b09cc7aa2cae962bda7bdd342d620a678fd11a712",
                                                    "typeString": "literal_string \"Different nonce\""
                                                },
                                                "value": "Different nonce"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_6136512038ef862fc08c559b09cc7aa2cae962bda7bdd342d620a678fd11a712",
                                                    "typeString": "literal_string \"Different nonce\""
                                                }
                                            ],
                                            "id": 534,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2747:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 541,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2747:64:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 542,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2747:64:4"
                                },
                                {
                                    "assignments": [
                                        544
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 544,
                                            "mutability": "mutable",
                                            "name": "dataToCheck1",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2822:25:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 543,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2822:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 556,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 547,
                                                    "name": "decodedTx1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 523,
                                                    "src": "2875:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 548,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "data",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3325,
                                                "src": "2875:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 549,
                                                    "name": "decodedTx1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 523,
                                                    "src": "2892:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 550,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "gasLimit",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3319,
                                                "src": "2892:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 551,
                                                    "name": "decodedTx1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 523,
                                                    "src": "2913:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 552,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "to",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3321,
                                                "src": "2913:13:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 553,
                                                    "name": "decodedTx1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 523,
                                                    "src": "2928:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 554,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3323,
                                                "src": "2928:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 545,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "2858:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 546,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodePacked",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "2858:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 555,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2858:87:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2822:123:4"
                                },
                                {
                                    "assignments": [
                                        558
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 558,
                                            "mutability": "mutable",
                                            "name": "dataToCheck2",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 587,
                                            "src": "2956:25:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 557,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2956:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 570,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 561,
                                                    "name": "decodedTx2",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 529,
                                                    "src": "3009:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 562,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "data",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3325,
                                                "src": "3009:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 563,
                                                    "name": "decodedTx2",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 529,
                                                    "src": "3026:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 564,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "gasLimit",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3319,
                                                "src": "3026:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 565,
                                                    "name": "decodedTx2",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 529,
                                                    "src": "3047:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 566,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "to",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3321,
                                                "src": "3047:13:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 567,
                                                    "name": "decodedTx2",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 529,
                                                    "src": "3062:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                    }
                                                },
                                                "id": 568,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3323,
                                                "src": "3062:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 559,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "2992:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 560,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodePacked",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "2992:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 569,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2992:87:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2956:123:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                "id": 578,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 573,
                                                            "name": "dataToCheck1",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 544,
                                                            "src": "3108:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "id": 572,
                                                        "name": "keccak256",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -8,
                                                        "src": "3098:9:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                            "typeString": "function (bytes memory) pure returns (bytes32)"
                                                        }
                                                    },
                                                    "id": 574,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3098:23:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 576,
                                                            "name": "dataToCheck2",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 558,
                                                            "src": "3135:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "id": 575,
                                                        "name": "keccak256",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -8,
                                                        "src": "3125:9:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                            "typeString": "function (bytes memory) pure returns (bytes32)"
                                                        }
                                                    },
                                                    "id": 577,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3125:23:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "src": "3098:50:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "747820697320657175616c",
                                                "id": 579,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3150:13:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_822839638978993ab14d31c59e1ff905c0afbb4298c5da6313df4ee328f5a727",
                                                    "typeString": "literal_string \"tx is equal\""
                                                },
                                                "value": "tx is equal"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_822839638978993ab14d31c59e1ff905c0afbb4298c5da6313df4ee328f5a727",
                                                    "typeString": "literal_string \"tx is equal\""
                                                }
                                            ],
                                            "id": 571,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3090:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 580,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3090:74:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 581,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3090:74:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 583,
                                                "name": "addr1",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 482,
                                                "src": "3184:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 584,
                                                "name": "hub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 474,
                                                "src": "3191:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            ],
                                            "id": 582,
                                            "name": "penalize",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 695,
                                            "src": "3175:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_contract$_IRelayHub_$3592_$returns$__$",
                                                "typeString": "function (address,contract IRelayHub)"
                                            }
                                        },
                                        "id": 585,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3175:20:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 586,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3175:20:4"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "f913fe3e",
                        "id": 588,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "argumentTypes": null,
                                        "id": 478,
                                        "name": "hub",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 474,
                                        "src": "1189:3:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    }
                                ],
                                "id": 479,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 477,
                                    "name": "relayManagerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 464,
                                    "src": "1172:16:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$_t_contract$_IRelayHub_$3592_$",
                                        "typeString": "modifier (contract IRelayHub)"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "1172:21:4"
                            }
                        ],
                        "name": "penalizeRepeatedNonce",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 476,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1159:8:4"
                        },
                        "parameters": {
                            "id": 475,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 466,
                                    "mutability": "mutable",
                                    "name": "unsignedTx1",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 588,
                                    "src": "990:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 465,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "990:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 468,
                                    "mutability": "mutable",
                                    "name": "signature1",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 588,
                                    "src": "1024:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 467,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1024:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 470,
                                    "mutability": "mutable",
                                    "name": "unsignedTx2",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 588,
                                    "src": "1057:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 469,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1057:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 472,
                                    "mutability": "mutable",
                                    "name": "signature2",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 588,
                                    "src": "1091:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 471,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1091:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 474,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 588,
                                    "src": "1124:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 473,
                                        "name": "IRelayHub",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3592,
                                        "src": "1124:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "980:163:4"
                        },
                        "returnParameters": {
                            "id": 480,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1198:0:4"
                        },
                        "scope": 696,
                        "src": "950:2252:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3348
                        ],
                        "body": {
                            "id": 678,
                            "nodeType": "Block",
                            "src": "3392:666:4",
                            "statements": [
                                {
                                    "assignments": [
                                        602
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 602,
                                            "mutability": "mutable",
                                            "name": "decodedTx",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 678,
                                            "src": "3402:28:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                "typeString": "struct IPenalizer.Transaction"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 601,
                                                "name": "Transaction",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3326,
                                                "src": "3402:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Transaction_$3326_storage_ptr",
                                                    "typeString": "struct IPenalizer.Transaction"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 606,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 604,
                                                "name": "unsignedTx",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 590,
                                                "src": "3451:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 603,
                                            "name": "decodeTransaction",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 449,
                                            "src": "3433:17:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_Transaction_$3326_memory_ptr_$",
                                                "typeString": "function (bytes memory) pure returns (struct IPenalizer.Transaction memory)"
                                            }
                                        },
                                        "id": 605,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3433:29:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                            "typeString": "struct IPenalizer.Transaction memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3402:60:4"
                                },
                                {
                                    "condition": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        },
                                        "id": 613,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 607,
                                                "name": "decodedTx",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 602,
                                                "src": "3476:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                    "typeString": "struct IPenalizer.Transaction memory"
                                                }
                                            },
                                            "id": 608,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "to",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3321,
                                            "src": "3476:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 611,
                                                    "name": "hub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 594,
                                                    "src": "3500:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                        "typeString": "contract IRelayHub"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                        "typeString": "contract IRelayHub"
                                                    }
                                                ],
                                                "id": 610,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "3492:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_address_$",
                                                    "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                    "id": 609,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "3492:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": null,
                                                        "typeString": null
                                                    }
                                                }
                                            },
                                            "id": 612,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3492:12:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "3476:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": null,
                                    "id": 650,
                                    "nodeType": "IfStatement",
                                    "src": "3472:407:4",
                                    "trueBody": {
                                        "id": 649,
                                        "nodeType": "Block",
                                        "src": "3506:373:4",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    615
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 615,
                                                        "mutability": "mutable",
                                                        "name": "selector",
                                                        "nodeType": "VariableDeclaration",
                                                        "overrides": null,
                                                        "scope": 649,
                                                        "src": "3520:15:4",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        "typeName": {
                                                            "id": 614,
                                                            "name": "bytes4",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3520:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes4",
                                                                "typeString": "bytes4"
                                                            }
                                                        },
                                                        "value": null,
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 621,
                                                "initialValue": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 618,
                                                                "name": "decodedTx",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 602,
                                                                "src": "3560:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                                    "typeString": "struct IPenalizer.Transaction memory"
                                                                }
                                                            },
                                                            "id": 619,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "data",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3325,
                                                            "src": "3560:14:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 616,
                                                            "name": "GsnUtils",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5574,
                                                            "src": "3538:8:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_GsnUtils_$5574_$",
                                                                "typeString": "type(library GsnUtils)"
                                                            }
                                                        },
                                                        "id": 617,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "getMethodSig",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5545,
                                                        "src": "3538:21:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                                            "typeString": "function (bytes memory) pure returns (bytes4)"
                                                        }
                                                    },
                                                    "id": 620,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3538:37:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "3520:55:4"
                                            },
                                            {
                                                "assignments": [
                                                    623
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 623,
                                                        "mutability": "mutable",
                                                        "name": "isWrongMethodCall",
                                                        "nodeType": "VariableDeclaration",
                                                        "overrides": null,
                                                        "scope": 649,
                                                        "src": "3589:22:4",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        },
                                                        "typeName": {
                                                            "id": 622,
                                                            "name": "bool",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3589:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        "value": null,
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 629,
                                                "initialValue": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    },
                                                    "id": 628,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "id": 624,
                                                        "name": "selector",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 615,
                                                        "src": "3614:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "!=",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 625,
                                                                "name": "IRelayHub",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3592,
                                                                "src": "3626:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_IRelayHub_$3592_$",
                                                                    "typeString": "type(contract IRelayHub)"
                                                                }
                                                            },
                                                            "id": 626,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "relayCall",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3493,
                                                            "src": "3626:19:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_declaration_nonpayable$_t_uint256_$_t_struct$_RelayRequest_$3232_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                                "typeString": "function IRelayHub.relayCall(uint256,struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,uint256) returns (bool,bytes memory)"
                                                            }
                                                        },
                                                        "id": 627,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "3626:28:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    "src": "3614:40:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "3589:65:4"
                                            },
                                            {
                                                "assignments": [
                                                    631
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 631,
                                                        "mutability": "mutable",
                                                        "name": "isGasLimitWrong",
                                                        "nodeType": "VariableDeclaration",
                                                        "overrides": null,
                                                        "scope": 649,
                                                        "src": "3668:20:4",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        },
                                                        "typeName": {
                                                            "id": 630,
                                                            "name": "bool",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3668:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        "value": null,
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 641,
                                                "initialValue": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 640,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 634,
                                                                    "name": "decodedTx",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 602,
                                                                    "src": "3709:9:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                                        "typeString": "struct IPenalizer.Transaction memory"
                                                                    }
                                                                },
                                                                "id": 635,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "data",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3325,
                                                                "src": "3709:14:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "hexValue": "34",
                                                                "id": 636,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "3725:1:4",
                                                                "subdenomination": null,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_4_by_1",
                                                                    "typeString": "int_const 4"
                                                                },
                                                                "value": "4"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_rational_4_by_1",
                                                                    "typeString": "int_const 4"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 632,
                                                                "name": "GsnUtils",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5574,
                                                                "src": "3691:8:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_GsnUtils_$5574_$",
                                                                    "typeString": "type(library GsnUtils)"
                                                                }
                                                            },
                                                            "id": 633,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "getParam",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5566,
                                                            "src": "3691:17:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                                                                "typeString": "function (bytes memory,uint256) pure returns (uint256)"
                                                            }
                                                        },
                                                        "id": 637,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3691:36:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "!=",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 638,
                                                            "name": "decodedTx",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 602,
                                                            "src": "3731:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_Transaction_$3326_memory_ptr",
                                                                "typeString": "struct IPenalizer.Transaction memory"
                                                            }
                                                        },
                                                        "id": 639,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasLimit",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3319,
                                                        "src": "3731:18:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "3691:58:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "3668:81:4"
                                            },
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            "id": 645,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "argumentTypes": null,
                                                                "id": 643,
                                                                "name": "isWrongMethodCall",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 623,
                                                                "src": "3788:17:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "||",
                                                            "rightExpression": {
                                                                "argumentTypes": null,
                                                                "id": 644,
                                                                "name": "isGasLimitWrong",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 631,
                                                                "src": "3809:15:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "src": "3788:36:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "4c6567616c2072656c6179207472616e73616374696f6e",
                                                            "id": 646,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3842:25:4",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_22b6e321d1f4cb50754e524e834e05384aed148cd455d6fb6045faefaf95dc1a",
                                                                "typeString": "literal_string \"Legal relay transaction\""
                                                            },
                                                            "value": "Legal relay transaction"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_22b6e321d1f4cb50754e524e834e05384aed148cd455d6fb6045faefaf95dc1a",
                                                                "typeString": "literal_string \"Legal relay transaction\""
                                                            }
                                                        ],
                                                        "id": 642,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            -18,
                                                            -18
                                                        ],
                                                        "referencedDeclaration": -18,
                                                        "src": "3763:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 647,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3763:105:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 648,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3763:105:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "assignments": [
                                        652
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 652,
                                            "mutability": "mutable",
                                            "name": "relay",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 678,
                                            "src": "3888:13:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 651,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3888:7:4",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 662,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 660,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 592,
                                                "src": "3952:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 656,
                                                                "name": "unsignedTx",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 590,
                                                                "src": "3931:10:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 654,
                                                                "name": "abi",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -1,
                                                                "src": "3914:3:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_abi",
                                                                    "typeString": "abi"
                                                                }
                                                            },
                                                            "id": 655,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "encodePacked",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "3914:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                                "typeString": "function () pure returns (bytes memory)"
                                                            }
                                                        },
                                                        "id": 657,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3914:28:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "id": 653,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "3904:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 658,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3904:39:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "id": 659,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "recover",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6547,
                                            "src": "3904:47:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                                            }
                                        },
                                        "id": 661,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3904:58:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3888:74:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 669,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 664,
                                                    "name": "relay",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 652,
                                                    "src": "3980:5:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 667,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3997:1:4",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 666,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3989:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 665,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3989:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 668,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3989:10:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "3980:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "65637265636f766572206661696c6564",
                                                "id": 670,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4001:18:4",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_e58270ee9df7f123e74980140856b47d916f4de0f2167d7d0ac95254b56c5356",
                                                    "typeString": "literal_string \"ecrecover failed\""
                                                },
                                                "value": "ecrecover failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_e58270ee9df7f123e74980140856b47d916f4de0f2167d7d0ac95254b56c5356",
                                                    "typeString": "literal_string \"ecrecover failed\""
                                                }
                                            ],
                                            "id": 663,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3972:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 671,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3972:48:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 672,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3972:48:4"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 674,
                                                "name": "relay",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 652,
                                                "src": "4040:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 675,
                                                "name": "hub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 594,
                                                "src": "4047:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            ],
                                            "id": 673,
                                            "name": "penalize",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 695,
                                            "src": "4031:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_contract$_IRelayHub_$3592_$returns$__$",
                                                "typeString": "function (address,contract IRelayHub)"
                                            }
                                        },
                                        "id": 676,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4031:20:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 677,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4031:20:4"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "39ee150a",
                        "id": 679,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "argumentTypes": null,
                                        "id": 598,
                                        "name": "hub",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 594,
                                        "src": "3383:3:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    }
                                ],
                                "id": 599,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 597,
                                    "name": "relayManagerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 464,
                                    "src": "3366:16:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$_t_contract$_IRelayHub_$3592_$",
                                        "typeString": "modifier (contract IRelayHub)"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "3366:21:4"
                            }
                        ],
                        "name": "penalizeIllegalTransaction",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 596,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3353:8:4"
                        },
                        "parameters": {
                            "id": 595,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 590,
                                    "mutability": "mutable",
                                    "name": "unsignedTx",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 679,
                                    "src": "3253:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 589,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3253:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 592,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 679,
                                    "src": "3286:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 591,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3286:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 594,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 679,
                                    "src": "3318:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 593,
                                        "name": "IRelayHub",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3592,
                                        "src": "3318:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3243:94:4"
                        },
                        "returnParameters": {
                            "id": 600,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3392:0:4"
                        },
                        "scope": 696,
                        "src": "3208:850:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 694,
                            "nodeType": "Block",
                            "src": "4126:54:4",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 689,
                                                "name": "relayWorker",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 681,
                                                "src": "4149:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 690,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "4162:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 691,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "4162:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 686,
                                                "name": "hub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 683,
                                                "src": "4136:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            },
                                            "id": 688,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "penalize",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3500,
                                            "src": "4136:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_payable_$returns$__$",
                                                "typeString": "function (address,address payable) external"
                                            }
                                        },
                                        "id": 692,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4136:37:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 693,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4136:37:4"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 695,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalize",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 684,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 681,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 695,
                                    "src": "4082:19:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 680,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4082:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 683,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 695,
                                    "src": "4103:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 682,
                                        "name": "IRelayHub",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3592,
                                        "src": "4103:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4081:36:4"
                        },
                        "returnParameters": {
                            "id": 685,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4126:0:4"
                        },
                        "scope": 696,
                        "src": "4064:116:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "private"
                    }
                ],
                "scope": 697,
                "src": "287:3895:4"
            }
        ],
        "src": "31:4152:4"
    },
    "compiler": {
        "name": "solc",
        "version": "0.6.10+commit.00c0fcaf.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2020-12-21T17:30:10.437Z",
    "devdoc": {
        "methods": {}
    },
    "userdoc": {
        "methods": {}
    }
}
