{
  "contractName": "CheckBitcoinSigs",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol\":\"CheckBitcoinSigs\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol\":{\"keccak256\":\"0x461cc52e40ba53e646f5c9505b992baa3d5b3c98ae5718561e61b3bc6c726d52\",\"urls\":[\"bzz-raw://90cf2e608b660671642a616ec044e2a39e8ceb7079315b6133ec978c47af9f98\",\"dweb:/ipfs/QmX4hyYS99RYWiQ7BwLXuvQpU5x62YbjJWLgYFwrPkYbzT\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\":{\"keccak256\":\"0x43451fdb4c4d55c01122411a4cf89a5c544c2bd4b646ee1d1f306626275324bf\",\"urls\":[\"bzz-raw://db93f07c32fa294d416aaab1b19a205772f2a3fa573fd380e5641e7770193ccf\",\"dweb:/ipfs/QmVE4y8cFKWZGKEfTM9Q3YreAArpMTTALHNr2tcvcNDnbi\"]},\"@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol\":{\"keccak256\":\"0x2fcbfa2440f69e346d5e14d960b14498f6484f83713fe7cec1ecf4abea3835a1\",\"urls\":[\"bzz-raw://4a385ef55a53dd0dcd1b687a47dbf6785580883a0be0cb10c617c338a35f3a8b\",\"dweb:/ipfs/QmZp9AT146beL3SoETJCWsJ4zzAZQavy9oGCYPiwAofEtq\"]},\"@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol\":{\"keccak256\":\"0x22d34c04c68c2a77ee83e2ef3756f6e6bad6ad675560d777e612315d7eb83935\",\"urls\":[\"bzz-raw://b642c61be1d34e153e4f9cc139291fa26f4ecf31a3acc5b960aad20f4f689eeb\",\"dweb:/ipfs/QmWADdVTCSyvtgb76AxFFkAr9h9jbY57Mj5X6xiEqCqmMu\"]}},\"version\":1}",
  "bytecode": "0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158201a1073891bb4d51fe0c19e44c068e3f68cb6bb684e3256e74be2a5bec44bb5a464736f6c63430005110032",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158201a1073891bb4d51fe0c19e44c068e3f68cb6bb684e3256e74be2a5bec44bb5a464736f6c63430005110032",
  "sourceMap": "183:9336:50:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
  "deployedSourceMap": "183:9336:50:-;;;;;;;;",
  "source": "pragma solidity ^0.5.10;\n\n/** @title CheckBitcoinSigs */\n/** @author Summa (https://summa.one) */\n\nimport {BytesLib} from \"./BytesLib.sol\";\nimport {BTCUtils} from \"./BTCUtils.sol\";\n\n\nlibrary CheckBitcoinSigs {\n\n    using BytesLib for bytes;\n    using BTCUtils for bytes;\n\n    /// @notice          Derives an Ethereum Account address from a pubkey\n    /// @dev             The address is the last 20 bytes of the keccak256 of the address\n    /// @param _pubkey   The public key X & Y. Unprefixed, as a 64-byte array\n    /// @return          The account address\n    function accountFromPubkey(bytes memory _pubkey) internal pure returns (address) {\n        require(_pubkey.length == 64, \"Pubkey must be 64-byte raw, uncompressed key.\");\n\n        // keccak hash of uncompressed unprefixed pubkey\n        bytes32 _digest = keccak256(_pubkey);\n        return address(uint256(_digest));\n    }\n\n    /// @notice          Calculates the p2wpkh output script of a pubkey\n    /// @dev             Compresses keys to 33 bytes as required by Bitcoin\n    /// @param _pubkey   The public key, compressed or uncompressed\n    /// @return          The p2wkph output script\n    function p2wpkhFromPubkey(bytes memory _pubkey) internal pure returns (bytes memory) {\n        bytes memory _compressedPubkey;\n        uint8 _prefix;\n\n        if (_pubkey.length == 64) {\n            _prefix = uint8(_pubkey[_pubkey.length - 1]) % 2 == 1 ? 3 : 2;\n            _compressedPubkey = abi.encodePacked(_prefix, _pubkey.slice(0, 32));\n        } else if (_pubkey.length == 65) {\n            _prefix = uint8(_pubkey[_pubkey.length - 1]) % 2 == 1 ? 3 : 2;\n            _compressedPubkey = abi.encodePacked(_prefix, _pubkey.slice(1, 32));\n        } else {\n            _compressedPubkey = _pubkey;\n        }\n\n        require(_compressedPubkey.length == 33, \"Witness PKH requires compressed keys\");\n\n        bytes memory _pubkeyHash = _compressedPubkey.hash160();\n        return abi.encodePacked(hex\"0014\", _pubkeyHash);\n    }\n\n    /// @notice          checks a signed message's validity under a pubkey\n    /// @dev             does this using ecrecover because Ethereum has no soul\n    /// @param _pubkey   the public key to check (64 bytes)\n    /// @param _digest   the message digest signed\n    /// @param _v        the signature recovery value\n    /// @param _r        the signature r value\n    /// @param _s        the signature s value\n    /// @return          true if signature is valid, else false\n    function checkSig(\n        bytes memory _pubkey,\n        bytes32 _digest,\n        uint8 _v,\n        bytes32 _r,\n        bytes32 _s\n    ) internal pure returns (bool) {\n        require(_pubkey.length == 64, \"Requires uncompressed unprefixed pubkey\");\n        address _expected = accountFromPubkey(_pubkey);\n        address _actual = ecrecover(_digest, _v, _r, _s);\n        return _actual == _expected;\n    }\n\n    /// @notice                     checks a signed message against a bitcoin p2wpkh output script\n    /// @dev                        does this my verifying the p2wpkh matches an ethereum account\n    /// @param _p2wpkhOutputScript  the bitcoin output script\n    /// @param _pubkey              the uncompressed, unprefixed public key to check\n    /// @param _digest              the message digest signed\n    /// @param _v                   the signature recovery value\n    /// @param _r                   the signature r value\n    /// @param _s                   the signature s value\n    /// @return                     true if signature is valid, else false\n    function checkBitcoinSig(\n        bytes memory _p2wpkhOutputScript,\n        bytes memory _pubkey,\n        bytes32 _digest,\n        uint8 _v,\n        bytes32 _r,\n        bytes32 _s\n    ) internal pure returns (bool) {\n        require(_pubkey.length == 64, \"Requires uncompressed unprefixed pubkey\");\n\n        bool _isExpectedSigner = keccak256(p2wpkhFromPubkey(_pubkey)) == keccak256(_p2wpkhOutputScript);  // is it the expected signer?\n        if (!_isExpectedSigner) {return false;}\n\n        bool _sigResult = checkSig(_pubkey, _digest, _v, _r, _s);\n        return _sigResult;\n    }\n\n    /// @notice             checks if a message is the sha256 preimage of a digest\n    /// @dev                this is NOT the hash256!  this step is necessary for ECDSA security!\n    /// @param _digest      the digest\n    /// @param _candidate   the purported preimage\n    /// @return             true if the preimage matches the digest, else false\n    function isSha256Preimage(\n        bytes memory _candidate,\n        bytes32 _digest\n    ) internal pure returns (bool) {\n        return sha256(_candidate) == _digest;\n    }\n\n    /// @notice             checks if a message is the keccak256 preimage of a digest\n    /// @dev                this step is necessary for ECDSA security!\n    /// @param _digest      the digest\n    /// @param _candidate   the purported preimage\n    /// @return             true if the preimage matches the digest, else false\n    function isKeccak256Preimage(\n        bytes memory _candidate,\n        bytes32 _digest\n    ) internal pure returns (bool) {\n        return keccak256(_candidate) == _digest;\n    }\n\n    /// @notice                 calculates the signature hash of a Bitcoin transaction with the provided details\n    /// @dev                    documented in bip143. many values are hardcoded here\n    /// @param _outpoint        the bitcoin UTXO id (32-byte txid + 4-byte output index)\n    /// @param _inputPKH        the input pubkeyhash (hash160(sender_pubkey))\n    /// @param _inputValue      the value of the input in satoshi\n    /// @param _outputValue     the value of the output in satoshi\n    /// @param _outputScript    the length-prefixed output script\n    /// @return                 the double-sha256 (hash256) signature hash as defined by bip143\n    function wpkhSpendSighash(\n        bytes memory _outpoint,  // 36-byte UTXO id\n        bytes20 _inputPKH,       // 20-byte hash160\n        bytes8 _inputValue,      // 8-byte LE\n        bytes8 _outputValue,     // 8-byte LE\n        bytes memory _outputScript    // lenght-prefixed output script\n    ) internal pure returns (bytes32) {\n        // Fixes elements to easily make a 1-in 1-out sighash digest\n        // Does not support timelocks\n        bytes memory _scriptCode = abi.encodePacked(\n            hex\"1976a914\",  // length, dup, hash160, pkh_length\n            _inputPKH,\n            hex\"88ac\");  // equal, checksig\n        bytes32 _hashOutputs = abi.encodePacked(\n            _outputValue,  // 8-byte LE\n            _outputScript).hash256();\n        bytes memory _sighashPreimage = abi.encodePacked(\n            hex\"01000000\",  // version\n            _outpoint.hash256(),  // hashPrevouts\n            hex\"8cb9012517c817fead650287d61bdd9c68803b6bf9c64133dcab3e65b5a50cb9\",  // hashSequence(00000000)\n            _outpoint,  // outpoint\n            _scriptCode,  // p2wpkh script code\n            _inputValue,  // value of the input in 8-byte LE\n            hex\"00000000\",  // input nSequence\n            _hashOutputs,  // hash of the single output\n            hex\"00000000\",  // nLockTime\n            hex\"01000000\"  // SIGHASH_ALL\n        );\n        return _sighashPreimage.hash256();\n    }\n\n    /// @notice                 calculates the signature hash of a Bitcoin transaction with the provided details\n    /// @dev                    documented in bip143. many values are hardcoded here\n    /// @param _outpoint        the bitcoin UTXO id (32-byte txid + 4-byte output index)\n    /// @param _inputPKH        the input pubkeyhash (hash160(sender_pubkey))\n    /// @param _inputValue      the value of the input in satoshi\n    /// @param _outputValue     the value of the output in satoshi\n    /// @param _outputPKH       the output pubkeyhash (hash160(recipient_pubkey))\n    /// @return                 the double-sha256 (hash256) signature hash as defined by bip143\n    function wpkhToWpkhSighash(\n        bytes memory _outpoint,  // 36-byte UTXO id\n        bytes20 _inputPKH,  // 20-byte hash160\n        bytes8 _inputValue,  // 8-byte LE\n        bytes8 _outputValue,  // 8-byte LE\n        bytes20 _outputPKH  // 20-byte hash160\n    ) internal pure returns (bytes32) {\n        return wpkhSpendSighash(\n            _outpoint,\n            _inputPKH,\n            _inputValue,\n            _outputValue,\n            abi.encodePacked(\n              hex\"160014\",  // wpkh tag\n              _outputPKH)\n            );\n    }\n\n    /// @notice                 Preserved for API compatibility with older version\n    /// @dev                    documented in bip143. many values are hardcoded here\n    /// @param _outpoint        the bitcoin UTXO id (32-byte txid + 4-byte output index)\n    /// @param _inputPKH        the input pubkeyhash (hash160(sender_pubkey))\n    /// @param _inputValue      the value of the input in satoshi\n    /// @param _outputValue     the value of the output in satoshi\n    /// @param _outputPKH       the output pubkeyhash (hash160(recipient_pubkey))\n    /// @return                 the double-sha256 (hash256) signature hash as defined by bip143\n    function oneInputOneOutputSighash(\n        bytes memory _outpoint,  // 36-byte UTXO id\n        bytes20 _inputPKH,  // 20-byte hash160\n        bytes8 _inputValue,  // 8-byte LE\n        bytes8 _outputValue,  // 8-byte LE\n        bytes20 _outputPKH  // 20-byte hash160\n    ) internal pure returns (bytes32) {\n        return wpkhToWpkhSighash(_outpoint, _inputPKH, _inputValue, _outputValue, _outputPKH);\n    }\n\n}\n",
  "sourcePath": "@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol",
  "ast": {
    "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol",
    "exportedSymbols": {
      "CheckBitcoinSigs": [
        13824
      ]
    },
    "id": 13825,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13434,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".10"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:50"
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
        "file": "./BytesLib.sol",
        "id": 13436,
        "nodeType": "ImportDirective",
        "scope": 13825,
        "sourceUnit": 13433,
        "src": "99:40:50",
        "symbolAliases": [
          {
            "foreign": 13435,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
        "file": "./BTCUtils.sol",
        "id": 13438,
        "nodeType": "ImportDirective",
        "scope": 13825,
        "sourceUnit": 13217,
        "src": "140:40:50",
        "symbolAliases": [
          {
            "foreign": 13437,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 13824,
        "linearizedBaseContracts": [
          13824
        ],
        "name": "CheckBitcoinSigs",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 13441,
            "libraryName": {
              "contractScope": null,
              "id": 13439,
              "name": "BytesLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13432,
              "src": "221:8:50",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesLib_$13432",
                "typeString": "library BytesLib"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "215:25:50",
            "typeName": {
              "id": 13440,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "234:5:50",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 13444,
            "libraryName": {
              "contractScope": null,
              "id": 13442,
              "name": "BTCUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13216,
              "src": "251:8:50",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BTCUtils_$13216",
                "typeString": "library BTCUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "245:25:50",
            "typeName": {
              "id": 13443,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "264:5:50",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "body": {
              "id": 13471,
              "nodeType": "Block",
              "src": "645:241:50",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13455,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13452,
                            "name": "_pubkey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13446,
                            "src": "663:7:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 13453,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "663:14:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3634",
                          "id": 13454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "681:2:50",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_64_by_1",
                            "typeString": "int_const 64"
                          },
                          "value": "64"
                        },
                        "src": "663:20:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5075626b6579206d7573742062652036342d62797465207261772c20756e636f6d70726573736564206b65792e",
                        "id": 13456,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "685:47:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_11d20ef29e7893ed702eedc75fa3cc1af6cbdd1ebc7d957340e8a4f01a385d50",
                          "typeString": "literal_string \"Pubkey must be 64-byte raw, uncompressed key.\""
                        },
                        "value": "Pubkey must be 64-byte raw, uncompressed key."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_11d20ef29e7893ed702eedc75fa3cc1af6cbdd1ebc7d957340e8a4f01a385d50",
                          "typeString": "literal_string \"Pubkey must be 64-byte raw, uncompressed key.\""
                        }
                      ],
                      "id": 13451,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "655:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "655:78:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13458,
                  "nodeType": "ExpressionStatement",
                  "src": "655:78:50"
                },
                {
                  "assignments": [
                    13460
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13460,
                      "name": "_digest",
                      "nodeType": "VariableDeclaration",
                      "scope": 13471,
                      "src": "801:15:50",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 13459,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "801:7:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13464,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13462,
                        "name": "_pubkey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13446,
                        "src": "829:7:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 13461,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18354,
                      "src": "819:9:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 13463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "819:18:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "801:36:50"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13467,
                            "name": "_digest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13460,
                            "src": "870:7:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 13466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "862:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 13468,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "862:16:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13465,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "854:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "854:25:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 13450,
                  "id": 13470,
                  "nodeType": "Return",
                  "src": "847:32:50"
                }
              ]
            },
            "documentation": "@notice          Derives an Ethereum Account address from a pubkey\n @dev             The address is the last 20 bytes of the keccak256 of the address\n @param _pubkey   The public key X & Y. Unprefixed, as a 64-byte array\n @return          The account address",
            "id": 13472,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "accountFromPubkey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13447,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13446,
                  "name": "_pubkey",
                  "nodeType": "VariableDeclaration",
                  "scope": 13472,
                  "src": "591:20:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13445,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "591:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "590:22:50"
            },
            "returnParameters": {
              "id": 13450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13449,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13472,
                  "src": "636:7:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "636:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "635:9:50"
            },
            "scope": 13824,
            "src": "564:322:50",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13582,
              "nodeType": "Block",
              "src": "1244:742:50",
              "statements": [
                {
                  "assignments": [
                    13480
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13480,
                      "name": "_compressedPubkey",
                      "nodeType": "VariableDeclaration",
                      "scope": 13582,
                      "src": "1254:30:50",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 13479,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1254:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13481,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1254:30:50"
                },
                {
                  "assignments": [
                    13483
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13483,
                      "name": "_prefix",
                      "nodeType": "VariableDeclaration",
                      "scope": 13582,
                      "src": "1294:13:50",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 13482,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "1294:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13484,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1294:13:50"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 13485,
                        "name": "_pubkey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13474,
                        "src": "1322:7:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 13486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1322:14:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3634",
                      "id": 13487,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1340:2:50",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_64_by_1",
                        "typeString": "int_const 64"
                      },
                      "value": "64"
                    },
                    "src": "1322:20:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 13523,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13520,
                          "name": "_pubkey",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13474,
                          "src": "1521:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 13521,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1521:14:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "3635",
                        "id": 13522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1539:2:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_65_by_1",
                          "typeString": "int_const 65"
                        },
                        "value": "65"
                      },
                      "src": "1521:20:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 13559,
                      "nodeType": "Block",
                      "src": "1716:52:50",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 13557,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 13555,
                              "name": "_compressedPubkey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13480,
                              "src": "1730:17:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "id": 13556,
                              "name": "_pubkey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13474,
                              "src": "1750:7:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "src": "1730:27:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 13558,
                          "nodeType": "ExpressionStatement",
                          "src": "1730:27:50"
                        }
                      ]
                    },
                    "id": 13560,
                    "nodeType": "IfStatement",
                    "src": "1517:251:50",
                    "trueBody": {
                      "id": 13554,
                      "nodeType": "Block",
                      "src": "1543:167:50",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 13540,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 13524,
                              "name": "_prefix",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13483,
                              "src": "1557:7:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 13536,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 13534,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13526,
                                          "name": "_pubkey",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13474,
                                          "src": "1573:7:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 13531,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 13530,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13527,
                                              "name": "_pubkey",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 13474,
                                              "src": "1581:7:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 13528,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "1581:14:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 13529,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1598:1:50",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "1581:18:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "1573:27:50",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      ],
                                      "id": 13525,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "1567:5:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint8_$",
                                        "typeString": "type(uint8)"
                                      },
                                      "typeName": "uint8"
                                    },
                                    "id": 13532,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1567:34:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "32",
                                    "id": 13533,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1604:1:50",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "1567:38:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 13535,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1609:1:50",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "1567:43:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 13538,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1617:1:50",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "id": 13539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "1567:51:50",
                              "trueExpression": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 13537,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1613:1:50",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "src": "1557:61:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "id": 13541,
                          "nodeType": "ExpressionStatement",
                          "src": "1557:61:50"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 13552,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 13542,
                              "name": "_compressedPubkey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13480,
                              "src": "1632:17:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 13545,
                                  "name": "_prefix",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13483,
                                  "src": "1669:7:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 13548,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1692:1:50",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "3332",
                                      "id": 13549,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1695:2:50",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13546,
                                      "name": "_pubkey",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13474,
                                      "src": "1678:7:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 13547,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "slice",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 13281,
                                    "src": "1678:13:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                      "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 13550,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1678:20:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 13543,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18347,
                                  "src": "1652:3:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 13544,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1652:16:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 13551,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1652:47:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "src": "1632:67:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 13553,
                          "nodeType": "ExpressionStatement",
                          "src": "1632:67:50"
                        }
                      ]
                    }
                  },
                  "id": 13561,
                  "nodeType": "IfStatement",
                  "src": "1318:450:50",
                  "trueBody": {
                    "id": 13519,
                    "nodeType": "Block",
                    "src": "1344:167:50",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 13505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 13489,
                            "name": "_prefix",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13483,
                            "src": "1358:7:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "id": 13501,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 13499,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 13491,
                                        "name": "_pubkey",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13474,
                                        "src": "1374:7:50",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 13496,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 13495,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 13492,
                                            "name": "_pubkey",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 13474,
                                            "src": "1382:7:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 13493,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "length",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "1382:14:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 13494,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1399:1:50",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "src": "1382:18:50",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "1374:27:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes1",
                                        "typeString": "bytes1"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes1",
                                        "typeString": "bytes1"
                                      }
                                    ],
                                    "id": 13490,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1368:5:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint8_$",
                                      "typeString": "type(uint8)"
                                    },
                                    "typeName": "uint8"
                                  },
                                  "id": 13497,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1368:34:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "%",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "32",
                                  "id": 13498,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1405:1:50",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "1368:38:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 13500,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1410:1:50",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "1368:43:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 13503,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1418:1:50",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "id": 13504,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "1368:51:50",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "33",
                              "id": 13502,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1414:1:50",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_3_by_1",
                                "typeString": "int_const 3"
                              },
                              "value": "3"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "1358:61:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 13506,
                        "nodeType": "ExpressionStatement",
                        "src": "1358:61:50"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 13517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 13507,
                            "name": "_compressedPubkey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13480,
                            "src": "1433:17:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 13510,
                                "name": "_prefix",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13483,
                                "src": "1470:7:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 13513,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1493:1:50",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "3332",
                                    "id": 13514,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1496:2:50",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13511,
                                    "name": "_pubkey",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13474,
                                    "src": "1479:7:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 13512,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "slice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 13281,
                                  "src": "1479:13:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                  }
                                },
                                "id": 13515,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1479:20:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 13508,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18347,
                                "src": "1453:3:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 13509,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1453:16:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 13516,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1453:47:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "1433:67:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 13518,
                        "nodeType": "ExpressionStatement",
                        "src": "1433:67:50"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13566,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13563,
                            "name": "_compressedPubkey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13480,
                            "src": "1786:17:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 13564,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1786:24:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3333",
                          "id": 13565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1814:2:50",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_33_by_1",
                            "typeString": "int_const 33"
                          },
                          "value": "33"
                        },
                        "src": "1786:30:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5769746e65737320504b4820726571756972657320636f6d70726573736564206b657973",
                        "id": 13567,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1818:38:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a0bf759ce732e682de2576e7735931b81573c3f21ddf59e01a9e6e76a9dc5377",
                          "typeString": "literal_string \"Witness PKH requires compressed keys\""
                        },
                        "value": "Witness PKH requires compressed keys"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a0bf759ce732e682de2576e7735931b81573c3f21ddf59e01a9e6e76a9dc5377",
                          "typeString": "literal_string \"Witness PKH requires compressed keys\""
                        }
                      ],
                      "id": 13562,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "1778:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1778:79:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13569,
                  "nodeType": "ExpressionStatement",
                  "src": "1778:79:50"
                },
                {
                  "assignments": [
                    13571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13571,
                      "name": "_pubkeyHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 13582,
                      "src": "1868:24:50",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 13570,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1868:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13575,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13572,
                        "name": "_compressedPubkey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13480,
                        "src": "1895:17:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 13573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash160",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11834,
                      "src": "1895:25:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) pure returns (bytes memory)"
                      }
                    },
                    "id": 13574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1895:27:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1868:54:50"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "0014",
                        "id": 13578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1956:9:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8c9fd6988effdf130d07ed4911a231819d049b576b0676ca29490d955c0caa21",
                          "typeString": "literal_string \"\u0000\u0014\""
                        },
                        "value": "\u0000\u0014"
                      },
                      {
                        "argumentTypes": null,
                        "id": 13579,
                        "name": "_pubkeyHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13571,
                        "src": "1967:11:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_8c9fd6988effdf130d07ed4911a231819d049b576b0676ca29490d955c0caa21",
                          "typeString": "literal_string \"\u0000\u0014\""
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13576,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18347,
                        "src": "1939:3:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 13577,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1939:16:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 13580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1939:40:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 13478,
                  "id": 13581,
                  "nodeType": "Return",
                  "src": "1932:47:50"
                }
              ]
            },
            "documentation": "@notice          Calculates the p2wpkh output script of a pubkey\n @dev             Compresses keys to 33 bytes as required by Bitcoin\n @param _pubkey   The public key, compressed or uncompressed\n @return          The p2wkph output script",
            "id": 13583,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "p2wpkhFromPubkey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13474,
                  "name": "_pubkey",
                  "nodeType": "VariableDeclaration",
                  "scope": 13583,
                  "src": "1185:20:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13473,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1185:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1184:22:50"
            },
            "returnParameters": {
              "id": 13478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13477,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13583,
                  "src": "1230:12:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13476,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1230:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1229:14:50"
            },
            "scope": 13824,
            "src": "1159:827:50",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13625,
              "nodeType": "Block",
              "src": "2636:240:50",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13599,
                            "name": "_pubkey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13585,
                            "src": "2654:7:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 13600,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2654:14:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3634",
                          "id": 13601,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2672:2:50",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_64_by_1",
                            "typeString": "int_const 64"
                          },
                          "value": "64"
                        },
                        "src": "2654:20:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526571756972657320756e636f6d7072657373656420756e7072656669786564207075626b6579",
                        "id": 13603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2676:41:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76e201f560bb06e643cc11800c62474e6314a825097aac30ef085d258132e9ec",
                          "typeString": "literal_string \"Requires uncompressed unprefixed pubkey\""
                        },
                        "value": "Requires uncompressed unprefixed pubkey"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_76e201f560bb06e643cc11800c62474e6314a825097aac30ef085d258132e9ec",
                          "typeString": "literal_string \"Requires uncompressed unprefixed pubkey\""
                        }
                      ],
                      "id": 13598,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "2646:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2646:72:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13605,
                  "nodeType": "ExpressionStatement",
                  "src": "2646:72:50"
                },
                {
                  "assignments": [
                    13607
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13607,
                      "name": "_expected",
                      "nodeType": "VariableDeclaration",
                      "scope": 13625,
                      "src": "2728:17:50",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 13606,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2728:7:50",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13611,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13609,
                        "name": "_pubkey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13585,
                        "src": "2766:7:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 13608,
                      "name": "accountFromPubkey",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13472,
                      "src": "2748:17:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes memory) pure returns (address)"
                      }
                    },
                    "id": 13610,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2748:26:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2728:46:50"
                },
                {
                  "assignments": [
                    13613
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13613,
                      "name": "_actual",
                      "nodeType": "VariableDeclaration",
                      "scope": 13625,
                      "src": "2784:15:50",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 13612,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2784:7:50",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13620,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13615,
                        "name": "_digest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13587,
                        "src": "2812:7:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13616,
                        "name": "_v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13589,
                        "src": "2821:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13617,
                        "name": "_r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13591,
                        "src": "2825:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13618,
                        "name": "_s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13593,
                        "src": "2829:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 13614,
                      "name": "ecrecover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18352,
                      "src": "2802:9:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                      }
                    },
                    "id": 13619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2802:30:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2784:48:50"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13621,
                      "name": "_actual",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13613,
                      "src": "2849:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 13622,
                      "name": "_expected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13607,
                      "src": "2860:9:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2849:20:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13597,
                  "id": 13624,
                  "nodeType": "Return",
                  "src": "2842:27:50"
                }
              ]
            },
            "documentation": "@notice          checks a signed message's validity under a pubkey\n @dev             does this using ecrecover because Ethereum has no soul\n @param _pubkey   the public key to check (64 bytes)\n @param _digest   the message digest signed\n @param _v        the signature recovery value\n @param _r        the signature r value\n @param _s        the signature s value\n @return          true if signature is valid, else false",
            "id": 13626,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkSig",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13594,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13585,
                  "name": "_pubkey",
                  "nodeType": "VariableDeclaration",
                  "scope": 13626,
                  "src": "2497:20:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13584,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2497:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13587,
                  "name": "_digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 13626,
                  "src": "2527:15:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13586,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2527:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13589,
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "scope": 13626,
                  "src": "2552:8:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 13588,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2552:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13591,
                  "name": "_r",
                  "nodeType": "VariableDeclaration",
                  "scope": 13626,
                  "src": "2570:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13590,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2570:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13593,
                  "name": "_s",
                  "nodeType": "VariableDeclaration",
                  "scope": 13626,
                  "src": "2590:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13592,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2590:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2487:119:50"
            },
            "returnParameters": {
              "id": 13597,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13596,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13626,
                  "src": "2630:4:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13595,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2630:4:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2629:6:50"
            },
            "scope": 13824,
            "src": "2470:406:50",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13681,
              "nodeType": "Block",
              "src": "3759:368:50",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13647,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13644,
                            "name": "_pubkey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13630,
                            "src": "3777:7:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 13645,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3777:14:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3634",
                          "id": 13646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3795:2:50",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_64_by_1",
                            "typeString": "int_const 64"
                          },
                          "value": "64"
                        },
                        "src": "3777:20:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526571756972657320756e636f6d7072657373656420756e7072656669786564207075626b6579",
                        "id": 13648,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3799:41:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76e201f560bb06e643cc11800c62474e6314a825097aac30ef085d258132e9ec",
                          "typeString": "literal_string \"Requires uncompressed unprefixed pubkey\""
                        },
                        "value": "Requires uncompressed unprefixed pubkey"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_76e201f560bb06e643cc11800c62474e6314a825097aac30ef085d258132e9ec",
                          "typeString": "literal_string \"Requires uncompressed unprefixed pubkey\""
                        }
                      ],
                      "id": 13643,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "3769:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3769:72:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13650,
                  "nodeType": "ExpressionStatement",
                  "src": "3769:72:50"
                },
                {
                  "assignments": [
                    13652
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13652,
                      "name": "_isExpectedSigner",
                      "nodeType": "VariableDeclaration",
                      "scope": 13681,
                      "src": "3852:22:50",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 13651,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3852:4:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13662,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 13661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 13655,
                              "name": "_pubkey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13630,
                              "src": "3904:7:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 13654,
                            "name": "p2wpkhFromPubkey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13583,
                            "src": "3887:16:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 13656,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3887:25:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 13653,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18354,
                        "src": "3877:9:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 13657,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3877:36:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13659,
                          "name": "_p2wpkhOutputScript",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13628,
                          "src": "3927:19:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 13658,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18354,
                        "src": "3917:9:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 13660,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3917:30:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3877:70:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3852:95:50"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 13664,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "3992:18:50",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 13663,
                      "name": "_isExpectedSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13652,
                      "src": "3993:17:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13668,
                  "nodeType": "IfStatement",
                  "src": "3988:39:50",
                  "trueBody": {
                    "id": 13667,
                    "nodeType": "Block",
                    "src": "4012:15:50",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 13665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4020:5:50",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 13642,
                        "id": 13666,
                        "nodeType": "Return",
                        "src": "4013:12:50"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    13670
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13670,
                      "name": "_sigResult",
                      "nodeType": "VariableDeclaration",
                      "scope": 13681,
                      "src": "4037:15:50",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 13669,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4037:4:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13678,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13672,
                        "name": "_pubkey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13630,
                        "src": "4064:7:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13673,
                        "name": "_digest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13632,
                        "src": "4073:7:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13674,
                        "name": "_v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13634,
                        "src": "4082:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13675,
                        "name": "_r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13636,
                        "src": "4086:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13676,
                        "name": "_s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13638,
                        "src": "4090:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 13671,
                      "name": "checkSig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13626,
                      "src": "4055:8:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (bytes memory,bytes32,uint8,bytes32,bytes32) pure returns (bool)"
                      }
                    },
                    "id": 13677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4055:38:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4037:56:50"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13679,
                    "name": "_sigResult",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13670,
                    "src": "4110:10:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13642,
                  "id": 13680,
                  "nodeType": "Return",
                  "src": "4103:17:50"
                }
              ]
            },
            "documentation": "@notice                     checks a signed message against a bitcoin p2wpkh output script\n @dev                        does this my verifying the p2wpkh matches an ethereum account\n @param _p2wpkhOutputScript  the bitcoin output script\n @param _pubkey              the uncompressed, unprefixed public key to check\n @param _digest              the message digest signed\n @param _v                   the signature recovery value\n @param _r                   the signature r value\n @param _s                   the signature s value\n @return                     true if signature is valid, else false",
            "id": 13682,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkBitcoinSig",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13639,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13628,
                  "name": "_p2wpkhOutputScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 13682,
                  "src": "3578:32:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13627,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3578:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13630,
                  "name": "_pubkey",
                  "nodeType": "VariableDeclaration",
                  "scope": 13682,
                  "src": "3620:20:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13629,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3620:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13632,
                  "name": "_digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 13682,
                  "src": "3650:15:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13631,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3650:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13634,
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "scope": 13682,
                  "src": "3675:8:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 13633,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3675:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13636,
                  "name": "_r",
                  "nodeType": "VariableDeclaration",
                  "scope": 13682,
                  "src": "3693:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13635,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3693:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13638,
                  "name": "_s",
                  "nodeType": "VariableDeclaration",
                  "scope": 13682,
                  "src": "3713:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13637,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3713:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3568:161:50"
            },
            "returnParameters": {
              "id": 13642,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13641,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13682,
                  "src": "3753:4:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13640,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3753:4:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3752:6:50"
            },
            "scope": 13824,
            "src": "3544:583:50",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13697,
              "nodeType": "Block",
              "src": "4602:53:50",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 13695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13692,
                          "name": "_candidate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13684,
                          "src": "4626:10:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 13691,
                        "name": "sha256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18369,
                        "src": "4619:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_sha256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 13693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4619:18:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 13694,
                      "name": "_digest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13686,
                      "src": "4641:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4619:29:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13690,
                  "id": 13696,
                  "nodeType": "Return",
                  "src": "4612:36:50"
                }
              ]
            },
            "documentation": "@notice             checks if a message is the sha256 preimage of a digest\n @dev                this is NOT the hash256!  this step is necessary for ECDSA security!\n @param _digest      the digest\n @param _candidate   the purported preimage\n @return             true if the preimage matches the digest, else false",
            "id": 13698,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isSha256Preimage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13684,
                  "name": "_candidate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13698,
                  "src": "4518:23:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13683,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4518:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13686,
                  "name": "_digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 13698,
                  "src": "4551:15:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13685,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4551:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4508:64:50"
            },
            "returnParameters": {
              "id": 13690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13689,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13698,
                  "src": "4596:4:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13688,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4596:4:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4595:6:50"
            },
            "scope": 13824,
            "src": "4483:172:50",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13713,
              "nodeType": "Block",
              "src": "5110:56:50",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 13711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13708,
                          "name": "_candidate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13700,
                          "src": "5137:10:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 13707,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18354,
                        "src": "5127:9:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 13709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5127:21:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 13710,
                      "name": "_digest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13702,
                      "src": "5152:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "5127:32:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13706,
                  "id": 13712,
                  "nodeType": "Return",
                  "src": "5120:39:50"
                }
              ]
            },
            "documentation": "@notice             checks if a message is the keccak256 preimage of a digest\n @dev                this step is necessary for ECDSA security!\n @param _digest      the digest\n @param _candidate   the purported preimage\n @return             true if the preimage matches the digest, else false",
            "id": 13714,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isKeccak256Preimage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13700,
                  "name": "_candidate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13714,
                  "src": "5026:23:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13699,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5026:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13702,
                  "name": "_digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 13714,
                  "src": "5059:15:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13701,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5059:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5016:64:50"
            },
            "returnParameters": {
              "id": 13706,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13705,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13714,
                  "src": "5104:4:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13704,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5104:4:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5103:6:50"
            },
            "scope": 13824,
            "src": "4988:178:50",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13770,
              "nodeType": "Block",
              "src": "6164:1067:50",
              "statements": [
                {
                  "assignments": [
                    13730
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13730,
                      "name": "_scriptCode",
                      "nodeType": "VariableDeclaration",
                      "scope": 13770,
                      "src": "6281:24:50",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 13729,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6281:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13737,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "1976a914",
                        "id": 13733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6338:13:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_16c8cfb2189d45894fd227d6cf32ba616da47433f9bbc2f735a1096c3618c12f",
                          "typeString": "literal_string (contains invalid UTF-8 sequence at position 2)"
                        },
                        "value": null
                      },
                      {
                        "argumentTypes": null,
                        "id": 13734,
                        "name": "_inputPKH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13718,
                        "src": "6402:9:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "88ac",
                        "id": 13735,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6425:9:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d",
                          "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                        },
                        "value": null
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_16c8cfb2189d45894fd227d6cf32ba616da47433f9bbc2f735a1096c3618c12f",
                          "typeString": "literal_string (contains invalid UTF-8 sequence at position 2)"
                        },
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d",
                          "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13731,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18347,
                        "src": "6308:3:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 13732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6308:16:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 13736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6308:127:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6281:154:50"
                },
                {
                  "assignments": [
                    13739
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13739,
                      "name": "_hashOutputs",
                      "nodeType": "VariableDeclaration",
                      "scope": 13770,
                      "src": "6465:20:50",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 13738,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6465:7:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13747,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13742,
                            "name": "_outputValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13722,
                            "src": "6518:12:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 13743,
                            "name": "_outputScript",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13724,
                            "src": "6558:13:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 13740,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18347,
                            "src": "6488:3:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 13741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6488:16:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 13744,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6488:84:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 13745,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash256",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11851,
                      "src": "6488:92:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 13746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6488:94:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6465:117:50"
                },
                {
                  "assignments": [
                    13749
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13749,
                      "name": "_sighashPreimage",
                      "nodeType": "VariableDeclaration",
                      "scope": 13770,
                      "src": "6592:29:50",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 13748,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6592:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13765,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "01000000",
                        "id": 13752,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6654:13:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e37890bf230cf36ea140a5dbb9a561aa7ef84f8f995873db8386eba4a95c7bbe",
                          "typeString": "literal_string \"\u0001\u0000\u0000\u0000\""
                        },
                        "value": "\u0001\u0000\u0000\u0000"
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 13753,
                            "name": "_outpoint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13716,
                            "src": "6693:9:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 13754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hash256",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11851,
                          "src": "6693:17:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 13755,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6693:19:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "8cb9012517c817fead650287d61bdd9c68803b6bf9c64133dcab3e65b5a50cb9",
                        "id": 13756,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6743:69:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_de9eeb8dbbea7702bb2ae084a168f6422ddcaa5a73975470e9f2441f0c122d45",
                          "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                        },
                        "value": null
                      },
                      {
                        "argumentTypes": null,
                        "id": 13757,
                        "name": "_outpoint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13716,
                        "src": "6853:9:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13758,
                        "name": "_scriptCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13730,
                        "src": "6889:11:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13759,
                        "name": "_inputValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13720,
                        "src": "6937:11:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "00000000",
                        "id": 13760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6998:13:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c",
                          "typeString": "literal_string \"\u0000\u0000\u0000\u0000\""
                        },
                        "value": "\u0000\u0000\u0000\u0000"
                      },
                      {
                        "argumentTypes": null,
                        "id": 13761,
                        "name": "_hashOutputs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13739,
                        "src": "7045:12:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "00000000",
                        "id": 13762,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7101:13:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c",
                          "typeString": "literal_string \"\u0000\u0000\u0000\u0000\""
                        },
                        "value": "\u0000\u0000\u0000\u0000"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "01000000",
                        "id": 13763,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7142:13:50",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e37890bf230cf36ea140a5dbb9a561aa7ef84f8f995873db8386eba4a95c7bbe",
                          "typeString": "literal_string \"\u0001\u0000\u0000\u0000\""
                        },
                        "value": "\u0001\u0000\u0000\u0000"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_e37890bf230cf36ea140a5dbb9a561aa7ef84f8f995873db8386eba4a95c7bbe",
                          "typeString": "literal_string \"\u0001\u0000\u0000\u0000\""
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_de9eeb8dbbea7702bb2ae084a168f6422ddcaa5a73975470e9f2441f0c122d45",
                          "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c",
                          "typeString": "literal_string \"\u0000\u0000\u0000\u0000\""
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c",
                          "typeString": "literal_string \"\u0000\u0000\u0000\u0000\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e37890bf230cf36ea140a5dbb9a561aa7ef84f8f995873db8386eba4a95c7bbe",
                          "typeString": "literal_string \"\u0001\u0000\u0000\u0000\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13750,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18347,
                        "src": "6624:3:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 13751,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6624:16:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 13764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6624:557:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6592:589:50"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13766,
                        "name": "_sighashPreimage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13749,
                        "src": "7198:16:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 13767,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash256",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11851,
                      "src": "7198:24:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 13768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7198:26:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 13728,
                  "id": 13769,
                  "nodeType": "Return",
                  "src": "7191:33:50"
                }
              ]
            },
            "documentation": "@notice                 calculates the signature hash of a Bitcoin transaction with the provided details\n @dev                    documented in bip143. many values are hardcoded here\n @param _outpoint        the bitcoin UTXO id (32-byte txid + 4-byte output index)\n @param _inputPKH        the input pubkeyhash (hash160(sender_pubkey))\n @param _inputValue      the value of the input in satoshi\n @param _outputValue     the value of the output in satoshi\n @param _outputScript    the length-prefixed output script\n @return                 the double-sha256 (hash256) signature hash as defined by bip143",
            "id": 13771,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "wpkhSpendSighash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13716,
                  "name": "_outpoint",
                  "nodeType": "VariableDeclaration",
                  "scope": 13771,
                  "src": "5867:22:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13715,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5867:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13718,
                  "name": "_inputPKH",
                  "nodeType": "VariableDeclaration",
                  "scope": 13771,
                  "src": "5919:17:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 13717,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "5919:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13720,
                  "name": "_inputValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 13771,
                  "src": "5971:18:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 13719,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5971:6:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13722,
                  "name": "_outputValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 13771,
                  "src": "6017:19:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 13721,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6017:6:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13724,
                  "name": "_outputScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 13771,
                  "src": "6063:26:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13723,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6063:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5857:274:50"
            },
            "returnParameters": {
              "id": 13728,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13727,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13771,
                  "src": "6155:7:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13726,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6155:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6154:9:50"
            },
            "scope": 13824,
            "src": "5832:1399:50",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13798,
              "nodeType": "Block",
              "src": "8210:248:50",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13787,
                        "name": "_outpoint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13773,
                        "src": "8257:9:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13788,
                        "name": "_inputPKH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13775,
                        "src": "8280:9:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13789,
                        "name": "_inputValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13777,
                        "src": "8303:11:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13790,
                        "name": "_outputValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13779,
                        "src": "8328:12:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "160014",
                            "id": 13793,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8386:11:50",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_bde11925feafe00f4d9d48ef4480be1ea68d808b9c557770a6133e20d41f44bf",
                              "typeString": "literal_string \"\u0016\u0000\u0014\""
                            },
                            "value": "\u0016\u0000\u0014"
                          },
                          {
                            "argumentTypes": null,
                            "id": 13794,
                            "name": "_outputPKH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13781,
                            "src": "8426:10:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_bde11925feafe00f4d9d48ef4480be1ea68d808b9c557770a6133e20d41f44bf",
                              "typeString": "literal_string \"\u0016\u0000\u0014\""
                            },
                            {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 13791,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18347,
                            "src": "8354:3:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 13792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "8354:16:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 13795,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8354:83:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 13786,
                      "name": "wpkhSpendSighash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13771,
                      "src": "8227:16:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes20_$_t_bytes8_$_t_bytes8_$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory,bytes20,bytes8,bytes8,bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 13796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8227:224:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 13785,
                  "id": 13797,
                  "nodeType": "Return",
                  "src": "8220:231:50"
                }
              ]
            },
            "documentation": "@notice                 calculates the signature hash of a Bitcoin transaction with the provided details\n @dev                    documented in bip143. many values are hardcoded here\n @param _outpoint        the bitcoin UTXO id (32-byte txid + 4-byte output index)\n @param _inputPKH        the input pubkeyhash (hash160(sender_pubkey))\n @param _inputValue      the value of the input in satoshi\n @param _outputValue     the value of the output in satoshi\n @param _outputPKH       the output pubkeyhash (hash160(recipient_pubkey))\n @return                 the double-sha256 (hash256) signature hash as defined by bip143",
            "id": 13799,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "wpkhToWpkhSighash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13773,
                  "name": "_outpoint",
                  "nodeType": "VariableDeclaration",
                  "scope": 13799,
                  "src": "7949:22:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13772,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7949:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13775,
                  "name": "_inputPKH",
                  "nodeType": "VariableDeclaration",
                  "scope": 13799,
                  "src": "8001:17:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 13774,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "8001:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13777,
                  "name": "_inputValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 13799,
                  "src": "8048:18:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 13776,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "8048:6:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13779,
                  "name": "_outputValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 13799,
                  "src": "8090:19:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 13778,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "8090:6:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13781,
                  "name": "_outputPKH",
                  "nodeType": "VariableDeclaration",
                  "scope": 13799,
                  "src": "8133:18:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 13780,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "8133:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7939:238:50"
            },
            "returnParameters": {
              "id": 13785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13784,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13799,
                  "src": "8201:7:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13783,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8201:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8200:9:50"
            },
            "scope": 13824,
            "src": "7913:545:50",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13822,
              "nodeType": "Block",
              "src": "9414:102:50",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13815,
                        "name": "_outpoint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13801,
                        "src": "9449:9:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13816,
                        "name": "_inputPKH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13803,
                        "src": "9460:9:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13817,
                        "name": "_inputValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13805,
                        "src": "9471:11:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13818,
                        "name": "_outputValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13807,
                        "src": "9484:12:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13819,
                        "name": "_outputPKH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13809,
                        "src": "9498:10:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      ],
                      "id": 13814,
                      "name": "wpkhToWpkhSighash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13799,
                      "src": "9431:17:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes20_$_t_bytes8_$_t_bytes8_$_t_bytes20_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory,bytes20,bytes8,bytes8,bytes20) pure returns (bytes32)"
                      }
                    },
                    "id": 13820,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9431:78:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 13813,
                  "id": 13821,
                  "nodeType": "Return",
                  "src": "9424:85:50"
                }
              ]
            },
            "documentation": "@notice                 Preserved for API compatibility with older version\n @dev                    documented in bip143. many values are hardcoded here\n @param _outpoint        the bitcoin UTXO id (32-byte txid + 4-byte output index)\n @param _inputPKH        the input pubkeyhash (hash160(sender_pubkey))\n @param _inputValue      the value of the input in satoshi\n @param _outputValue     the value of the output in satoshi\n @param _outputPKH       the output pubkeyhash (hash160(recipient_pubkey))\n @return                 the double-sha256 (hash256) signature hash as defined by bip143",
            "id": 13823,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "oneInputOneOutputSighash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13801,
                  "name": "_outpoint",
                  "nodeType": "VariableDeclaration",
                  "scope": 13823,
                  "src": "9153:22:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13800,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9153:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13803,
                  "name": "_inputPKH",
                  "nodeType": "VariableDeclaration",
                  "scope": 13823,
                  "src": "9205:17:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 13802,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "9205:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13805,
                  "name": "_inputValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 13823,
                  "src": "9252:18:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 13804,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "9252:6:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13807,
                  "name": "_outputValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 13823,
                  "src": "9294:19:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 13806,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "9294:6:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13809,
                  "name": "_outputPKH",
                  "nodeType": "VariableDeclaration",
                  "scope": 13823,
                  "src": "9337:18:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 13808,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "9337:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9143:238:50"
            },
            "returnParameters": {
              "id": 13813,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13812,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13823,
                  "src": "9405:7:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13811,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9405:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9404:9:50"
            },
            "scope": 13824,
            "src": "9110:406:50",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 13825,
        "src": "183:9336:50"
      }
    ],
    "src": "0:9520:50"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol",
      "exportedSymbols": {
        "CheckBitcoinSigs": [
          13824
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.5",
            ".10"
          ]
        },
        "id": 13434,
        "name": "PragmaDirective",
        "src": "0:24:50"
      },
      {
        "attributes": {
          "SourceUnit": 13433,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
          "file": "./BytesLib.sol",
          "scope": 13825,
          "symbolAliases": [
            {
              "foreign": 13435,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 13436,
        "name": "ImportDirective",
        "src": "99:40:50"
      },
      {
        "attributes": {
          "SourceUnit": 13217,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
          "file": "./BTCUtils.sol",
          "scope": 13825,
          "symbolAliases": [
            {
              "foreign": 13437,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 13438,
        "name": "ImportDirective",
        "src": "140:40:50"
      },
      {
        "attributes": {
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            13824
          ],
          "name": "CheckBitcoinSigs",
          "scope": 13825
        },
        "children": [
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "BytesLib",
                  "referencedDeclaration": 13432,
                  "type": "library BytesLib"
                },
                "id": 13439,
                "name": "UserDefinedTypeName",
                "src": "221:8:50"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 13440,
                "name": "ElementaryTypeName",
                "src": "234:5:50"
              }
            ],
            "id": 13441,
            "name": "UsingForDirective",
            "src": "215:25:50"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "BTCUtils",
                  "referencedDeclaration": 13216,
                  "type": "library BTCUtils"
                },
                "id": 13442,
                "name": "UserDefinedTypeName",
                "src": "251:8:50"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 13443,
                "name": "ElementaryTypeName",
                "src": "264:5:50"
              }
            ],
            "id": 13444,
            "name": "UsingForDirective",
            "src": "245:25:50"
          },
          {
            "attributes": {
              "documentation": "@notice          Derives an Ethereum Account address from a pubkey\n @dev             The address is the last 20 bytes of the keccak256 of the address\n @param _pubkey   The public key X & Y. Unprefixed, as a 64-byte array\n @return          The account address",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "accountFromPubkey",
              "scope": 13824,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_pubkey",
                      "scope": 13472,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13445,
                        "name": "ElementaryTypeName",
                        "src": "591:5:50"
                      }
                    ],
                    "id": 13446,
                    "name": "VariableDeclaration",
                    "src": "591:20:50"
                  }
                ],
                "id": 13447,
                "name": "ParameterList",
                "src": "590:22:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13472,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 13448,
                        "name": "ElementaryTypeName",
                        "src": "636:7:50"
                      }
                    ],
                    "id": 13449,
                    "name": "VariableDeclaration",
                    "src": "636:7:50"
                  }
                ],
                "id": 13450,
                "name": "ParameterList",
                "src": "635:9:50"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_11d20ef29e7893ed702eedc75fa3cc1af6cbdd1ebc7d957340e8a4f01a385d50",
                                  "typeString": "literal_string \"Pubkey must be 64-byte raw, uncompressed key.\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 13451,
                            "name": "Identifier",
                            "src": "655:7:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13446,
                                      "type": "bytes memory",
                                      "value": "_pubkey"
                                    },
                                    "id": 13452,
                                    "name": "Identifier",
                                    "src": "663:7:50"
                                  }
                                ],
                                "id": 13453,
                                "name": "MemberAccess",
                                "src": "663:14:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "3634",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 64",
                                  "value": "64"
                                },
                                "id": 13454,
                                "name": "Literal",
                                "src": "681:2:50"
                              }
                            ],
                            "id": 13455,
                            "name": "BinaryOperation",
                            "src": "663:20:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "5075626b6579206d7573742062652036342d62797465207261772c20756e636f6d70726573736564206b65792e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Pubkey must be 64-byte raw, uncompressed key.\"",
                              "value": "Pubkey must be 64-byte raw, uncompressed key."
                            },
                            "id": 13456,
                            "name": "Literal",
                            "src": "685:47:50"
                          }
                        ],
                        "id": 13457,
                        "name": "FunctionCall",
                        "src": "655:78:50"
                      }
                    ],
                    "id": 13458,
                    "name": "ExpressionStatement",
                    "src": "655:78:50"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13460
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_digest",
                          "scope": 13471,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 13459,
                            "name": "ElementaryTypeName",
                            "src": "801:7:50"
                          }
                        ],
                        "id": 13460,
                        "name": "VariableDeclaration",
                        "src": "801:15:50"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 18354,
                              "type": "function (bytes memory) pure returns (bytes32)",
                              "value": "keccak256"
                            },
                            "id": 13461,
                            "name": "Identifier",
                            "src": "819:9:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13446,
                              "type": "bytes memory",
                              "value": "_pubkey"
                            },
                            "id": 13462,
                            "name": "Identifier",
                            "src": "829:7:50"
                          }
                        ],
                        "id": 13463,
                        "name": "FunctionCall",
                        "src": "819:18:50"
                      }
                    ],
                    "id": 13464,
                    "name": "VariableDeclarationStatement",
                    "src": "801:36:50"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 13450
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address payable",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(address)",
                              "value": "address"
                            },
                            "id": 13465,
                            "name": "ElementaryTypeNameExpression",
                            "src": "854:7:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)",
                                  "value": "uint256"
                                },
                                "id": 13466,
                                "name": "ElementaryTypeNameExpression",
                                "src": "862:7:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13460,
                                  "type": "bytes32",
                                  "value": "_digest"
                                },
                                "id": 13467,
                                "name": "Identifier",
                                "src": "870:7:50"
                              }
                            ],
                            "id": 13468,
                            "name": "FunctionCall",
                            "src": "862:16:50"
                          }
                        ],
                        "id": 13469,
                        "name": "FunctionCall",
                        "src": "854:25:50"
                      }
                    ],
                    "id": 13470,
                    "name": "Return",
                    "src": "847:32:50"
                  }
                ],
                "id": 13471,
                "name": "Block",
                "src": "645:241:50"
              }
            ],
            "id": 13472,
            "name": "FunctionDefinition",
            "src": "564:322:50"
          },
          {
            "attributes": {
              "documentation": "@notice          Calculates the p2wpkh output script of a pubkey\n @dev             Compresses keys to 33 bytes as required by Bitcoin\n @param _pubkey   The public key, compressed or uncompressed\n @return          The p2wkph output script",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "p2wpkhFromPubkey",
              "scope": 13824,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_pubkey",
                      "scope": 13583,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13473,
                        "name": "ElementaryTypeName",
                        "src": "1185:5:50"
                      }
                    ],
                    "id": 13474,
                    "name": "VariableDeclaration",
                    "src": "1185:20:50"
                  }
                ],
                "id": 13475,
                "name": "ParameterList",
                "src": "1184:22:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13583,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13476,
                        "name": "ElementaryTypeName",
                        "src": "1230:5:50"
                      }
                    ],
                    "id": 13477,
                    "name": "VariableDeclaration",
                    "src": "1230:12:50"
                  }
                ],
                "id": 13478,
                "name": "ParameterList",
                "src": "1229:14:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        13480
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_compressedPubkey",
                          "scope": 13582,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 13479,
                            "name": "ElementaryTypeName",
                            "src": "1254:5:50"
                          }
                        ],
                        "id": 13480,
                        "name": "VariableDeclaration",
                        "src": "1254:30:50"
                      }
                    ],
                    "id": 13481,
                    "name": "VariableDeclarationStatement",
                    "src": "1254:30:50"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13483
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_prefix",
                          "scope": 13582,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint8",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint8",
                              "type": "uint8"
                            },
                            "id": 13482,
                            "name": "ElementaryTypeName",
                            "src": "1294:5:50"
                          }
                        ],
                        "id": 13483,
                        "name": "VariableDeclaration",
                        "src": "1294:13:50"
                      }
                    ],
                    "id": 13484,
                    "name": "VariableDeclarationStatement",
                    "src": "1294:13:50"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13474,
                                  "type": "bytes memory",
                                  "value": "_pubkey"
                                },
                                "id": 13485,
                                "name": "Identifier",
                                "src": "1322:7:50"
                              }
                            ],
                            "id": 13486,
                            "name": "MemberAccess",
                            "src": "1322:14:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "3634",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 64",
                              "value": "64"
                            },
                            "id": 13487,
                            "name": "Literal",
                            "src": "1340:2:50"
                          }
                        ],
                        "id": 13488,
                        "name": "BinaryOperation",
                        "src": "1322:20:50"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint8"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13483,
                                      "type": "uint8",
                                      "value": "_prefix"
                                    },
                                    "id": 13489,
                                    "name": "Identifier",
                                    "src": "1358:7:50"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint8"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "==",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "%",
                                              "type": "uint8"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "type": "uint8",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_bytes1",
                                                          "typeString": "bytes1"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint8)",
                                                      "value": "uint8"
                                                    },
                                                    "id": 13490,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "1368:5:50"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "type": "bytes1"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 13474,
                                                          "type": "bytes memory",
                                                          "value": "_pubkey"
                                                        },
                                                        "id": 13491,
                                                        "name": "Identifier",
                                                        "src": "1374:7:50"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          },
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "operator": "-",
                                                          "type": "uint256"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "member_name": "length",
                                                              "referencedDeclaration": null,
                                                              "type": "uint256"
                                                            },
                                                            "children": [
                                                              {
                                                                "attributes": {
                                                                  "argumentTypes": null,
                                                                  "overloadedDeclarations": [
                                                                    null
                                                                  ],
                                                                  "referencedDeclaration": 13474,
                                                                  "type": "bytes memory",
                                                                  "value": "_pubkey"
                                                                },
                                                                "id": 13492,
                                                                "name": "Identifier",
                                                                "src": "1382:7:50"
                                                              }
                                                            ],
                                                            "id": 13493,
                                                            "name": "MemberAccess",
                                                            "src": "1382:14:50"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "hexvalue": "31",
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": true,
                                                              "lValueRequested": false,
                                                              "subdenomination": null,
                                                              "token": "number",
                                                              "type": "int_const 1",
                                                              "value": "1"
                                                            },
                                                            "id": 13494,
                                                            "name": "Literal",
                                                            "src": "1399:1:50"
                                                          }
                                                        ],
                                                        "id": 13495,
                                                        "name": "BinaryOperation",
                                                        "src": "1382:18:50"
                                                      }
                                                    ],
                                                    "id": 13496,
                                                    "name": "IndexAccess",
                                                    "src": "1374:27:50"
                                                  }
                                                ],
                                                "id": 13497,
                                                "name": "FunctionCall",
                                                "src": "1368:34:50"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "32",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 2",
                                                  "value": "2"
                                                },
                                                "id": 13498,
                                                "name": "Literal",
                                                "src": "1405:1:50"
                                              }
                                            ],
                                            "id": 13499,
                                            "name": "BinaryOperation",
                                            "src": "1368:38:50"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 13500,
                                            "name": "Literal",
                                            "src": "1410:1:50"
                                          }
                                        ],
                                        "id": 13501,
                                        "name": "BinaryOperation",
                                        "src": "1368:43:50"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "33",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 3",
                                          "value": "3"
                                        },
                                        "id": 13502,
                                        "name": "Literal",
                                        "src": "1414:1:50"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "32",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 2",
                                          "value": "2"
                                        },
                                        "id": 13503,
                                        "name": "Literal",
                                        "src": "1418:1:50"
                                      }
                                    ],
                                    "id": 13504,
                                    "name": "Conditional",
                                    "src": "1368:51:50"
                                  }
                                ],
                                "id": 13505,
                                "name": "Assignment",
                                "src": "1358:61:50"
                              }
                            ],
                            "id": 13506,
                            "name": "ExpressionStatement",
                            "src": "1358:61:50"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "bytes memory"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13480,
                                      "type": "bytes memory",
                                      "value": "_compressedPubkey"
                                    },
                                    "id": 13507,
                                    "name": "Identifier",
                                    "src": "1433:17:50"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "member_name": "encodePacked",
                                          "referencedDeclaration": null,
                                          "type": "function () pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 18347,
                                              "type": "abi",
                                              "value": "abi"
                                            },
                                            "id": 13508,
                                            "name": "Identifier",
                                            "src": "1453:3:50"
                                          }
                                        ],
                                        "id": 13509,
                                        "name": "MemberAccess",
                                        "src": "1453:16:50"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 13483,
                                          "type": "uint8",
                                          "value": "_prefix"
                                        },
                                        "id": 13510,
                                        "name": "Identifier",
                                        "src": "1470:7:50"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_rational_0_by_1",
                                                  "typeString": "int_const 0"
                                                },
                                                {
                                                  "typeIdentifier": "t_rational_32_by_1",
                                                  "typeString": "int_const 32"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "slice",
                                              "referencedDeclaration": 13281,
                                              "type": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 13474,
                                                  "type": "bytes memory",
                                                  "value": "_pubkey"
                                                },
                                                "id": 13511,
                                                "name": "Identifier",
                                                "src": "1479:7:50"
                                              }
                                            ],
                                            "id": 13512,
                                            "name": "MemberAccess",
                                            "src": "1479:13:50"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "30",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 0",
                                              "value": "0"
                                            },
                                            "id": 13513,
                                            "name": "Literal",
                                            "src": "1493:1:50"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "3332",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 32",
                                              "value": "32"
                                            },
                                            "id": 13514,
                                            "name": "Literal",
                                            "src": "1496:2:50"
                                          }
                                        ],
                                        "id": 13515,
                                        "name": "FunctionCall",
                                        "src": "1479:20:50"
                                      }
                                    ],
                                    "id": 13516,
                                    "name": "FunctionCall",
                                    "src": "1453:47:50"
                                  }
                                ],
                                "id": 13517,
                                "name": "Assignment",
                                "src": "1433:67:50"
                              }
                            ],
                            "id": 13518,
                            "name": "ExpressionStatement",
                            "src": "1433:67:50"
                          }
                        ],
                        "id": 13519,
                        "name": "Block",
                        "src": "1344:167:50"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13474,
                                      "type": "bytes memory",
                                      "value": "_pubkey"
                                    },
                                    "id": 13520,
                                    "name": "Identifier",
                                    "src": "1521:7:50"
                                  }
                                ],
                                "id": 13521,
                                "name": "MemberAccess",
                                "src": "1521:14:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "3635",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 65",
                                  "value": "65"
                                },
                                "id": 13522,
                                "name": "Literal",
                                "src": "1539:2:50"
                              }
                            ],
                            "id": 13523,
                            "name": "BinaryOperation",
                            "src": "1521:20:50"
                          },
                          {
                            "children": [
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "uint8"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 13483,
                                          "type": "uint8",
                                          "value": "_prefix"
                                        },
                                        "id": 13524,
                                        "name": "Identifier",
                                        "src": "1557:7:50"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "uint8"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "==",
                                              "type": "bool"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "%",
                                                  "type": "uint8"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "isStructConstructorCall": false,
                                                      "lValueRequested": false,
                                                      "names": [
                                                        null
                                                      ],
                                                      "type": "uint8",
                                                      "type_conversion": true
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_bytes1",
                                                              "typeString": "bytes1"
                                                            }
                                                          ],
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "type": "type(uint8)",
                                                          "value": "uint8"
                                                        },
                                                        "id": 13525,
                                                        "name": "ElementaryTypeNameExpression",
                                                        "src": "1567:5:50"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "isConstant": false,
                                                          "isLValue": true,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "type": "bytes1"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 13474,
                                                              "type": "bytes memory",
                                                              "value": "_pubkey"
                                                            },
                                                            "id": 13526,
                                                            "name": "Identifier",
                                                            "src": "1573:7:50"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              },
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "operator": "-",
                                                              "type": "uint256"
                                                            },
                                                            "children": [
                                                              {
                                                                "attributes": {
                                                                  "argumentTypes": null,
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": false,
                                                                  "lValueRequested": false,
                                                                  "member_name": "length",
                                                                  "referencedDeclaration": null,
                                                                  "type": "uint256"
                                                                },
                                                                "children": [
                                                                  {
                                                                    "attributes": {
                                                                      "argumentTypes": null,
                                                                      "overloadedDeclarations": [
                                                                        null
                                                                      ],
                                                                      "referencedDeclaration": 13474,
                                                                      "type": "bytes memory",
                                                                      "value": "_pubkey"
                                                                    },
                                                                    "id": 13527,
                                                                    "name": "Identifier",
                                                                    "src": "1581:7:50"
                                                                  }
                                                                ],
                                                                "id": 13528,
                                                                "name": "MemberAccess",
                                                                "src": "1581:14:50"
                                                              },
                                                              {
                                                                "attributes": {
                                                                  "argumentTypes": null,
                                                                  "hexvalue": "31",
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": true,
                                                                  "lValueRequested": false,
                                                                  "subdenomination": null,
                                                                  "token": "number",
                                                                  "type": "int_const 1",
                                                                  "value": "1"
                                                                },
                                                                "id": 13529,
                                                                "name": "Literal",
                                                                "src": "1598:1:50"
                                                              }
                                                            ],
                                                            "id": 13530,
                                                            "name": "BinaryOperation",
                                                            "src": "1581:18:50"
                                                          }
                                                        ],
                                                        "id": 13531,
                                                        "name": "IndexAccess",
                                                        "src": "1573:27:50"
                                                      }
                                                    ],
                                                    "id": 13532,
                                                    "name": "FunctionCall",
                                                    "src": "1567:34:50"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "hexvalue": "32",
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "subdenomination": null,
                                                      "token": "number",
                                                      "type": "int_const 2",
                                                      "value": "2"
                                                    },
                                                    "id": 13533,
                                                    "name": "Literal",
                                                    "src": "1604:1:50"
                                                  }
                                                ],
                                                "id": 13534,
                                                "name": "BinaryOperation",
                                                "src": "1567:38:50"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 13535,
                                                "name": "Literal",
                                                "src": "1609:1:50"
                                              }
                                            ],
                                            "id": 13536,
                                            "name": "BinaryOperation",
                                            "src": "1567:43:50"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "33",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 3",
                                              "value": "3"
                                            },
                                            "id": 13537,
                                            "name": "Literal",
                                            "src": "1613:1:50"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "32",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 2",
                                              "value": "2"
                                            },
                                            "id": 13538,
                                            "name": "Literal",
                                            "src": "1617:1:50"
                                          }
                                        ],
                                        "id": 13539,
                                        "name": "Conditional",
                                        "src": "1567:51:50"
                                      }
                                    ],
                                    "id": 13540,
                                    "name": "Assignment",
                                    "src": "1557:61:50"
                                  }
                                ],
                                "id": 13541,
                                "name": "ExpressionStatement",
                                "src": "1557:61:50"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "bytes memory"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 13480,
                                          "type": "bytes memory",
                                          "value": "_compressedPubkey"
                                        },
                                        "id": 13542,
                                        "name": "Identifier",
                                        "src": "1632:17:50"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "member_name": "encodePacked",
                                              "referencedDeclaration": null,
                                              "type": "function () pure returns (bytes memory)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 18347,
                                                  "type": "abi",
                                                  "value": "abi"
                                                },
                                                "id": 13543,
                                                "name": "Identifier",
                                                "src": "1652:3:50"
                                              }
                                            ],
                                            "id": 13544,
                                            "name": "MemberAccess",
                                            "src": "1652:16:50"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 13483,
                                              "type": "uint8",
                                              "value": "_prefix"
                                            },
                                            "id": 13545,
                                            "name": "Identifier",
                                            "src": "1669:7:50"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "bytes memory",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_rational_1_by_1",
                                                      "typeString": "int_const 1"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_rational_32_by_1",
                                                      "typeString": "int_const 32"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "slice",
                                                  "referencedDeclaration": 13281,
                                                  "type": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 13474,
                                                      "type": "bytes memory",
                                                      "value": "_pubkey"
                                                    },
                                                    "id": 13546,
                                                    "name": "Identifier",
                                                    "src": "1678:7:50"
                                                  }
                                                ],
                                                "id": 13547,
                                                "name": "MemberAccess",
                                                "src": "1678:13:50"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 13548,
                                                "name": "Literal",
                                                "src": "1692:1:50"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "3332",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 32",
                                                  "value": "32"
                                                },
                                                "id": 13549,
                                                "name": "Literal",
                                                "src": "1695:2:50"
                                              }
                                            ],
                                            "id": 13550,
                                            "name": "FunctionCall",
                                            "src": "1678:20:50"
                                          }
                                        ],
                                        "id": 13551,
                                        "name": "FunctionCall",
                                        "src": "1652:47:50"
                                      }
                                    ],
                                    "id": 13552,
                                    "name": "Assignment",
                                    "src": "1632:67:50"
                                  }
                                ],
                                "id": 13553,
                                "name": "ExpressionStatement",
                                "src": "1632:67:50"
                              }
                            ],
                            "id": 13554,
                            "name": "Block",
                            "src": "1543:167:50"
                          },
                          {
                            "children": [
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "bytes memory"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 13480,
                                          "type": "bytes memory",
                                          "value": "_compressedPubkey"
                                        },
                                        "id": 13555,
                                        "name": "Identifier",
                                        "src": "1730:17:50"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 13474,
                                          "type": "bytes memory",
                                          "value": "_pubkey"
                                        },
                                        "id": 13556,
                                        "name": "Identifier",
                                        "src": "1750:7:50"
                                      }
                                    ],
                                    "id": 13557,
                                    "name": "Assignment",
                                    "src": "1730:27:50"
                                  }
                                ],
                                "id": 13558,
                                "name": "ExpressionStatement",
                                "src": "1730:27:50"
                              }
                            ],
                            "id": 13559,
                            "name": "Block",
                            "src": "1716:52:50"
                          }
                        ],
                        "id": 13560,
                        "name": "IfStatement",
                        "src": "1517:251:50"
                      }
                    ],
                    "id": 13561,
                    "name": "IfStatement",
                    "src": "1318:450:50"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_a0bf759ce732e682de2576e7735931b81573c3f21ddf59e01a9e6e76a9dc5377",
                                  "typeString": "literal_string \"Witness PKH requires compressed keys\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 13562,
                            "name": "Identifier",
                            "src": "1778:7:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13480,
                                      "type": "bytes memory",
                                      "value": "_compressedPubkey"
                                    },
                                    "id": 13563,
                                    "name": "Identifier",
                                    "src": "1786:17:50"
                                  }
                                ],
                                "id": 13564,
                                "name": "MemberAccess",
                                "src": "1786:24:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "3333",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 33",
                                  "value": "33"
                                },
                                "id": 13565,
                                "name": "Literal",
                                "src": "1814:2:50"
                              }
                            ],
                            "id": 13566,
                            "name": "BinaryOperation",
                            "src": "1786:30:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "5769746e65737320504b4820726571756972657320636f6d70726573736564206b657973",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Witness PKH requires compressed keys\"",
                              "value": "Witness PKH requires compressed keys"
                            },
                            "id": 13567,
                            "name": "Literal",
                            "src": "1818:38:50"
                          }
                        ],
                        "id": 13568,
                        "name": "FunctionCall",
                        "src": "1778:79:50"
                      }
                    ],
                    "id": 13569,
                    "name": "ExpressionStatement",
                    "src": "1778:79:50"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13571
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_pubkeyHash",
                          "scope": 13582,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 13570,
                            "name": "ElementaryTypeName",
                            "src": "1868:5:50"
                          }
                        ],
                        "id": 13571,
                        "name": "VariableDeclaration",
                        "src": "1868:24:50"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "hash160",
                              "referencedDeclaration": 11834,
                              "type": "function (bytes memory) pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13480,
                                  "type": "bytes memory",
                                  "value": "_compressedPubkey"
                                },
                                "id": 13572,
                                "name": "Identifier",
                                "src": "1895:17:50"
                              }
                            ],
                            "id": 13573,
                            "name": "MemberAccess",
                            "src": "1895:25:50"
                          }
                        ],
                        "id": 13574,
                        "name": "FunctionCall",
                        "src": "1895:27:50"
                      }
                    ],
                    "id": 13575,
                    "name": "VariableDeclarationStatement",
                    "src": "1868:54:50"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 13478
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_8c9fd6988effdf130d07ed4911a231819d049b576b0676ca29490d955c0caa21",
                                  "typeString": "literal_string \"\u0000\u0014\""
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "encodePacked",
                              "referencedDeclaration": null,
                              "type": "function () pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18347,
                                  "type": "abi",
                                  "value": "abi"
                                },
                                "id": 13576,
                                "name": "Identifier",
                                "src": "1939:3:50"
                              }
                            ],
                            "id": 13577,
                            "name": "MemberAccess",
                            "src": "1939:16:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "0014",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"\u0000\u0014\"",
                              "value": "\u0000\u0014"
                            },
                            "id": 13578,
                            "name": "Literal",
                            "src": "1956:9:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13571,
                              "type": "bytes memory",
                              "value": "_pubkeyHash"
                            },
                            "id": 13579,
                            "name": "Identifier",
                            "src": "1967:11:50"
                          }
                        ],
                        "id": 13580,
                        "name": "FunctionCall",
                        "src": "1939:40:50"
                      }
                    ],
                    "id": 13581,
                    "name": "Return",
                    "src": "1932:47:50"
                  }
                ],
                "id": 13582,
                "name": "Block",
                "src": "1244:742:50"
              }
            ],
            "id": 13583,
            "name": "FunctionDefinition",
            "src": "1159:827:50"
          },
          {
            "attributes": {
              "documentation": "@notice          checks a signed message's validity under a pubkey\n @dev             does this using ecrecover because Ethereum has no soul\n @param _pubkey   the public key to check (64 bytes)\n @param _digest   the message digest signed\n @param _v        the signature recovery value\n @param _r        the signature r value\n @param _s        the signature s value\n @return          true if signature is valid, else false",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "checkSig",
              "scope": 13824,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_pubkey",
                      "scope": 13626,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13584,
                        "name": "ElementaryTypeName",
                        "src": "2497:5:50"
                      }
                    ],
                    "id": 13585,
                    "name": "VariableDeclaration",
                    "src": "2497:20:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_digest",
                      "scope": 13626,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13586,
                        "name": "ElementaryTypeName",
                        "src": "2527:7:50"
                      }
                    ],
                    "id": 13587,
                    "name": "VariableDeclaration",
                    "src": "2527:15:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_v",
                      "scope": 13626,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 13588,
                        "name": "ElementaryTypeName",
                        "src": "2552:5:50"
                      }
                    ],
                    "id": 13589,
                    "name": "VariableDeclaration",
                    "src": "2552:8:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_r",
                      "scope": 13626,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13590,
                        "name": "ElementaryTypeName",
                        "src": "2570:7:50"
                      }
                    ],
                    "id": 13591,
                    "name": "VariableDeclaration",
                    "src": "2570:10:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_s",
                      "scope": 13626,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13592,
                        "name": "ElementaryTypeName",
                        "src": "2590:7:50"
                      }
                    ],
                    "id": 13593,
                    "name": "VariableDeclaration",
                    "src": "2590:10:50"
                  }
                ],
                "id": 13594,
                "name": "ParameterList",
                "src": "2487:119:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13626,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 13595,
                        "name": "ElementaryTypeName",
                        "src": "2630:4:50"
                      }
                    ],
                    "id": 13596,
                    "name": "VariableDeclaration",
                    "src": "2630:4:50"
                  }
                ],
                "id": 13597,
                "name": "ParameterList",
                "src": "2629:6:50"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_76e201f560bb06e643cc11800c62474e6314a825097aac30ef085d258132e9ec",
                                  "typeString": "literal_string \"Requires uncompressed unprefixed pubkey\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 13598,
                            "name": "Identifier",
                            "src": "2646:7:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13585,
                                      "type": "bytes memory",
                                      "value": "_pubkey"
                                    },
                                    "id": 13599,
                                    "name": "Identifier",
                                    "src": "2654:7:50"
                                  }
                                ],
                                "id": 13600,
                                "name": "MemberAccess",
                                "src": "2654:14:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "3634",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 64",
                                  "value": "64"
                                },
                                "id": 13601,
                                "name": "Literal",
                                "src": "2672:2:50"
                              }
                            ],
                            "id": 13602,
                            "name": "BinaryOperation",
                            "src": "2654:20:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "526571756972657320756e636f6d7072657373656420756e7072656669786564207075626b6579",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Requires uncompressed unprefixed pubkey\"",
                              "value": "Requires uncompressed unprefixed pubkey"
                            },
                            "id": 13603,
                            "name": "Literal",
                            "src": "2676:41:50"
                          }
                        ],
                        "id": 13604,
                        "name": "FunctionCall",
                        "src": "2646:72:50"
                      }
                    ],
                    "id": 13605,
                    "name": "ExpressionStatement",
                    "src": "2646:72:50"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13607
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_expected",
                          "scope": 13625,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 13606,
                            "name": "ElementaryTypeName",
                            "src": "2728:7:50"
                          }
                        ],
                        "id": 13607,
                        "name": "VariableDeclaration",
                        "src": "2728:17:50"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13472,
                              "type": "function (bytes memory) pure returns (address)",
                              "value": "accountFromPubkey"
                            },
                            "id": 13608,
                            "name": "Identifier",
                            "src": "2748:17:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13585,
                              "type": "bytes memory",
                              "value": "_pubkey"
                            },
                            "id": 13609,
                            "name": "Identifier",
                            "src": "2766:7:50"
                          }
                        ],
                        "id": 13610,
                        "name": "FunctionCall",
                        "src": "2748:26:50"
                      }
                    ],
                    "id": 13611,
                    "name": "VariableDeclarationStatement",
                    "src": "2728:46:50"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13613
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_actual",
                          "scope": 13625,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 13612,
                            "name": "ElementaryTypeName",
                            "src": "2784:7:50"
                          }
                        ],
                        "id": 13613,
                        "name": "VariableDeclaration",
                        "src": "2784:15:50"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 18352,
                              "type": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)",
                              "value": "ecrecover"
                            },
                            "id": 13614,
                            "name": "Identifier",
                            "src": "2802:9:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13587,
                              "type": "bytes32",
                              "value": "_digest"
                            },
                            "id": 13615,
                            "name": "Identifier",
                            "src": "2812:7:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13589,
                              "type": "uint8",
                              "value": "_v"
                            },
                            "id": 13616,
                            "name": "Identifier",
                            "src": "2821:2:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13591,
                              "type": "bytes32",
                              "value": "_r"
                            },
                            "id": 13617,
                            "name": "Identifier",
                            "src": "2825:2:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13593,
                              "type": "bytes32",
                              "value": "_s"
                            },
                            "id": 13618,
                            "name": "Identifier",
                            "src": "2829:2:50"
                          }
                        ],
                        "id": 13619,
                        "name": "FunctionCall",
                        "src": "2802:30:50"
                      }
                    ],
                    "id": 13620,
                    "name": "VariableDeclarationStatement",
                    "src": "2784:48:50"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 13597
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13613,
                              "type": "address",
                              "value": "_actual"
                            },
                            "id": 13621,
                            "name": "Identifier",
                            "src": "2849:7:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13607,
                              "type": "address",
                              "value": "_expected"
                            },
                            "id": 13622,
                            "name": "Identifier",
                            "src": "2860:9:50"
                          }
                        ],
                        "id": 13623,
                        "name": "BinaryOperation",
                        "src": "2849:20:50"
                      }
                    ],
                    "id": 13624,
                    "name": "Return",
                    "src": "2842:27:50"
                  }
                ],
                "id": 13625,
                "name": "Block",
                "src": "2636:240:50"
              }
            ],
            "id": 13626,
            "name": "FunctionDefinition",
            "src": "2470:406:50"
          },
          {
            "attributes": {
              "documentation": "@notice                     checks a signed message against a bitcoin p2wpkh output script\n @dev                        does this my verifying the p2wpkh matches an ethereum account\n @param _p2wpkhOutputScript  the bitcoin output script\n @param _pubkey              the uncompressed, unprefixed public key to check\n @param _digest              the message digest signed\n @param _v                   the signature recovery value\n @param _r                   the signature r value\n @param _s                   the signature s value\n @return                     true if signature is valid, else false",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "checkBitcoinSig",
              "scope": 13824,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_p2wpkhOutputScript",
                      "scope": 13682,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13627,
                        "name": "ElementaryTypeName",
                        "src": "3578:5:50"
                      }
                    ],
                    "id": 13628,
                    "name": "VariableDeclaration",
                    "src": "3578:32:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_pubkey",
                      "scope": 13682,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13629,
                        "name": "ElementaryTypeName",
                        "src": "3620:5:50"
                      }
                    ],
                    "id": 13630,
                    "name": "VariableDeclaration",
                    "src": "3620:20:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_digest",
                      "scope": 13682,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13631,
                        "name": "ElementaryTypeName",
                        "src": "3650:7:50"
                      }
                    ],
                    "id": 13632,
                    "name": "VariableDeclaration",
                    "src": "3650:15:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_v",
                      "scope": 13682,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 13633,
                        "name": "ElementaryTypeName",
                        "src": "3675:5:50"
                      }
                    ],
                    "id": 13634,
                    "name": "VariableDeclaration",
                    "src": "3675:8:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_r",
                      "scope": 13682,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13635,
                        "name": "ElementaryTypeName",
                        "src": "3693:7:50"
                      }
                    ],
                    "id": 13636,
                    "name": "VariableDeclaration",
                    "src": "3693:10:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_s",
                      "scope": 13682,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13637,
                        "name": "ElementaryTypeName",
                        "src": "3713:7:50"
                      }
                    ],
                    "id": 13638,
                    "name": "VariableDeclaration",
                    "src": "3713:10:50"
                  }
                ],
                "id": 13639,
                "name": "ParameterList",
                "src": "3568:161:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13682,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 13640,
                        "name": "ElementaryTypeName",
                        "src": "3753:4:50"
                      }
                    ],
                    "id": 13641,
                    "name": "VariableDeclaration",
                    "src": "3753:4:50"
                  }
                ],
                "id": 13642,
                "name": "ParameterList",
                "src": "3752:6:50"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_76e201f560bb06e643cc11800c62474e6314a825097aac30ef085d258132e9ec",
                                  "typeString": "literal_string \"Requires uncompressed unprefixed pubkey\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 13643,
                            "name": "Identifier",
                            "src": "3769:7:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13630,
                                      "type": "bytes memory",
                                      "value": "_pubkey"
                                    },
                                    "id": 13644,
                                    "name": "Identifier",
                                    "src": "3777:7:50"
                                  }
                                ],
                                "id": 13645,
                                "name": "MemberAccess",
                                "src": "3777:14:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "3634",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 64",
                                  "value": "64"
                                },
                                "id": 13646,
                                "name": "Literal",
                                "src": "3795:2:50"
                              }
                            ],
                            "id": 13647,
                            "name": "BinaryOperation",
                            "src": "3777:20:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "526571756972657320756e636f6d7072657373656420756e7072656669786564207075626b6579",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Requires uncompressed unprefixed pubkey\"",
                              "value": "Requires uncompressed unprefixed pubkey"
                            },
                            "id": 13648,
                            "name": "Literal",
                            "src": "3799:41:50"
                          }
                        ],
                        "id": 13649,
                        "name": "FunctionCall",
                        "src": "3769:72:50"
                      }
                    ],
                    "id": 13650,
                    "name": "ExpressionStatement",
                    "src": "3769:72:50"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13652
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_isExpectedSigner",
                          "scope": 13681,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 13651,
                            "name": "ElementaryTypeName",
                            "src": "3852:4:50"
                          }
                        ],
                        "id": 13652,
                        "name": "VariableDeclaration",
                        "src": "3852:22:50"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18354,
                                  "type": "function (bytes memory) pure returns (bytes32)",
                                  "value": "keccak256"
                                },
                                "id": 13653,
                                "name": "Identifier",
                                "src": "3877:9:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13583,
                                      "type": "function (bytes memory) pure returns (bytes memory)",
                                      "value": "p2wpkhFromPubkey"
                                    },
                                    "id": 13654,
                                    "name": "Identifier",
                                    "src": "3887:16:50"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13630,
                                      "type": "bytes memory",
                                      "value": "_pubkey"
                                    },
                                    "id": 13655,
                                    "name": "Identifier",
                                    "src": "3904:7:50"
                                  }
                                ],
                                "id": 13656,
                                "name": "FunctionCall",
                                "src": "3887:25:50"
                              }
                            ],
                            "id": 13657,
                            "name": "FunctionCall",
                            "src": "3877:36:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18354,
                                  "type": "function (bytes memory) pure returns (bytes32)",
                                  "value": "keccak256"
                                },
                                "id": 13658,
                                "name": "Identifier",
                                "src": "3917:9:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13628,
                                  "type": "bytes memory",
                                  "value": "_p2wpkhOutputScript"
                                },
                                "id": 13659,
                                "name": "Identifier",
                                "src": "3927:19:50"
                              }
                            ],
                            "id": 13660,
                            "name": "FunctionCall",
                            "src": "3917:30:50"
                          }
                        ],
                        "id": 13661,
                        "name": "BinaryOperation",
                        "src": "3877:70:50"
                      }
                    ],
                    "id": 13662,
                    "name": "VariableDeclarationStatement",
                    "src": "3852:95:50"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!",
                          "prefix": true,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13652,
                              "type": "bool",
                              "value": "_isExpectedSigner"
                            },
                            "id": 13663,
                            "name": "Identifier",
                            "src": "3993:17:50"
                          }
                        ],
                        "id": 13664,
                        "name": "UnaryOperation",
                        "src": "3992:18:50"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 13642
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 13665,
                                "name": "Literal",
                                "src": "4020:5:50"
                              }
                            ],
                            "id": 13666,
                            "name": "Return",
                            "src": "4013:12:50"
                          }
                        ],
                        "id": 13667,
                        "name": "Block",
                        "src": "4012:15:50"
                      }
                    ],
                    "id": 13668,
                    "name": "IfStatement",
                    "src": "3988:39:50"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13670
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_sigResult",
                          "scope": 13681,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 13669,
                            "name": "ElementaryTypeName",
                            "src": "4037:4:50"
                          }
                        ],
                        "id": 13670,
                        "name": "VariableDeclaration",
                        "src": "4037:15:50"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13626,
                              "type": "function (bytes memory,bytes32,uint8,bytes32,bytes32) pure returns (bool)",
                              "value": "checkSig"
                            },
                            "id": 13671,
                            "name": "Identifier",
                            "src": "4055:8:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13630,
                              "type": "bytes memory",
                              "value": "_pubkey"
                            },
                            "id": 13672,
                            "name": "Identifier",
                            "src": "4064:7:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13632,
                              "type": "bytes32",
                              "value": "_digest"
                            },
                            "id": 13673,
                            "name": "Identifier",
                            "src": "4073:7:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13634,
                              "type": "uint8",
                              "value": "_v"
                            },
                            "id": 13674,
                            "name": "Identifier",
                            "src": "4082:2:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13636,
                              "type": "bytes32",
                              "value": "_r"
                            },
                            "id": 13675,
                            "name": "Identifier",
                            "src": "4086:2:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13638,
                              "type": "bytes32",
                              "value": "_s"
                            },
                            "id": 13676,
                            "name": "Identifier",
                            "src": "4090:2:50"
                          }
                        ],
                        "id": 13677,
                        "name": "FunctionCall",
                        "src": "4055:38:50"
                      }
                    ],
                    "id": 13678,
                    "name": "VariableDeclarationStatement",
                    "src": "4037:56:50"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 13642
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 13670,
                          "type": "bool",
                          "value": "_sigResult"
                        },
                        "id": 13679,
                        "name": "Identifier",
                        "src": "4110:10:50"
                      }
                    ],
                    "id": 13680,
                    "name": "Return",
                    "src": "4103:17:50"
                  }
                ],
                "id": 13681,
                "name": "Block",
                "src": "3759:368:50"
              }
            ],
            "id": 13682,
            "name": "FunctionDefinition",
            "src": "3544:583:50"
          },
          {
            "attributes": {
              "documentation": "@notice             checks if a message is the sha256 preimage of a digest\n @dev                this is NOT the hash256!  this step is necessary for ECDSA security!\n @param _digest      the digest\n @param _candidate   the purported preimage\n @return             true if the preimage matches the digest, else false",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "isSha256Preimage",
              "scope": 13824,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_candidate",
                      "scope": 13698,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13683,
                        "name": "ElementaryTypeName",
                        "src": "4518:5:50"
                      }
                    ],
                    "id": 13684,
                    "name": "VariableDeclaration",
                    "src": "4518:23:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_digest",
                      "scope": 13698,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13685,
                        "name": "ElementaryTypeName",
                        "src": "4551:7:50"
                      }
                    ],
                    "id": 13686,
                    "name": "VariableDeclaration",
                    "src": "4551:15:50"
                  }
                ],
                "id": 13687,
                "name": "ParameterList",
                "src": "4508:64:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13698,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 13688,
                        "name": "ElementaryTypeName",
                        "src": "4596:4:50"
                      }
                    ],
                    "id": 13689,
                    "name": "VariableDeclaration",
                    "src": "4596:4:50"
                  }
                ],
                "id": 13690,
                "name": "ParameterList",
                "src": "4595:6:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 13690
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18369,
                                  "type": "function (bytes memory) pure returns (bytes32)",
                                  "value": "sha256"
                                },
                                "id": 13691,
                                "name": "Identifier",
                                "src": "4619:6:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13684,
                                  "type": "bytes memory",
                                  "value": "_candidate"
                                },
                                "id": 13692,
                                "name": "Identifier",
                                "src": "4626:10:50"
                              }
                            ],
                            "id": 13693,
                            "name": "FunctionCall",
                            "src": "4619:18:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13686,
                              "type": "bytes32",
                              "value": "_digest"
                            },
                            "id": 13694,
                            "name": "Identifier",
                            "src": "4641:7:50"
                          }
                        ],
                        "id": 13695,
                        "name": "BinaryOperation",
                        "src": "4619:29:50"
                      }
                    ],
                    "id": 13696,
                    "name": "Return",
                    "src": "4612:36:50"
                  }
                ],
                "id": 13697,
                "name": "Block",
                "src": "4602:53:50"
              }
            ],
            "id": 13698,
            "name": "FunctionDefinition",
            "src": "4483:172:50"
          },
          {
            "attributes": {
              "documentation": "@notice             checks if a message is the keccak256 preimage of a digest\n @dev                this step is necessary for ECDSA security!\n @param _digest      the digest\n @param _candidate   the purported preimage\n @return             true if the preimage matches the digest, else false",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "isKeccak256Preimage",
              "scope": 13824,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_candidate",
                      "scope": 13714,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13699,
                        "name": "ElementaryTypeName",
                        "src": "5026:5:50"
                      }
                    ],
                    "id": 13700,
                    "name": "VariableDeclaration",
                    "src": "5026:23:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_digest",
                      "scope": 13714,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13701,
                        "name": "ElementaryTypeName",
                        "src": "5059:7:50"
                      }
                    ],
                    "id": 13702,
                    "name": "VariableDeclaration",
                    "src": "5059:15:50"
                  }
                ],
                "id": 13703,
                "name": "ParameterList",
                "src": "5016:64:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13714,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 13704,
                        "name": "ElementaryTypeName",
                        "src": "5104:4:50"
                      }
                    ],
                    "id": 13705,
                    "name": "VariableDeclaration",
                    "src": "5104:4:50"
                  }
                ],
                "id": 13706,
                "name": "ParameterList",
                "src": "5103:6:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 13706
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18354,
                                  "type": "function (bytes memory) pure returns (bytes32)",
                                  "value": "keccak256"
                                },
                                "id": 13707,
                                "name": "Identifier",
                                "src": "5127:9:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13700,
                                  "type": "bytes memory",
                                  "value": "_candidate"
                                },
                                "id": 13708,
                                "name": "Identifier",
                                "src": "5137:10:50"
                              }
                            ],
                            "id": 13709,
                            "name": "FunctionCall",
                            "src": "5127:21:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13702,
                              "type": "bytes32",
                              "value": "_digest"
                            },
                            "id": 13710,
                            "name": "Identifier",
                            "src": "5152:7:50"
                          }
                        ],
                        "id": 13711,
                        "name": "BinaryOperation",
                        "src": "5127:32:50"
                      }
                    ],
                    "id": 13712,
                    "name": "Return",
                    "src": "5120:39:50"
                  }
                ],
                "id": 13713,
                "name": "Block",
                "src": "5110:56:50"
              }
            ],
            "id": 13714,
            "name": "FunctionDefinition",
            "src": "4988:178:50"
          },
          {
            "attributes": {
              "documentation": "@notice                 calculates the signature hash of a Bitcoin transaction with the provided details\n @dev                    documented in bip143. many values are hardcoded here\n @param _outpoint        the bitcoin UTXO id (32-byte txid + 4-byte output index)\n @param _inputPKH        the input pubkeyhash (hash160(sender_pubkey))\n @param _inputValue      the value of the input in satoshi\n @param _outputValue     the value of the output in satoshi\n @param _outputScript    the length-prefixed output script\n @return                 the double-sha256 (hash256) signature hash as defined by bip143",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "wpkhSpendSighash",
              "scope": 13824,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outpoint",
                      "scope": 13771,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13715,
                        "name": "ElementaryTypeName",
                        "src": "5867:5:50"
                      }
                    ],
                    "id": 13716,
                    "name": "VariableDeclaration",
                    "src": "5867:22:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_inputPKH",
                      "scope": 13771,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes20",
                          "type": "bytes20"
                        },
                        "id": 13717,
                        "name": "ElementaryTypeName",
                        "src": "5919:7:50"
                      }
                    ],
                    "id": 13718,
                    "name": "VariableDeclaration",
                    "src": "5919:17:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_inputValue",
                      "scope": 13771,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 13719,
                        "name": "ElementaryTypeName",
                        "src": "5971:6:50"
                      }
                    ],
                    "id": 13720,
                    "name": "VariableDeclaration",
                    "src": "5971:18:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outputValue",
                      "scope": 13771,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 13721,
                        "name": "ElementaryTypeName",
                        "src": "6017:6:50"
                      }
                    ],
                    "id": 13722,
                    "name": "VariableDeclaration",
                    "src": "6017:19:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outputScript",
                      "scope": 13771,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13723,
                        "name": "ElementaryTypeName",
                        "src": "6063:5:50"
                      }
                    ],
                    "id": 13724,
                    "name": "VariableDeclaration",
                    "src": "6063:26:50"
                  }
                ],
                "id": 13725,
                "name": "ParameterList",
                "src": "5857:274:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13771,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13726,
                        "name": "ElementaryTypeName",
                        "src": "6155:7:50"
                      }
                    ],
                    "id": 13727,
                    "name": "VariableDeclaration",
                    "src": "6155:7:50"
                  }
                ],
                "id": 13728,
                "name": "ParameterList",
                "src": "6154:9:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        13730
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_scriptCode",
                          "scope": 13770,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 13729,
                            "name": "ElementaryTypeName",
                            "src": "6281:5:50"
                          }
                        ],
                        "id": 13730,
                        "name": "VariableDeclaration",
                        "src": "6281:24:50"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_16c8cfb2189d45894fd227d6cf32ba616da47433f9bbc2f735a1096c3618c12f",
                                  "typeString": "literal_string (contains invalid UTF-8 sequence at position 2)"
                                },
                                {
                                  "typeIdentifier": "t_bytes20",
                                  "typeString": "bytes20"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d",
                                  "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "encodePacked",
                              "referencedDeclaration": null,
                              "type": "function () pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18347,
                                  "type": "abi",
                                  "value": "abi"
                                },
                                "id": 13731,
                                "name": "Identifier",
                                "src": "6308:3:50"
                              }
                            ],
                            "id": 13732,
                            "name": "MemberAccess",
                            "src": "6308:16:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "1976a914",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string (contains invalid UTF-8 sequence at position 2)",
                              "value": null
                            },
                            "id": 13733,
                            "name": "Literal",
                            "src": "6338:13:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13718,
                              "type": "bytes20",
                              "value": "_inputPKH"
                            },
                            "id": 13734,
                            "name": "Identifier",
                            "src": "6402:9:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "88ac",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string (contains invalid UTF-8 sequence at position 0)",
                              "value": null
                            },
                            "id": 13735,
                            "name": "Literal",
                            "src": "6425:9:50"
                          }
                        ],
                        "id": 13736,
                        "name": "FunctionCall",
                        "src": "6308:127:50"
                      }
                    ],
                    "id": 13737,
                    "name": "VariableDeclarationStatement",
                    "src": "6281:154:50"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13739
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_hashOutputs",
                          "scope": 13770,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 13738,
                            "name": "ElementaryTypeName",
                            "src": "6465:7:50"
                          }
                        ],
                        "id": 13739,
                        "name": "VariableDeclaration",
                        "src": "6465:20:50"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "hash256",
                              "referencedDeclaration": 11851,
                              "type": "function (bytes memory) pure returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes8",
                                          "typeString": "bytes8"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "member_name": "encodePacked",
                                      "referencedDeclaration": null,
                                      "type": "function () pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18347,
                                          "type": "abi",
                                          "value": "abi"
                                        },
                                        "id": 13740,
                                        "name": "Identifier",
                                        "src": "6488:3:50"
                                      }
                                    ],
                                    "id": 13741,
                                    "name": "MemberAccess",
                                    "src": "6488:16:50"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13722,
                                      "type": "bytes8",
                                      "value": "_outputValue"
                                    },
                                    "id": 13742,
                                    "name": "Identifier",
                                    "src": "6518:12:50"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13724,
                                      "type": "bytes memory",
                                      "value": "_outputScript"
                                    },
                                    "id": 13743,
                                    "name": "Identifier",
                                    "src": "6558:13:50"
                                  }
                                ],
                                "id": 13744,
                                "name": "FunctionCall",
                                "src": "6488:84:50"
                              }
                            ],
                            "id": 13745,
                            "name": "MemberAccess",
                            "src": "6488:92:50"
                          }
                        ],
                        "id": 13746,
                        "name": "FunctionCall",
                        "src": "6488:94:50"
                      }
                    ],
                    "id": 13747,
                    "name": "VariableDeclarationStatement",
                    "src": "6465:117:50"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13749
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_sighashPreimage",
                          "scope": 13770,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 13748,
                            "name": "ElementaryTypeName",
                            "src": "6592:5:50"
                          }
                        ],
                        "id": 13749,
                        "name": "VariableDeclaration",
                        "src": "6592:29:50"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_e37890bf230cf36ea140a5dbb9a561aa7ef84f8f995873db8386eba4a95c7bbe",
                                  "typeString": "literal_string \"\u0001\u0000\u0000\u0000\""
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_de9eeb8dbbea7702bb2ae084a168f6422ddcaa5a73975470e9f2441f0c122d45",
                                  "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c",
                                  "typeString": "literal_string \"\u0000\u0000\u0000\u0000\""
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c",
                                  "typeString": "literal_string \"\u0000\u0000\u0000\u0000\""
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_e37890bf230cf36ea140a5dbb9a561aa7ef84f8f995873db8386eba4a95c7bbe",
                                  "typeString": "literal_string \"\u0001\u0000\u0000\u0000\""
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "encodePacked",
                              "referencedDeclaration": null,
                              "type": "function () pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18347,
                                  "type": "abi",
                                  "value": "abi"
                                },
                                "id": 13750,
                                "name": "Identifier",
                                "src": "6624:3:50"
                              }
                            ],
                            "id": 13751,
                            "name": "MemberAccess",
                            "src": "6624:16:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "01000000",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"\u0001\u0000\u0000\u0000\"",
                              "value": "\u0001\u0000\u0000\u0000"
                            },
                            "id": 13752,
                            "name": "Literal",
                            "src": "6654:13:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "hash256",
                                  "referencedDeclaration": 11851,
                                  "type": "function (bytes memory) pure returns (bytes32)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13716,
                                      "type": "bytes memory",
                                      "value": "_outpoint"
                                    },
                                    "id": 13753,
                                    "name": "Identifier",
                                    "src": "6693:9:50"
                                  }
                                ],
                                "id": 13754,
                                "name": "MemberAccess",
                                "src": "6693:17:50"
                              }
                            ],
                            "id": 13755,
                            "name": "FunctionCall",
                            "src": "6693:19:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "8cb9012517c817fead650287d61bdd9c68803b6bf9c64133dcab3e65b5a50cb9",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string (contains invalid UTF-8 sequence at position 0)",
                              "value": null
                            },
                            "id": 13756,
                            "name": "Literal",
                            "src": "6743:69:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13716,
                              "type": "bytes memory",
                              "value": "_outpoint"
                            },
                            "id": 13757,
                            "name": "Identifier",
                            "src": "6853:9:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13730,
                              "type": "bytes memory",
                              "value": "_scriptCode"
                            },
                            "id": 13758,
                            "name": "Identifier",
                            "src": "6889:11:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13720,
                              "type": "bytes8",
                              "value": "_inputValue"
                            },
                            "id": 13759,
                            "name": "Identifier",
                            "src": "6937:11:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "00000000",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"\u0000\u0000\u0000\u0000\"",
                              "value": "\u0000\u0000\u0000\u0000"
                            },
                            "id": 13760,
                            "name": "Literal",
                            "src": "6998:13:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13739,
                              "type": "bytes32",
                              "value": "_hashOutputs"
                            },
                            "id": 13761,
                            "name": "Identifier",
                            "src": "7045:12:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "00000000",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"\u0000\u0000\u0000\u0000\"",
                              "value": "\u0000\u0000\u0000\u0000"
                            },
                            "id": 13762,
                            "name": "Literal",
                            "src": "7101:13:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "01000000",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"\u0001\u0000\u0000\u0000\"",
                              "value": "\u0001\u0000\u0000\u0000"
                            },
                            "id": 13763,
                            "name": "Literal",
                            "src": "7142:13:50"
                          }
                        ],
                        "id": 13764,
                        "name": "FunctionCall",
                        "src": "6624:557:50"
                      }
                    ],
                    "id": 13765,
                    "name": "VariableDeclarationStatement",
                    "src": "6592:589:50"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 13728
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "hash256",
                              "referencedDeclaration": 11851,
                              "type": "function (bytes memory) pure returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13749,
                                  "type": "bytes memory",
                                  "value": "_sighashPreimage"
                                },
                                "id": 13766,
                                "name": "Identifier",
                                "src": "7198:16:50"
                              }
                            ],
                            "id": 13767,
                            "name": "MemberAccess",
                            "src": "7198:24:50"
                          }
                        ],
                        "id": 13768,
                        "name": "FunctionCall",
                        "src": "7198:26:50"
                      }
                    ],
                    "id": 13769,
                    "name": "Return",
                    "src": "7191:33:50"
                  }
                ],
                "id": 13770,
                "name": "Block",
                "src": "6164:1067:50"
              }
            ],
            "id": 13771,
            "name": "FunctionDefinition",
            "src": "5832:1399:50"
          },
          {
            "attributes": {
              "documentation": "@notice                 calculates the signature hash of a Bitcoin transaction with the provided details\n @dev                    documented in bip143. many values are hardcoded here\n @param _outpoint        the bitcoin UTXO id (32-byte txid + 4-byte output index)\n @param _inputPKH        the input pubkeyhash (hash160(sender_pubkey))\n @param _inputValue      the value of the input in satoshi\n @param _outputValue     the value of the output in satoshi\n @param _outputPKH       the output pubkeyhash (hash160(recipient_pubkey))\n @return                 the double-sha256 (hash256) signature hash as defined by bip143",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "wpkhToWpkhSighash",
              "scope": 13824,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outpoint",
                      "scope": 13799,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13772,
                        "name": "ElementaryTypeName",
                        "src": "7949:5:50"
                      }
                    ],
                    "id": 13773,
                    "name": "VariableDeclaration",
                    "src": "7949:22:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_inputPKH",
                      "scope": 13799,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes20",
                          "type": "bytes20"
                        },
                        "id": 13774,
                        "name": "ElementaryTypeName",
                        "src": "8001:7:50"
                      }
                    ],
                    "id": 13775,
                    "name": "VariableDeclaration",
                    "src": "8001:17:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_inputValue",
                      "scope": 13799,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 13776,
                        "name": "ElementaryTypeName",
                        "src": "8048:6:50"
                      }
                    ],
                    "id": 13777,
                    "name": "VariableDeclaration",
                    "src": "8048:18:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outputValue",
                      "scope": 13799,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 13778,
                        "name": "ElementaryTypeName",
                        "src": "8090:6:50"
                      }
                    ],
                    "id": 13779,
                    "name": "VariableDeclaration",
                    "src": "8090:19:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outputPKH",
                      "scope": 13799,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes20",
                          "type": "bytes20"
                        },
                        "id": 13780,
                        "name": "ElementaryTypeName",
                        "src": "8133:7:50"
                      }
                    ],
                    "id": 13781,
                    "name": "VariableDeclaration",
                    "src": "8133:18:50"
                  }
                ],
                "id": 13782,
                "name": "ParameterList",
                "src": "7939:238:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13799,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13783,
                        "name": "ElementaryTypeName",
                        "src": "8201:7:50"
                      }
                    ],
                    "id": 13784,
                    "name": "VariableDeclaration",
                    "src": "8201:7:50"
                  }
                ],
                "id": 13785,
                "name": "ParameterList",
                "src": "8200:9:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 13785
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes20",
                                  "typeString": "bytes20"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13771,
                              "type": "function (bytes memory,bytes20,bytes8,bytes8,bytes memory) pure returns (bytes32)",
                              "value": "wpkhSpendSighash"
                            },
                            "id": 13786,
                            "name": "Identifier",
                            "src": "8227:16:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13773,
                              "type": "bytes memory",
                              "value": "_outpoint"
                            },
                            "id": 13787,
                            "name": "Identifier",
                            "src": "8257:9:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13775,
                              "type": "bytes20",
                              "value": "_inputPKH"
                            },
                            "id": 13788,
                            "name": "Identifier",
                            "src": "8280:9:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13777,
                              "type": "bytes8",
                              "value": "_inputValue"
                            },
                            "id": 13789,
                            "name": "Identifier",
                            "src": "8303:11:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13779,
                              "type": "bytes8",
                              "value": "_outputValue"
                            },
                            "id": 13790,
                            "name": "Identifier",
                            "src": "8328:12:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_bde11925feafe00f4d9d48ef4480be1ea68d808b9c557770a6133e20d41f44bf",
                                      "typeString": "literal_string \"\u0016\u0000\u0014\""
                                    },
                                    {
                                      "typeIdentifier": "t_bytes20",
                                      "typeString": "bytes20"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "encodePacked",
                                  "referencedDeclaration": null,
                                  "type": "function () pure returns (bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18347,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 13791,
                                    "name": "Identifier",
                                    "src": "8354:3:50"
                                  }
                                ],
                                "id": 13792,
                                "name": "MemberAccess",
                                "src": "8354:16:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "160014",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "string",
                                  "type": "literal_string \"\u0016\u0000\u0014\"",
                                  "value": "\u0016\u0000\u0014"
                                },
                                "id": 13793,
                                "name": "Literal",
                                "src": "8386:11:50"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13781,
                                  "type": "bytes20",
                                  "value": "_outputPKH"
                                },
                                "id": 13794,
                                "name": "Identifier",
                                "src": "8426:10:50"
                              }
                            ],
                            "id": 13795,
                            "name": "FunctionCall",
                            "src": "8354:83:50"
                          }
                        ],
                        "id": 13796,
                        "name": "FunctionCall",
                        "src": "8227:224:50"
                      }
                    ],
                    "id": 13797,
                    "name": "Return",
                    "src": "8220:231:50"
                  }
                ],
                "id": 13798,
                "name": "Block",
                "src": "8210:248:50"
              }
            ],
            "id": 13799,
            "name": "FunctionDefinition",
            "src": "7913:545:50"
          },
          {
            "attributes": {
              "documentation": "@notice                 Preserved for API compatibility with older version\n @dev                    documented in bip143. many values are hardcoded here\n @param _outpoint        the bitcoin UTXO id (32-byte txid + 4-byte output index)\n @param _inputPKH        the input pubkeyhash (hash160(sender_pubkey))\n @param _inputValue      the value of the input in satoshi\n @param _outputValue     the value of the output in satoshi\n @param _outputPKH       the output pubkeyhash (hash160(recipient_pubkey))\n @return                 the double-sha256 (hash256) signature hash as defined by bip143",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "oneInputOneOutputSighash",
              "scope": 13824,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outpoint",
                      "scope": 13823,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13800,
                        "name": "ElementaryTypeName",
                        "src": "9153:5:50"
                      }
                    ],
                    "id": 13801,
                    "name": "VariableDeclaration",
                    "src": "9153:22:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_inputPKH",
                      "scope": 13823,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes20",
                          "type": "bytes20"
                        },
                        "id": 13802,
                        "name": "ElementaryTypeName",
                        "src": "9205:7:50"
                      }
                    ],
                    "id": 13803,
                    "name": "VariableDeclaration",
                    "src": "9205:17:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_inputValue",
                      "scope": 13823,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 13804,
                        "name": "ElementaryTypeName",
                        "src": "9252:6:50"
                      }
                    ],
                    "id": 13805,
                    "name": "VariableDeclaration",
                    "src": "9252:18:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outputValue",
                      "scope": 13823,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 13806,
                        "name": "ElementaryTypeName",
                        "src": "9294:6:50"
                      }
                    ],
                    "id": 13807,
                    "name": "VariableDeclaration",
                    "src": "9294:19:50"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outputPKH",
                      "scope": 13823,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes20",
                          "type": "bytes20"
                        },
                        "id": 13808,
                        "name": "ElementaryTypeName",
                        "src": "9337:7:50"
                      }
                    ],
                    "id": 13809,
                    "name": "VariableDeclaration",
                    "src": "9337:18:50"
                  }
                ],
                "id": 13810,
                "name": "ParameterList",
                "src": "9143:238:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13823,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13811,
                        "name": "ElementaryTypeName",
                        "src": "9405:7:50"
                      }
                    ],
                    "id": 13812,
                    "name": "VariableDeclaration",
                    "src": "9405:7:50"
                  }
                ],
                "id": 13813,
                "name": "ParameterList",
                "src": "9404:9:50"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 13813
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes20",
                                  "typeString": "bytes20"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes20",
                                  "typeString": "bytes20"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13799,
                              "type": "function (bytes memory,bytes20,bytes8,bytes8,bytes20) pure returns (bytes32)",
                              "value": "wpkhToWpkhSighash"
                            },
                            "id": 13814,
                            "name": "Identifier",
                            "src": "9431:17:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13801,
                              "type": "bytes memory",
                              "value": "_outpoint"
                            },
                            "id": 13815,
                            "name": "Identifier",
                            "src": "9449:9:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13803,
                              "type": "bytes20",
                              "value": "_inputPKH"
                            },
                            "id": 13816,
                            "name": "Identifier",
                            "src": "9460:9:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13805,
                              "type": "bytes8",
                              "value": "_inputValue"
                            },
                            "id": 13817,
                            "name": "Identifier",
                            "src": "9471:11:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13807,
                              "type": "bytes8",
                              "value": "_outputValue"
                            },
                            "id": 13818,
                            "name": "Identifier",
                            "src": "9484:12:50"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13809,
                              "type": "bytes20",
                              "value": "_outputPKH"
                            },
                            "id": 13819,
                            "name": "Identifier",
                            "src": "9498:10:50"
                          }
                        ],
                        "id": 13820,
                        "name": "FunctionCall",
                        "src": "9431:78:50"
                      }
                    ],
                    "id": 13821,
                    "name": "Return",
                    "src": "9424:85:50"
                  }
                ],
                "id": 13822,
                "name": "Block",
                "src": "9414:102:50"
              }
            ],
            "id": 13823,
            "name": "FunctionDefinition",
            "src": "9110:406:50"
          }
        ],
        "id": 13824,
        "name": "ContractDefinition",
        "src": "183:9336:50"
      }
    ],
    "id": 13825,
    "name": "SourceUnit",
    "src": "0:9520:50"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {},
      "address": "0x1Fd7C419A217f041CAeCDAE2fd2a1897A5aE7e37",
      "transactionHash": "0x42e664f7ee0ada14aadd286625ceec16609533d627010354c27582d9f243da89"
    }
  },
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T12:01:17.130Z",
  "networkType": "ethereum",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}