{
  "contractName": "WitnetProxy",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    },
    {
      "inputs": [],
      "name": "implementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_initData",
          "type": "bytes"
        }
      ],
      "name": "upgradeTo",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initData\",\"type\":\"bytes\"}],\"name\":\"upgradeTo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Guillermo D\\u00edaz <guillermo@witnet.io>\",\"kind\":\"dev\",\"methods\":{\"upgradeTo(address,bytes)\":{\"params\":{\"_initData\":\"Raw data with which new implementation will be initialized.\",\"_newImplementation\":\"New implementation address.\"},\"returns\":{\"_0\":\"Returns whether new implementation would be further upgradable, or not.\"}}},\"title\":\"WitnetProxy: upgradable delegate-proxy contract. \",\"version\":1},\"userdoc\":{\"events\":{\"Upgraded(address)\":{\"notice\":\"Event emitted every time the implementation gets updated.\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470).\"},\"implementation()\":{\"notice\":\"Returns proxy's current implementation address.\"},\"upgradeTo(address,bytes)\":{\"notice\":\"Upgrades the `implementation` address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/WitnetProxy.sol\":\"WitnetProxy\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x2d9dc2fe26180f74c11c13663647d38e259e45f95eb88f57b61d2160b0109d3e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81233d1f98060113d9922180bb0f14f8335856fe9f339134b09335e9f678c377\",\"dweb:/ipfs/QmWh6R35SarhAn4z2wH8SU456jJSYL2FgucfTFgbHJJN4E\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"project:/contracts/core/WitnetProxy.sol\":{\"keccak256\":\"0x6f0ec2c544192c9439bde88f5ed4efec5bdef506cb0dcb739c29329a798033fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ca05338334632aab3aef3c17a4b8686251ec488da49b9fcd3712642e57e0ce2a\",\"dweb:/ipfs/QmZk1uDdytKFii4TXUnJkFBBB3CZVSPKKR85ugFjWUTufS\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]},\"project:/contracts/patterns/Proxiable.sol\":{\"keccak256\":\"0x86032205378fed9ed2bf155eed8ce4bdbb13b7f5960850c6d50954a38b61a3d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f89978eda4244a13f42a6092a94ac829bb3e38c92d77d4978b9f32894b187a63\",\"dweb:/ipfs/Qmbc1XaFCvLm3Sxvh7tP29Ug32jBGy3avsCqBGAptxs765\"]},\"project:/contracts/patterns/Upgradeable.sol\":{\"keccak256\":\"0x49d1a83abc7a9b39d224677dde65ead4b7f1104332a94c9e619854b2a6b3a89e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e6a798a953af921a5b4e24e3f78bebae97819a85c90deb12ec505952faa42814\",\"dweb:/ipfs/QmVJhv4x3MXf4aDbMC5Q259K8kZNvxSXzmy8anoow7nS7k\"]}},\"version\":1}",
  "bytecode": "0x6080604052348015600e575f5ffd5b506109958061001c5f395ff3fe60806040526004361061002c575f3560e01c80635c60da1b146100605780636fbc15e91461009157610033565b3661003357005b5f61003c6100c0565b9050604051365f82375f5f3683855af43d805f843e81801561005c578184f35b8184fd5b34801561006b575f5ffd5b506100746100c0565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab366004610778565b6100ee565b6040519015158152602001610088565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b5f6001600160a01b03831661014a5760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b5f6101536100c0565b90506001600160a01b038116156104f757806001600160a01b0316846001600160a01b0316036101c55760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610141565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561021f575060408051601f3d908101601f1916820190925261021c91810190610810565b60015b61027e5760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610141565b806102cb5760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610141565b506040513360248201525f9081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b1790525161031c9190610836565b5f60405180830381855af49150503d805f8114610354576040519150601f19603f3d011682016040523d82523d5f602084013e610359565b606091505b50915091508161037b5760405162461bcd60e51b81526004016101419061084c565b8080602001905181019061038f9190610810565b6103db5760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610141565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610417573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043b9190610893565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610477573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061049b9190610893565b146104f45760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610141565b50505b5f5f856001600160a01b03168560405160240161051491906108d8565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b179052516105499190610836565b5f60405180830381855af49150503d805f8114610581576040519150601f19603f3d011682016040523d82523d5f602084013e610586565b606091505b509150915081610620576044815110156105ed5760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610141565b6004810190508080602001905181019061060791906108ea565b60405162461bcd60e51b815260040161014191906108d8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106df575060408051601f3d908101601f191682019092526106dc91810190610810565b60015b6106fb5760405162461bcd60e51b81526004016101419061084c565b935061070692505050565b92915050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156107495761074961070c565b604052919050565b5f67ffffffffffffffff82111561076a5761076a61070c565b50601f01601f191660200190565b5f5f60408385031215610789575f5ffd5b82356001600160a01b038116811461079f575f5ffd5b9150602083013567ffffffffffffffff8111156107ba575f5ffd5b8301601f810185136107ca575f5ffd5b80356107dd6107d882610751565b610720565b8181528660208385010111156107f1575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215610820575f5ffd5b8151801515811461082f575f5ffd5b9392505050565b5f82518060208501845e5f920191825250919050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b5f602082840312156108a3575f5ffd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61082f60208301846108aa565b5f602082840312156108fa575f5ffd5b815167ffffffffffffffff811115610910575f5ffd5b8201601f81018413610920575f5ffd5b805161092e6107d882610751565b818152856020838501011115610942575f5ffd5b8160208401602083015e5f9181016020019190915294935050505056fea2646970667358221220a8415d02311c8820d22429929d1fce9f26d5e64d00552717dedf051fcf03fde664736f6c634300081e0033",
  "deployedBytecode": "0x60806040526004361061002c575f3560e01c80635c60da1b146100605780636fbc15e91461009157610033565b3661003357005b5f61003c6100c0565b9050604051365f82375f5f3683855af43d805f843e81801561005c578184f35b8184fd5b34801561006b575f5ffd5b506100746100c0565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab366004610778565b6100ee565b6040519015158152602001610088565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b5f6001600160a01b03831661014a5760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b5f6101536100c0565b90506001600160a01b038116156104f757806001600160a01b0316846001600160a01b0316036101c55760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610141565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561021f575060408051601f3d908101601f1916820190925261021c91810190610810565b60015b61027e5760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610141565b806102cb5760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610141565b506040513360248201525f9081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b1790525161031c9190610836565b5f60405180830381855af49150503d805f8114610354576040519150601f19603f3d011682016040523d82523d5f602084013e610359565b606091505b50915091508161037b5760405162461bcd60e51b81526004016101419061084c565b8080602001905181019061038f9190610810565b6103db5760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610141565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610417573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043b9190610893565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610477573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061049b9190610893565b146104f45760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610141565b50505b5f5f856001600160a01b03168560405160240161051491906108d8565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b179052516105499190610836565b5f60405180830381855af49150503d805f8114610581576040519150601f19603f3d011682016040523d82523d5f602084013e610586565b606091505b509150915081610620576044815110156105ed5760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610141565b6004810190508080602001905181019061060791906108ea565b60405162461bcd60e51b815260040161014191906108d8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106df575060408051601f3d908101601f191682019092526106dc91810190610810565b60015b6106fb5760405162461bcd60e51b81526004016101419061084c565b935061070692505050565b92915050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156107495761074961070c565b604052919050565b5f67ffffffffffffffff82111561076a5761076a61070c565b50601f01601f191660200190565b5f5f60408385031215610789575f5ffd5b82356001600160a01b038116811461079f575f5ffd5b9150602083013567ffffffffffffffff8111156107ba575f5ffd5b8301601f810185136107ca575f5ffd5b80356107dd6107d882610751565b610720565b8181528660208385010111156107f1575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215610820575f5ffd5b8151801515811461082f575f5ffd5b9392505050565b5f82518060208501845e5f920191825250919050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b5f602082840312156108a3575f5ffd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61082f60208301846108aa565b5f602082840312156108fa575f5ffd5b815167ffffffffffffffff811115610910575f5ffd5b8201601f81018413610920575f5ffd5b805161092e6107d882610751565b818152856020838501011115610942575f5ffd5b8160208401602083015e5f9181016020019190915294935050505056fea2646970667358221220a8415d02311c8820d22429929d1fce9f26d5e64d00552717dedf051fcf03fde664736f6c634300081e0033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nativeSrc": "0:7155:136",
        "nodeType": "YulBlock",
        "src": "0:7155:136",
        "statements": [
          {
            "nativeSrc": "6:3:136",
            "nodeType": "YulBlock",
            "src": "6:3:136",
            "statements": []
          },
          {
            "body": {
              "nativeSrc": "115:102:136",
              "nodeType": "YulBlock",
              "src": "115:102:136",
              "statements": [
                {
                  "nativeSrc": "125:26:136",
                  "nodeType": "YulAssignment",
                  "src": "125:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "137:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "137:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "148:2:136",
                        "nodeType": "YulLiteral",
                        "src": "148:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "133:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "133:3:136"
                    },
                    "nativeSrc": "133:18:136",
                    "nodeType": "YulFunctionCall",
                    "src": "133:18:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "125:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "125:4:136"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "167:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "167:9:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "182:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "182:6:136"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "198:3:136",
                                    "nodeType": "YulLiteral",
                                    "src": "198:3:136",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "203:1:136",
                                    "nodeType": "YulLiteral",
                                    "src": "203:1:136",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "194:3:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "194:3:136"
                                },
                                "nativeSrc": "194:11:136",
                                "nodeType": "YulFunctionCall",
                                "src": "194:11:136"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "207:1:136",
                                "nodeType": "YulLiteral",
                                "src": "207:1:136",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "190:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "190:3:136"
                            },
                            "nativeSrc": "190:19:136",
                            "nodeType": "YulFunctionCall",
                            "src": "190:19:136"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "178:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "178:3:136"
                        },
                        "nativeSrc": "178:32:136",
                        "nodeType": "YulFunctionCall",
                        "src": "178:32:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "160:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "160:6:136"
                    },
                    "nativeSrc": "160:51:136",
                    "nodeType": "YulFunctionCall",
                    "src": "160:51:136"
                  },
                  "nativeSrc": "160:51:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "160:51:136"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nativeSrc": "14:203:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "84:9:136",
                "nodeType": "YulTypedName",
                "src": "84:9:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "95:6:136",
                "nodeType": "YulTypedName",
                "src": "95:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "106:4:136",
                "nodeType": "YulTypedName",
                "src": "106:4:136",
                "type": ""
              }
            ],
            "src": "14:203:136"
          },
          {
            "body": {
              "nativeSrc": "254:95:136",
              "nodeType": "YulBlock",
              "src": "254:95:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "271:1:136",
                        "nodeType": "YulLiteral",
                        "src": "271:1:136",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "278:3:136",
                            "nodeType": "YulLiteral",
                            "src": "278:3:136",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "283:10:136",
                            "nodeType": "YulLiteral",
                            "src": "283:10:136",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "274:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "274:3:136"
                        },
                        "nativeSrc": "274:20:136",
                        "nodeType": "YulFunctionCall",
                        "src": "274:20:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "264:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "264:6:136"
                    },
                    "nativeSrc": "264:31:136",
                    "nodeType": "YulFunctionCall",
                    "src": "264:31:136"
                  },
                  "nativeSrc": "264:31:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "264:31:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "311:1:136",
                        "nodeType": "YulLiteral",
                        "src": "311:1:136",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "314:4:136",
                        "nodeType": "YulLiteral",
                        "src": "314:4:136",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "304:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "304:6:136"
                    },
                    "nativeSrc": "304:15:136",
                    "nodeType": "YulFunctionCall",
                    "src": "304:15:136"
                  },
                  "nativeSrc": "304:15:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "304:15:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "335:1:136",
                        "nodeType": "YulLiteral",
                        "src": "335:1:136",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "338:4:136",
                        "nodeType": "YulLiteral",
                        "src": "338:4:136",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nativeSrc": "328:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "328:6:136"
                    },
                    "nativeSrc": "328:15:136",
                    "nodeType": "YulFunctionCall",
                    "src": "328:15:136"
                  },
                  "nativeSrc": "328:15:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "328:15:136"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nativeSrc": "222:127:136",
            "nodeType": "YulFunctionDefinition",
            "src": "222:127:136"
          },
          {
            "body": {
              "nativeSrc": "399:230:136",
              "nodeType": "YulBlock",
              "src": "399:230:136",
              "statements": [
                {
                  "nativeSrc": "409:19:136",
                  "nodeType": "YulAssignment",
                  "src": "409:19:136",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "425:2:136",
                        "nodeType": "YulLiteral",
                        "src": "425:2:136",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "419:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "419:5:136"
                    },
                    "nativeSrc": "419:9:136",
                    "nodeType": "YulFunctionCall",
                    "src": "419:9:136"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nativeSrc": "409:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "409:6:136"
                    }
                  ]
                },
                {
                  "nativeSrc": "437:58:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "437:58:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nativeSrc": "459:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "459:6:136"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "size",
                                "nativeSrc": "475:4:136",
                                "nodeType": "YulIdentifier",
                                "src": "475:4:136"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "481:2:136",
                                "nodeType": "YulLiteral",
                                "src": "481:2:136",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "471:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "471:3:136"
                            },
                            "nativeSrc": "471:13:136",
                            "nodeType": "YulFunctionCall",
                            "src": "471:13:136"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "490:2:136",
                                "nodeType": "YulLiteral",
                                "src": "490:2:136",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nativeSrc": "486:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "486:3:136"
                            },
                            "nativeSrc": "486:7:136",
                            "nodeType": "YulFunctionCall",
                            "src": "486:7:136"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "467:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "467:3:136"
                        },
                        "nativeSrc": "467:27:136",
                        "nodeType": "YulFunctionCall",
                        "src": "467:27:136"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "455:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "455:3:136"
                    },
                    "nativeSrc": "455:40:136",
                    "nodeType": "YulFunctionCall",
                    "src": "455:40:136"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nativeSrc": "441:10:136",
                      "nodeType": "YulTypedName",
                      "src": "441:10:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "570:22:136",
                    "nodeType": "YulBlock",
                    "src": "570:22:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nativeSrc": "572:16:136",
                            "nodeType": "YulIdentifier",
                            "src": "572:16:136"
                          },
                          "nativeSrc": "572:18:136",
                          "nodeType": "YulFunctionCall",
                          "src": "572:18:136"
                        },
                        "nativeSrc": "572:18:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "572:18:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nativeSrc": "513:10:136",
                            "nodeType": "YulIdentifier",
                            "src": "513:10:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "525:18:136",
                            "nodeType": "YulLiteral",
                            "src": "525:18:136",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nativeSrc": "510:2:136",
                          "nodeType": "YulIdentifier",
                          "src": "510:2:136"
                        },
                        "nativeSrc": "510:34:136",
                        "nodeType": "YulFunctionCall",
                        "src": "510:34:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nativeSrc": "549:10:136",
                            "nodeType": "YulIdentifier",
                            "src": "549:10:136"
                          },
                          {
                            "name": "memPtr",
                            "nativeSrc": "561:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "561:6:136"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nativeSrc": "546:2:136",
                          "nodeType": "YulIdentifier",
                          "src": "546:2:136"
                        },
                        "nativeSrc": "546:22:136",
                        "nodeType": "YulFunctionCall",
                        "src": "546:22:136"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nativeSrc": "507:2:136",
                      "nodeType": "YulIdentifier",
                      "src": "507:2:136"
                    },
                    "nativeSrc": "507:62:136",
                    "nodeType": "YulFunctionCall",
                    "src": "507:62:136"
                  },
                  "nativeSrc": "504:88:136",
                  "nodeType": "YulIf",
                  "src": "504:88:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "608:2:136",
                        "nodeType": "YulLiteral",
                        "src": "608:2:136",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nativeSrc": "612:10:136",
                        "nodeType": "YulIdentifier",
                        "src": "612:10:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "601:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "601:6:136"
                    },
                    "nativeSrc": "601:22:136",
                    "nodeType": "YulFunctionCall",
                    "src": "601:22:136"
                  },
                  "nativeSrc": "601:22:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "601:22:136"
                }
              ]
            },
            "name": "allocate_memory",
            "nativeSrc": "354:275:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "size",
                "nativeSrc": "379:4:136",
                "nodeType": "YulTypedName",
                "src": "379:4:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "memPtr",
                "nativeSrc": "388:6:136",
                "nodeType": "YulTypedName",
                "src": "388:6:136",
                "type": ""
              }
            ],
            "src": "354:275:136"
          },
          {
            "body": {
              "nativeSrc": "691:129:136",
              "nodeType": "YulBlock",
              "src": "691:129:136",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "735:22:136",
                    "nodeType": "YulBlock",
                    "src": "735:22:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nativeSrc": "737:16:136",
                            "nodeType": "YulIdentifier",
                            "src": "737:16:136"
                          },
                          "nativeSrc": "737:18:136",
                          "nodeType": "YulFunctionCall",
                          "src": "737:18:136"
                        },
                        "nativeSrc": "737:18:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "737:18:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nativeSrc": "707:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "707:6:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "715:18:136",
                        "nodeType": "YulLiteral",
                        "src": "715:18:136",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "704:2:136",
                      "nodeType": "YulIdentifier",
                      "src": "704:2:136"
                    },
                    "nativeSrc": "704:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "704:30:136"
                  },
                  "nativeSrc": "701:56:136",
                  "nodeType": "YulIf",
                  "src": "701:56:136"
                },
                {
                  "nativeSrc": "766:48:136",
                  "nodeType": "YulAssignment",
                  "src": "766:48:136",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "length",
                                "nativeSrc": "786:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "786:6:136"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "794:2:136",
                                "nodeType": "YulLiteral",
                                "src": "794:2:136",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "782:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "782:3:136"
                            },
                            "nativeSrc": "782:15:136",
                            "nodeType": "YulFunctionCall",
                            "src": "782:15:136"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "803:2:136",
                                "nodeType": "YulLiteral",
                                "src": "803:2:136",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nativeSrc": "799:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "799:3:136"
                            },
                            "nativeSrc": "799:7:136",
                            "nodeType": "YulFunctionCall",
                            "src": "799:7:136"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "778:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "778:3:136"
                        },
                        "nativeSrc": "778:29:136",
                        "nodeType": "YulFunctionCall",
                        "src": "778:29:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "809:4:136",
                        "nodeType": "YulLiteral",
                        "src": "809:4:136",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "774:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "774:3:136"
                    },
                    "nativeSrc": "774:40:136",
                    "nodeType": "YulFunctionCall",
                    "src": "774:40:136"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nativeSrc": "766:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "766:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "array_allocation_size_bytes",
            "nativeSrc": "634:186:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "length",
                "nativeSrc": "671:6:136",
                "nodeType": "YulTypedName",
                "src": "671:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "size",
                "nativeSrc": "682:4:136",
                "nodeType": "YulTypedName",
                "src": "682:4:136",
                "type": ""
              }
            ],
            "src": "634:186:136"
          },
          {
            "body": {
              "nativeSrc": "921:773:136",
              "nodeType": "YulBlock",
              "src": "921:773:136",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "967:16:136",
                    "nodeType": "YulBlock",
                    "src": "967:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "976:1:136",
                              "nodeType": "YulLiteral",
                              "src": "976:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "979:1:136",
                              "nodeType": "YulLiteral",
                              "src": "979:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "969:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "969:6:136"
                          },
                          "nativeSrc": "969:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "969:12:136"
                        },
                        "nativeSrc": "969:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "969:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "942:7:136",
                            "nodeType": "YulIdentifier",
                            "src": "942:7:136"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "951:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "951:9:136"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "938:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "938:3:136"
                        },
                        "nativeSrc": "938:23:136",
                        "nodeType": "YulFunctionCall",
                        "src": "938:23:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "963:2:136",
                        "nodeType": "YulLiteral",
                        "src": "963:2:136",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "934:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "934:3:136"
                    },
                    "nativeSrc": "934:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "934:32:136"
                  },
                  "nativeSrc": "931:52:136",
                  "nodeType": "YulIf",
                  "src": "931:52:136"
                },
                {
                  "nativeSrc": "992:36:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "992:36:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1018:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "1018:9:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1005:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "1005:12:136"
                    },
                    "nativeSrc": "1005:23:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1005:23:136"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "996:5:136",
                      "nodeType": "YulTypedName",
                      "src": "996:5:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1091:16:136",
                    "nodeType": "YulBlock",
                    "src": "1091:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1100:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1100:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1103:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1103:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1093:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1093:6:136"
                          },
                          "nativeSrc": "1093:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "1093:12:136"
                        },
                        "nativeSrc": "1093:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "1093:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "1050:5:136",
                            "nodeType": "YulIdentifier",
                            "src": "1050:5:136"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nativeSrc": "1061:5:136",
                                "nodeType": "YulIdentifier",
                                "src": "1061:5:136"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1076:3:136",
                                        "nodeType": "YulLiteral",
                                        "src": "1076:3:136",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1081:1:136",
                                        "nodeType": "YulLiteral",
                                        "src": "1081:1:136",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nativeSrc": "1072:3:136",
                                      "nodeType": "YulIdentifier",
                                      "src": "1072:3:136"
                                    },
                                    "nativeSrc": "1072:11:136",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1072:11:136"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1085:1:136",
                                    "nodeType": "YulLiteral",
                                    "src": "1085:1:136",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nativeSrc": "1068:3:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "1068:3:136"
                                },
                                "nativeSrc": "1068:19:136",
                                "nodeType": "YulFunctionCall",
                                "src": "1068:19:136"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "1057:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "1057:3:136"
                            },
                            "nativeSrc": "1057:31:136",
                            "nodeType": "YulFunctionCall",
                            "src": "1057:31:136"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "1047:2:136",
                          "nodeType": "YulIdentifier",
                          "src": "1047:2:136"
                        },
                        "nativeSrc": "1047:42:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1047:42:136"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "1040:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1040:6:136"
                    },
                    "nativeSrc": "1040:50:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1040:50:136"
                  },
                  "nativeSrc": "1037:70:136",
                  "nodeType": "YulIf",
                  "src": "1037:70:136"
                },
                {
                  "nativeSrc": "1116:15:136",
                  "nodeType": "YulAssignment",
                  "src": "1116:15:136",
                  "value": {
                    "name": "value",
                    "nativeSrc": "1126:5:136",
                    "nodeType": "YulIdentifier",
                    "src": "1126:5:136"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "1116:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1116:6:136"
                    }
                  ]
                },
                {
                  "nativeSrc": "1140:46:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1140:46:136",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1171:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "1171:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1182:2:136",
                            "nodeType": "YulLiteral",
                            "src": "1182:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1167:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1167:3:136"
                        },
                        "nativeSrc": "1167:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1167:18:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1154:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "1154:12:136"
                    },
                    "nativeSrc": "1154:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1154:32:136"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nativeSrc": "1144:6:136",
                      "nodeType": "YulTypedName",
                      "src": "1144:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1229:16:136",
                    "nodeType": "YulBlock",
                    "src": "1229:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1238:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1238:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1241:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1241:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1231:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1231:6:136"
                          },
                          "nativeSrc": "1231:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "1231:12:136"
                        },
                        "nativeSrc": "1231:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "1231:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "1201:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "1201:6:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1209:18:136",
                        "nodeType": "YulLiteral",
                        "src": "1209:18:136",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1198:2:136",
                      "nodeType": "YulIdentifier",
                      "src": "1198:2:136"
                    },
                    "nativeSrc": "1198:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1198:30:136"
                  },
                  "nativeSrc": "1195:50:136",
                  "nodeType": "YulIf",
                  "src": "1195:50:136"
                },
                {
                  "nativeSrc": "1254:32:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1254:32:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1268:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "1268:9:136"
                      },
                      {
                        "name": "offset",
                        "nativeSrc": "1279:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "1279:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "1264:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "1264:3:136"
                    },
                    "nativeSrc": "1264:22:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1264:22:136"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nativeSrc": "1258:2:136",
                      "nodeType": "YulTypedName",
                      "src": "1258:2:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1334:16:136",
                    "nodeType": "YulBlock",
                    "src": "1334:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1343:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1343:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1346:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1346:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1336:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1336:6:136"
                          },
                          "nativeSrc": "1336:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "1336:12:136"
                        },
                        "nativeSrc": "1336:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "1336:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nativeSrc": "1313:2:136",
                                "nodeType": "YulIdentifier",
                                "src": "1313:2:136"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "1317:4:136",
                                "nodeType": "YulLiteral",
                                "src": "1317:4:136",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1309:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "1309:3:136"
                            },
                            "nativeSrc": "1309:13:136",
                            "nodeType": "YulFunctionCall",
                            "src": "1309:13:136"
                          },
                          {
                            "name": "dataEnd",
                            "nativeSrc": "1324:7:136",
                            "nodeType": "YulIdentifier",
                            "src": "1324:7:136"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nativeSrc": "1305:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1305:3:136"
                        },
                        "nativeSrc": "1305:27:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1305:27:136"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "1298:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1298:6:136"
                    },
                    "nativeSrc": "1298:35:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1298:35:136"
                  },
                  "nativeSrc": "1295:55:136",
                  "nodeType": "YulIf",
                  "src": "1295:55:136"
                },
                {
                  "nativeSrc": "1359:30:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1359:30:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nativeSrc": "1386:2:136",
                        "nodeType": "YulIdentifier",
                        "src": "1386:2:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1373:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "1373:12:136"
                    },
                    "nativeSrc": "1373:16:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1373:16:136"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "1363:6:136",
                      "nodeType": "YulTypedName",
                      "src": "1363:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "1398:65:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1398:65:136",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nativeSrc": "1455:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1455:6:136"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_bytes",
                          "nativeSrc": "1427:27:136",
                          "nodeType": "YulIdentifier",
                          "src": "1427:27:136"
                        },
                        "nativeSrc": "1427:35:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1427:35:136"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nativeSrc": "1411:15:136",
                      "nodeType": "YulIdentifier",
                      "src": "1411:15:136"
                    },
                    "nativeSrc": "1411:52:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1411:52:136"
                  },
                  "variables": [
                    {
                      "name": "array",
                      "nativeSrc": "1402:5:136",
                      "nodeType": "YulTypedName",
                      "src": "1402:5:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nativeSrc": "1479:5:136",
                        "nodeType": "YulIdentifier",
                        "src": "1479:5:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "1486:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "1486:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1472:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1472:6:136"
                    },
                    "nativeSrc": "1472:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1472:21:136"
                  },
                  "nativeSrc": "1472:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "1472:21:136"
                },
                {
                  "body": {
                    "nativeSrc": "1543:16:136",
                    "nodeType": "YulBlock",
                    "src": "1543:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1552:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1552:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1555:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1555:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1545:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1545:6:136"
                          },
                          "nativeSrc": "1545:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "1545:12:136"
                        },
                        "nativeSrc": "1545:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "1545:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nativeSrc": "1516:2:136",
                                "nodeType": "YulIdentifier",
                                "src": "1516:2:136"
                              },
                              {
                                "name": "length",
                                "nativeSrc": "1520:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "1520:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1512:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "1512:3:136"
                            },
                            "nativeSrc": "1512:15:136",
                            "nodeType": "YulFunctionCall",
                            "src": "1512:15:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1529:2:136",
                            "nodeType": "YulLiteral",
                            "src": "1529:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1508:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1508:3:136"
                        },
                        "nativeSrc": "1508:24:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1508:24:136"
                      },
                      {
                        "name": "dataEnd",
                        "nativeSrc": "1534:7:136",
                        "nodeType": "YulIdentifier",
                        "src": "1534:7:136"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1505:2:136",
                      "nodeType": "YulIdentifier",
                      "src": "1505:2:136"
                    },
                    "nativeSrc": "1505:37:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1505:37:136"
                  },
                  "nativeSrc": "1502:57:136",
                  "nodeType": "YulIf",
                  "src": "1502:57:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "array",
                            "nativeSrc": "1585:5:136",
                            "nodeType": "YulIdentifier",
                            "src": "1585:5:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1592:2:136",
                            "nodeType": "YulLiteral",
                            "src": "1592:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1581:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1581:3:136"
                        },
                        "nativeSrc": "1581:14:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1581:14:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nativeSrc": "1601:2:136",
                            "nodeType": "YulIdentifier",
                            "src": "1601:2:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1605:2:136",
                            "nodeType": "YulLiteral",
                            "src": "1605:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1597:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1597:3:136"
                        },
                        "nativeSrc": "1597:11:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1597:11:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "1610:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "1610:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nativeSrc": "1568:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "1568:12:136"
                    },
                    "nativeSrc": "1568:49:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1568:49:136"
                  },
                  "nativeSrc": "1568:49:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "1568:49:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "array",
                                "nativeSrc": "1641:5:136",
                                "nodeType": "YulIdentifier",
                                "src": "1641:5:136"
                              },
                              {
                                "name": "length",
                                "nativeSrc": "1648:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "1648:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1637:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "1637:3:136"
                            },
                            "nativeSrc": "1637:18:136",
                            "nodeType": "YulFunctionCall",
                            "src": "1637:18:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1657:2:136",
                            "nodeType": "YulLiteral",
                            "src": "1657:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1633:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1633:3:136"
                        },
                        "nativeSrc": "1633:27:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1633:27:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1662:1:136",
                        "nodeType": "YulLiteral",
                        "src": "1662:1:136",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1626:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1626:6:136"
                    },
                    "nativeSrc": "1626:38:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1626:38:136"
                  },
                  "nativeSrc": "1626:38:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "1626:38:136"
                },
                {
                  "nativeSrc": "1673:15:136",
                  "nodeType": "YulAssignment",
                  "src": "1673:15:136",
                  "value": {
                    "name": "array",
                    "nativeSrc": "1683:5:136",
                    "nodeType": "YulIdentifier",
                    "src": "1683:5:136"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "1673:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1673:6:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr",
            "nativeSrc": "825:869:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "879:9:136",
                "nodeType": "YulTypedName",
                "src": "879:9:136",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "890:7:136",
                "nodeType": "YulTypedName",
                "src": "890:7:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "902:6:136",
                "nodeType": "YulTypedName",
                "src": "902:6:136",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "910:6:136",
                "nodeType": "YulTypedName",
                "src": "910:6:136",
                "type": ""
              }
            ],
            "src": "825:869:136"
          },
          {
            "body": {
              "nativeSrc": "1794:92:136",
              "nodeType": "YulBlock",
              "src": "1794:92:136",
              "statements": [
                {
                  "nativeSrc": "1804:26:136",
                  "nodeType": "YulAssignment",
                  "src": "1804:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1816:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "1816:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1827:2:136",
                        "nodeType": "YulLiteral",
                        "src": "1827:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "1812:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "1812:3:136"
                    },
                    "nativeSrc": "1812:18:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1812:18:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "1804:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "1804:4:136"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1846:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "1846:9:136"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nativeSrc": "1871:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "1871:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nativeSrc": "1864:6:136",
                              "nodeType": "YulIdentifier",
                              "src": "1864:6:136"
                            },
                            "nativeSrc": "1864:14:136",
                            "nodeType": "YulFunctionCall",
                            "src": "1864:14:136"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nativeSrc": "1857:6:136",
                          "nodeType": "YulIdentifier",
                          "src": "1857:6:136"
                        },
                        "nativeSrc": "1857:22:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1857:22:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1839:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1839:6:136"
                    },
                    "nativeSrc": "1839:41:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1839:41:136"
                  },
                  "nativeSrc": "1839:41:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "1839:41:136"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nativeSrc": "1699:187:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1763:9:136",
                "nodeType": "YulTypedName",
                "src": "1763:9:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "1774:6:136",
                "nodeType": "YulTypedName",
                "src": "1774:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "1785:4:136",
                "nodeType": "YulTypedName",
                "src": "1785:4:136",
                "type": ""
              }
            ],
            "src": "1699:187:136"
          },
          {
            "body": {
              "nativeSrc": "2065:182:136",
              "nodeType": "YulBlock",
              "src": "2065:182:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2082:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "2082:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2093:2:136",
                        "nodeType": "YulLiteral",
                        "src": "2093:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2075:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2075:6:136"
                    },
                    "nativeSrc": "2075:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2075:21:136"
                  },
                  "nativeSrc": "2075:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "2075:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2116:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "2116:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2127:2:136",
                            "nodeType": "YulLiteral",
                            "src": "2127:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2112:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2112:3:136"
                        },
                        "nativeSrc": "2112:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2112:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2132:2:136",
                        "nodeType": "YulLiteral",
                        "src": "2132:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2105:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2105:6:136"
                    },
                    "nativeSrc": "2105:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2105:30:136"
                  },
                  "nativeSrc": "2105:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "2105:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2155:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "2155:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2166:2:136",
                            "nodeType": "YulLiteral",
                            "src": "2166:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2151:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2151:3:136"
                        },
                        "nativeSrc": "2151:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2151:18:136"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e",
                        "kind": "string",
                        "nativeSrc": "2171:34:136",
                        "nodeType": "YulLiteral",
                        "src": "2171:34:136",
                        "type": "",
                        "value": "WitnetProxy: null implementation"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2144:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2144:6:136"
                    },
                    "nativeSrc": "2144:62:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2144:62:136"
                  },
                  "nativeSrc": "2144:62:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "2144:62:136"
                },
                {
                  "nativeSrc": "2215:26:136",
                  "nodeType": "YulAssignment",
                  "src": "2215:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2227:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "2227:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2238:2:136",
                        "nodeType": "YulLiteral",
                        "src": "2238:2:136",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "2223:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "2223:3:136"
                    },
                    "nativeSrc": "2223:18:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2223:18:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "2215:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "2215:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "1891:356:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2042:9:136",
                "nodeType": "YulTypedName",
                "src": "2042:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2056:4:136",
                "nodeType": "YulTypedName",
                "src": "2056:4:136",
                "type": ""
              }
            ],
            "src": "1891:356:136"
          },
          {
            "body": {
              "nativeSrc": "2426:181:136",
              "nodeType": "YulBlock",
              "src": "2426:181:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2443:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "2443:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2454:2:136",
                        "nodeType": "YulLiteral",
                        "src": "2454:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2436:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2436:6:136"
                    },
                    "nativeSrc": "2436:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2436:21:136"
                  },
                  "nativeSrc": "2436:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "2436:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2477:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "2477:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2488:2:136",
                            "nodeType": "YulLiteral",
                            "src": "2488:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2473:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2473:3:136"
                        },
                        "nativeSrc": "2473:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2473:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2493:2:136",
                        "nodeType": "YulLiteral",
                        "src": "2493:2:136",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2466:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2466:6:136"
                    },
                    "nativeSrc": "2466:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2466:30:136"
                  },
                  "nativeSrc": "2466:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "2466:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2516:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "2516:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2527:2:136",
                            "nodeType": "YulLiteral",
                            "src": "2527:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2512:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2512:3:136"
                        },
                        "nativeSrc": "2512:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2512:18:136"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a206e6f7468696e6720746f2075706772616465",
                        "kind": "string",
                        "nativeSrc": "2532:33:136",
                        "nodeType": "YulLiteral",
                        "src": "2532:33:136",
                        "type": "",
                        "value": "WitnetProxy: nothing to upgrade"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2505:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2505:6:136"
                    },
                    "nativeSrc": "2505:61:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2505:61:136"
                  },
                  "nativeSrc": "2505:61:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "2505:61:136"
                },
                {
                  "nativeSrc": "2575:26:136",
                  "nodeType": "YulAssignment",
                  "src": "2575:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2587:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "2587:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2598:2:136",
                        "nodeType": "YulLiteral",
                        "src": "2598:2:136",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "2583:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "2583:3:136"
                    },
                    "nativeSrc": "2583:18:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2583:18:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "2575:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "2575:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "2252:355:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2403:9:136",
                "nodeType": "YulTypedName",
                "src": "2403:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2417:4:136",
                "nodeType": "YulTypedName",
                "src": "2417:4:136",
                "type": ""
              }
            ],
            "src": "2252:355:136"
          },
          {
            "body": {
              "nativeSrc": "2690:199:136",
              "nodeType": "YulBlock",
              "src": "2690:199:136",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "2736:16:136",
                    "nodeType": "YulBlock",
                    "src": "2736:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2745:1:136",
                              "nodeType": "YulLiteral",
                              "src": "2745:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2748:1:136",
                              "nodeType": "YulLiteral",
                              "src": "2748:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "2738:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "2738:6:136"
                          },
                          "nativeSrc": "2738:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "2738:12:136"
                        },
                        "nativeSrc": "2738:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "2738:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "2711:7:136",
                            "nodeType": "YulIdentifier",
                            "src": "2711:7:136"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "2720:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "2720:9:136"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "2707:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2707:3:136"
                        },
                        "nativeSrc": "2707:23:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2707:23:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2732:2:136",
                        "nodeType": "YulLiteral",
                        "src": "2732:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "2703:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "2703:3:136"
                    },
                    "nativeSrc": "2703:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2703:32:136"
                  },
                  "nativeSrc": "2700:52:136",
                  "nodeType": "YulIf",
                  "src": "2700:52:136"
                },
                {
                  "nativeSrc": "2761:29:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "2761:29:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2780:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "2780:9:136"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "2774:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "2774:5:136"
                    },
                    "nativeSrc": "2774:16:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2774:16:136"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "2765:5:136",
                      "nodeType": "YulTypedName",
                      "src": "2765:5:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "2843:16:136",
                    "nodeType": "YulBlock",
                    "src": "2843:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2852:1:136",
                              "nodeType": "YulLiteral",
                              "src": "2852:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2855:1:136",
                              "nodeType": "YulLiteral",
                              "src": "2855:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "2845:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "2845:6:136"
                          },
                          "nativeSrc": "2845:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "2845:12:136"
                        },
                        "nativeSrc": "2845:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "2845:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "2812:5:136",
                            "nodeType": "YulIdentifier",
                            "src": "2812:5:136"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nativeSrc": "2833:5:136",
                                    "nodeType": "YulIdentifier",
                                    "src": "2833:5:136"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nativeSrc": "2826:6:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "2826:6:136"
                                },
                                "nativeSrc": "2826:13:136",
                                "nodeType": "YulFunctionCall",
                                "src": "2826:13:136"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nativeSrc": "2819:6:136",
                              "nodeType": "YulIdentifier",
                              "src": "2819:6:136"
                            },
                            "nativeSrc": "2819:21:136",
                            "nodeType": "YulFunctionCall",
                            "src": "2819:21:136"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "2809:2:136",
                          "nodeType": "YulIdentifier",
                          "src": "2809:2:136"
                        },
                        "nativeSrc": "2809:32:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2809:32:136"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "2802:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2802:6:136"
                    },
                    "nativeSrc": "2802:40:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2802:40:136"
                  },
                  "nativeSrc": "2799:60:136",
                  "nodeType": "YulIf",
                  "src": "2799:60:136"
                },
                {
                  "nativeSrc": "2868:15:136",
                  "nodeType": "YulAssignment",
                  "src": "2868:15:136",
                  "value": {
                    "name": "value",
                    "nativeSrc": "2878:5:136",
                    "nodeType": "YulIdentifier",
                    "src": "2878:5:136"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "2868:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2868:6:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nativeSrc": "2612:277:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2656:9:136",
                "nodeType": "YulTypedName",
                "src": "2656:9:136",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "2667:7:136",
                "nodeType": "YulTypedName",
                "src": "2667:7:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "2679:6:136",
                "nodeType": "YulTypedName",
                "src": "2679:6:136",
                "type": ""
              }
            ],
            "src": "2612:277:136"
          },
          {
            "body": {
              "nativeSrc": "3068:232:136",
              "nodeType": "YulBlock",
              "src": "3068:232:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3085:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "3085:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3096:2:136",
                        "nodeType": "YulLiteral",
                        "src": "3096:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3078:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3078:6:136"
                    },
                    "nativeSrc": "3078:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3078:21:136"
                  },
                  "nativeSrc": "3078:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3078:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3119:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "3119:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3130:2:136",
                            "nodeType": "YulLiteral",
                            "src": "3130:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3115:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3115:3:136"
                        },
                        "nativeSrc": "3115:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3115:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3135:2:136",
                        "nodeType": "YulLiteral",
                        "src": "3135:2:136",
                        "type": "",
                        "value": "42"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3108:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3108:6:136"
                    },
                    "nativeSrc": "3108:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3108:30:136"
                  },
                  "nativeSrc": "3108:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3108:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3158:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "3158:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3169:2:136",
                            "nodeType": "YulLiteral",
                            "src": "3169:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3154:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3154:3:136"
                        },
                        "nativeSrc": "3154:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3154:18:136"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a20756e61626c6520746f20636865636b20757067",
                        "kind": "string",
                        "nativeSrc": "3174:34:136",
                        "nodeType": "YulLiteral",
                        "src": "3174:34:136",
                        "type": "",
                        "value": "WitnetProxy: unable to check upg"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3147:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3147:6:136"
                    },
                    "nativeSrc": "3147:62:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3147:62:136"
                  },
                  "nativeSrc": "3147:62:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3147:62:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3229:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "3229:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3240:2:136",
                            "nodeType": "YulLiteral",
                            "src": "3240:2:136",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3225:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3225:3:136"
                        },
                        "nativeSrc": "3225:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3225:18:136"
                      },
                      {
                        "hexValue": "7261646162696c697479",
                        "kind": "string",
                        "nativeSrc": "3245:12:136",
                        "nodeType": "YulLiteral",
                        "src": "3245:12:136",
                        "type": "",
                        "value": "radability"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3218:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3218:6:136"
                    },
                    "nativeSrc": "3218:40:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3218:40:136"
                  },
                  "nativeSrc": "3218:40:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3218:40:136"
                },
                {
                  "nativeSrc": "3267:27:136",
                  "nodeType": "YulAssignment",
                  "src": "3267:27:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3279:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "3279:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3290:3:136",
                        "nodeType": "YulLiteral",
                        "src": "3290:3:136",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "3275:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "3275:3:136"
                    },
                    "nativeSrc": "3275:19:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3275:19:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "3267:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "3267:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "2894:406:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3045:9:136",
                "nodeType": "YulTypedName",
                "src": "3045:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "3059:4:136",
                "nodeType": "YulTypedName",
                "src": "3059:4:136",
                "type": ""
              }
            ],
            "src": "2894:406:136"
          },
          {
            "body": {
              "nativeSrc": "3479:177:136",
              "nodeType": "YulBlock",
              "src": "3479:177:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3496:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "3496:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3507:2:136",
                        "nodeType": "YulLiteral",
                        "src": "3507:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3489:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3489:6:136"
                    },
                    "nativeSrc": "3489:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3489:21:136"
                  },
                  "nativeSrc": "3489:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3489:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3530:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "3530:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3541:2:136",
                            "nodeType": "YulLiteral",
                            "src": "3541:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3526:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3526:3:136"
                        },
                        "nativeSrc": "3526:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3526:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3546:2:136",
                        "nodeType": "YulLiteral",
                        "src": "3546:2:136",
                        "type": "",
                        "value": "27"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3519:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3519:6:136"
                    },
                    "nativeSrc": "3519:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3519:30:136"
                  },
                  "nativeSrc": "3519:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3519:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3569:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "3569:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3580:2:136",
                            "nodeType": "YulLiteral",
                            "src": "3580:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3565:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3565:3:136"
                        },
                        "nativeSrc": "3565:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3565:18:136"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a206e6f742075706772616461626c65",
                        "kind": "string",
                        "nativeSrc": "3585:29:136",
                        "nodeType": "YulLiteral",
                        "src": "3585:29:136",
                        "type": "",
                        "value": "WitnetProxy: not upgradable"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3558:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3558:6:136"
                    },
                    "nativeSrc": "3558:57:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3558:57:136"
                  },
                  "nativeSrc": "3558:57:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3558:57:136"
                },
                {
                  "nativeSrc": "3624:26:136",
                  "nodeType": "YulAssignment",
                  "src": "3624:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3636:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "3636:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3647:2:136",
                        "nodeType": "YulLiteral",
                        "src": "3647:2:136",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "3632:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "3632:3:136"
                    },
                    "nativeSrc": "3632:18:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3632:18:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "3624:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "3624:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "3305:351:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3456:9:136",
                "nodeType": "YulTypedName",
                "src": "3456:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "3470:4:136",
                "nodeType": "YulTypedName",
                "src": "3470:4:136",
                "type": ""
              }
            ],
            "src": "3305:351:136"
          },
          {
            "body": {
              "nativeSrc": "3798:164:136",
              "nodeType": "YulBlock",
              "src": "3798:164:136",
              "statements": [
                {
                  "nativeSrc": "3808:27:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3808:27:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nativeSrc": "3828:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "3828:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "3822:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "3822:5:136"
                    },
                    "nativeSrc": "3822:13:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3822:13:136"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "3812:6:136",
                      "nodeType": "YulTypedName",
                      "src": "3812:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "3850:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "3850:3:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "3859:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "3859:6:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3867:4:136",
                            "nodeType": "YulLiteral",
                            "src": "3867:4:136",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3855:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3855:3:136"
                        },
                        "nativeSrc": "3855:17:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3855:17:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "3874:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "3874:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mcopy",
                      "nativeSrc": "3844:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "3844:5:136"
                    },
                    "nativeSrc": "3844:37:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3844:37:136"
                  },
                  "nativeSrc": "3844:37:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3844:37:136"
                },
                {
                  "nativeSrc": "3890:26:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3890:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "3904:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "3904:3:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "3909:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "3909:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "3900:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "3900:3:136"
                    },
                    "nativeSrc": "3900:16:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3900:16:136"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nativeSrc": "3894:2:136",
                      "nodeType": "YulTypedName",
                      "src": "3894:2:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nativeSrc": "3932:2:136",
                        "nodeType": "YulIdentifier",
                        "src": "3932:2:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3936:1:136",
                        "nodeType": "YulLiteral",
                        "src": "3936:1:136",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3925:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3925:6:136"
                    },
                    "nativeSrc": "3925:13:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3925:13:136"
                  },
                  "nativeSrc": "3925:13:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3925:13:136"
                },
                {
                  "nativeSrc": "3947:9:136",
                  "nodeType": "YulAssignment",
                  "src": "3947:9:136",
                  "value": {
                    "name": "_1",
                    "nativeSrc": "3954:2:136",
                    "nodeType": "YulIdentifier",
                    "src": "3954:2:136"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nativeSrc": "3947:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "3947:3:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nativeSrc": "3661:301:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nativeSrc": "3774:3:136",
                "nodeType": "YulTypedName",
                "src": "3774:3:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "3779:6:136",
                "nodeType": "YulTypedName",
                "src": "3779:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nativeSrc": "3790:3:136",
                "nodeType": "YulTypedName",
                "src": "3790:3:136",
                "type": ""
              }
            ],
            "src": "3661:301:136"
          },
          {
            "body": {
              "nativeSrc": "4141:229:136",
              "nodeType": "YulBlock",
              "src": "4141:229:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4158:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "4158:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4169:2:136",
                        "nodeType": "YulLiteral",
                        "src": "4169:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4151:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4151:6:136"
                    },
                    "nativeSrc": "4151:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4151:21:136"
                  },
                  "nativeSrc": "4151:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4151:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4192:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "4192:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4203:2:136",
                            "nodeType": "YulLiteral",
                            "src": "4203:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4188:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4188:3:136"
                        },
                        "nativeSrc": "4188:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4188:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4208:2:136",
                        "nodeType": "YulLiteral",
                        "src": "4208:2:136",
                        "type": "",
                        "value": "39"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4181:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4181:6:136"
                    },
                    "nativeSrc": "4181:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4181:30:136"
                  },
                  "nativeSrc": "4181:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4181:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4231:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "4231:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4242:2:136",
                            "nodeType": "YulLiteral",
                            "src": "4242:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4227:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4227:3:136"
                        },
                        "nativeSrc": "4227:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4227:18:136"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65",
                        "kind": "string",
                        "nativeSrc": "4247:34:136",
                        "nodeType": "YulLiteral",
                        "src": "4247:34:136",
                        "type": "",
                        "value": "WitnetProxy: uncompliant impleme"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4220:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4220:6:136"
                    },
                    "nativeSrc": "4220:62:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4220:62:136"
                  },
                  "nativeSrc": "4220:62:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4220:62:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4302:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "4302:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4313:2:136",
                            "nodeType": "YulLiteral",
                            "src": "4313:2:136",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4298:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4298:3:136"
                        },
                        "nativeSrc": "4298:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4298:18:136"
                      },
                      {
                        "hexValue": "6e746174696f6e",
                        "kind": "string",
                        "nativeSrc": "4318:9:136",
                        "nodeType": "YulLiteral",
                        "src": "4318:9:136",
                        "type": "",
                        "value": "ntation"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4291:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4291:6:136"
                    },
                    "nativeSrc": "4291:37:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4291:37:136"
                  },
                  "nativeSrc": "4291:37:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4291:37:136"
                },
                {
                  "nativeSrc": "4337:27:136",
                  "nodeType": "YulAssignment",
                  "src": "4337:27:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4349:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "4349:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4360:3:136",
                        "nodeType": "YulLiteral",
                        "src": "4360:3:136",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4345:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "4345:3:136"
                    },
                    "nativeSrc": "4345:19:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4345:19:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "4337:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "4337:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "3967:403:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "4118:9:136",
                "nodeType": "YulTypedName",
                "src": "4118:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "4132:4:136",
                "nodeType": "YulTypedName",
                "src": "4132:4:136",
                "type": ""
              }
            ],
            "src": "3967:403:136"
          },
          {
            "body": {
              "nativeSrc": "4549:177:136",
              "nodeType": "YulBlock",
              "src": "4549:177:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4566:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "4566:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4577:2:136",
                        "nodeType": "YulLiteral",
                        "src": "4577:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4559:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4559:6:136"
                    },
                    "nativeSrc": "4559:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4559:21:136"
                  },
                  "nativeSrc": "4559:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4559:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4600:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "4600:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4611:2:136",
                            "nodeType": "YulLiteral",
                            "src": "4611:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4596:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4596:3:136"
                        },
                        "nativeSrc": "4596:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4596:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4616:2:136",
                        "nodeType": "YulLiteral",
                        "src": "4616:2:136",
                        "type": "",
                        "value": "27"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4589:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4589:6:136"
                    },
                    "nativeSrc": "4589:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4589:30:136"
                  },
                  "nativeSrc": "4589:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4589:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4639:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "4639:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4650:2:136",
                            "nodeType": "YulLiteral",
                            "src": "4650:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4635:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4635:3:136"
                        },
                        "nativeSrc": "4635:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4635:18:136"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a206e6f7420617574686f72697a6564",
                        "kind": "string",
                        "nativeSrc": "4655:29:136",
                        "nodeType": "YulLiteral",
                        "src": "4655:29:136",
                        "type": "",
                        "value": "WitnetProxy: not authorized"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4628:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4628:6:136"
                    },
                    "nativeSrc": "4628:57:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4628:57:136"
                  },
                  "nativeSrc": "4628:57:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4628:57:136"
                },
                {
                  "nativeSrc": "4694:26:136",
                  "nodeType": "YulAssignment",
                  "src": "4694:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4706:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "4706:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4717:2:136",
                        "nodeType": "YulLiteral",
                        "src": "4717:2:136",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4702:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "4702:3:136"
                    },
                    "nativeSrc": "4702:18:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4702:18:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "4694:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "4694:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "4375:351:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "4526:9:136",
                "nodeType": "YulTypedName",
                "src": "4526:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "4540:4:136",
                "nodeType": "YulTypedName",
                "src": "4540:4:136",
                "type": ""
              }
            ],
            "src": "4375:351:136"
          },
          {
            "body": {
              "nativeSrc": "4812:103:136",
              "nodeType": "YulBlock",
              "src": "4812:103:136",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "4858:16:136",
                    "nodeType": "YulBlock",
                    "src": "4858:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "4867:1:136",
                              "nodeType": "YulLiteral",
                              "src": "4867:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "4870:1:136",
                              "nodeType": "YulLiteral",
                              "src": "4870:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "4860:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "4860:6:136"
                          },
                          "nativeSrc": "4860:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "4860:12:136"
                        },
                        "nativeSrc": "4860:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "4860:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "4833:7:136",
                            "nodeType": "YulIdentifier",
                            "src": "4833:7:136"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "4842:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "4842:9:136"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "4829:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4829:3:136"
                        },
                        "nativeSrc": "4829:23:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4829:23:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4854:2:136",
                        "nodeType": "YulLiteral",
                        "src": "4854:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "4825:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "4825:3:136"
                    },
                    "nativeSrc": "4825:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4825:32:136"
                  },
                  "nativeSrc": "4822:52:136",
                  "nodeType": "YulIf",
                  "src": "4822:52:136"
                },
                {
                  "nativeSrc": "4883:26:136",
                  "nodeType": "YulAssignment",
                  "src": "4883:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4899:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "4899:9:136"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "4893:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "4893:5:136"
                    },
                    "nativeSrc": "4893:16:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4893:16:136"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "4883:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4883:6:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32_fromMemory",
            "nativeSrc": "4731:184:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "4778:9:136",
                "nodeType": "YulTypedName",
                "src": "4778:9:136",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "4789:7:136",
                "nodeType": "YulTypedName",
                "src": "4789:7:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "4801:6:136",
                "nodeType": "YulTypedName",
                "src": "4801:6:136",
                "type": ""
              }
            ],
            "src": "4731:184:136"
          },
          {
            "body": {
              "nativeSrc": "5094:226:136",
              "nodeType": "YulBlock",
              "src": "5094:226:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5111:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "5111:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5122:2:136",
                        "nodeType": "YulLiteral",
                        "src": "5122:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5104:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5104:6:136"
                    },
                    "nativeSrc": "5104:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5104:21:136"
                  },
                  "nativeSrc": "5104:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5104:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5145:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "5145:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5156:2:136",
                            "nodeType": "YulLiteral",
                            "src": "5156:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5141:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5141:3:136"
                        },
                        "nativeSrc": "5141:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5141:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5161:2:136",
                        "nodeType": "YulLiteral",
                        "src": "5161:2:136",
                        "type": "",
                        "value": "36"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5134:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5134:6:136"
                    },
                    "nativeSrc": "5134:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5134:30:136"
                  },
                  "nativeSrc": "5134:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5134:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5184:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "5184:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5195:2:136",
                            "nodeType": "YulLiteral",
                            "src": "5195:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5180:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5180:3:136"
                        },
                        "nativeSrc": "5180:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5180:18:136"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a2070726f786961626c655555494473206d69736d",
                        "kind": "string",
                        "nativeSrc": "5200:34:136",
                        "nodeType": "YulLiteral",
                        "src": "5200:34:136",
                        "type": "",
                        "value": "WitnetProxy: proxiableUUIDs mism"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5173:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5173:6:136"
                    },
                    "nativeSrc": "5173:62:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5173:62:136"
                  },
                  "nativeSrc": "5173:62:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5173:62:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5255:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "5255:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5266:2:136",
                            "nodeType": "YulLiteral",
                            "src": "5266:2:136",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5251:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5251:3:136"
                        },
                        "nativeSrc": "5251:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5251:18:136"
                      },
                      {
                        "hexValue": "61746368",
                        "kind": "string",
                        "nativeSrc": "5271:6:136",
                        "nodeType": "YulLiteral",
                        "src": "5271:6:136",
                        "type": "",
                        "value": "atch"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5244:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5244:6:136"
                    },
                    "nativeSrc": "5244:34:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5244:34:136"
                  },
                  "nativeSrc": "5244:34:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5244:34:136"
                },
                {
                  "nativeSrc": "5287:27:136",
                  "nodeType": "YulAssignment",
                  "src": "5287:27:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5299:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "5299:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5310:3:136",
                        "nodeType": "YulLiteral",
                        "src": "5310:3:136",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "5295:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "5295:3:136"
                    },
                    "nativeSrc": "5295:19:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5295:19:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "5287:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "5287:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "4920:400:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "5071:9:136",
                "nodeType": "YulTypedName",
                "src": "5071:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "5085:4:136",
                "nodeType": "YulTypedName",
                "src": "5085:4:136",
                "type": ""
              }
            ],
            "src": "4920:400:136"
          },
          {
            "body": {
              "nativeSrc": "5374:239:136",
              "nodeType": "YulBlock",
              "src": "5374:239:136",
              "statements": [
                {
                  "nativeSrc": "5384:26:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "5384:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nativeSrc": "5404:5:136",
                        "nodeType": "YulIdentifier",
                        "src": "5404:5:136"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "5398:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "5398:5:136"
                    },
                    "nativeSrc": "5398:12:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5398:12:136"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "5388:6:136",
                      "nodeType": "YulTypedName",
                      "src": "5388:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "5426:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "5426:3:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "5431:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "5431:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5419:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5419:6:136"
                    },
                    "nativeSrc": "5419:19:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5419:19:136"
                  },
                  "nativeSrc": "5419:19:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5419:19:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "5457:3:136",
                            "nodeType": "YulIdentifier",
                            "src": "5457:3:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5462:4:136",
                            "nodeType": "YulLiteral",
                            "src": "5462:4:136",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5453:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5453:3:136"
                        },
                        "nativeSrc": "5453:14:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5453:14:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "5473:5:136",
                            "nodeType": "YulIdentifier",
                            "src": "5473:5:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5480:4:136",
                            "nodeType": "YulLiteral",
                            "src": "5480:4:136",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5469:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5469:3:136"
                        },
                        "nativeSrc": "5469:16:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5469:16:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "5487:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "5487:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mcopy",
                      "nativeSrc": "5447:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "5447:5:136"
                    },
                    "nativeSrc": "5447:47:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5447:47:136"
                  },
                  "nativeSrc": "5447:47:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5447:47:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "pos",
                                "nativeSrc": "5518:3:136",
                                "nodeType": "YulIdentifier",
                                "src": "5518:3:136"
                              },
                              {
                                "name": "length",
                                "nativeSrc": "5523:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "5523:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "5514:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "5514:3:136"
                            },
                            "nativeSrc": "5514:16:136",
                            "nodeType": "YulFunctionCall",
                            "src": "5514:16:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5532:4:136",
                            "nodeType": "YulLiteral",
                            "src": "5532:4:136",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5510:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5510:3:136"
                        },
                        "nativeSrc": "5510:27:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5510:27:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5539:1:136",
                        "nodeType": "YulLiteral",
                        "src": "5539:1:136",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5503:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5503:6:136"
                    },
                    "nativeSrc": "5503:38:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5503:38:136"
                  },
                  "nativeSrc": "5503:38:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5503:38:136"
                },
                {
                  "nativeSrc": "5550:57:136",
                  "nodeType": "YulAssignment",
                  "src": "5550:57:136",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "5565:3:136",
                            "nodeType": "YulIdentifier",
                            "src": "5565:3:136"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nativeSrc": "5578:6:136",
                                    "nodeType": "YulIdentifier",
                                    "src": "5578:6:136"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "5586:2:136",
                                    "nodeType": "YulLiteral",
                                    "src": "5586:2:136",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "5574:3:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "5574:3:136"
                                },
                                "nativeSrc": "5574:15:136",
                                "nodeType": "YulFunctionCall",
                                "src": "5574:15:136"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "5595:2:136",
                                    "nodeType": "YulLiteral",
                                    "src": "5595:2:136",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nativeSrc": "5591:3:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "5591:3:136"
                                },
                                "nativeSrc": "5591:7:136",
                                "nodeType": "YulFunctionCall",
                                "src": "5591:7:136"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "5570:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "5570:3:136"
                            },
                            "nativeSrc": "5570:29:136",
                            "nodeType": "YulFunctionCall",
                            "src": "5570:29:136"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5561:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5561:3:136"
                        },
                        "nativeSrc": "5561:39:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5561:39:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5602:4:136",
                        "nodeType": "YulLiteral",
                        "src": "5602:4:136",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "5557:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "5557:3:136"
                    },
                    "nativeSrc": "5557:50:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5557:50:136"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nativeSrc": "5550:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "5550:3:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_bytes",
            "nativeSrc": "5325:288:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nativeSrc": "5351:5:136",
                "nodeType": "YulTypedName",
                "src": "5351:5:136",
                "type": ""
              },
              {
                "name": "pos",
                "nativeSrc": "5358:3:136",
                "nodeType": "YulTypedName",
                "src": "5358:3:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nativeSrc": "5366:3:136",
                "nodeType": "YulTypedName",
                "src": "5366:3:136",
                "type": ""
              }
            ],
            "src": "5325:288:136"
          },
          {
            "body": {
              "nativeSrc": "5737:98:136",
              "nodeType": "YulBlock",
              "src": "5737:98:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5754:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "5754:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5765:2:136",
                        "nodeType": "YulLiteral",
                        "src": "5765:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5747:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5747:6:136"
                    },
                    "nativeSrc": "5747:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5747:21:136"
                  },
                  "nativeSrc": "5747:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5747:21:136"
                },
                {
                  "nativeSrc": "5777:52:136",
                  "nodeType": "YulAssignment",
                  "src": "5777:52:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nativeSrc": "5802:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "5802:6:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5814:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "5814:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5825:2:136",
                            "nodeType": "YulLiteral",
                            "src": "5825:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5810:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5810:3:136"
                        },
                        "nativeSrc": "5810:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5810:18:136"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nativeSrc": "5785:16:136",
                      "nodeType": "YulIdentifier",
                      "src": "5785:16:136"
                    },
                    "nativeSrc": "5785:44:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5785:44:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "5777:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "5777:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
            "nativeSrc": "5618:217:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "5706:9:136",
                "nodeType": "YulTypedName",
                "src": "5706:9:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "5717:6:136",
                "nodeType": "YulTypedName",
                "src": "5717:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "5728:4:136",
                "nodeType": "YulTypedName",
                "src": "5728:4:136",
                "type": ""
              }
            ],
            "src": "5618:217:136"
          },
          {
            "body": {
              "nativeSrc": "6014:224:136",
              "nodeType": "YulBlock",
              "src": "6014:224:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6031:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "6031:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6042:2:136",
                        "nodeType": "YulLiteral",
                        "src": "6042:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6024:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6024:6:136"
                    },
                    "nativeSrc": "6024:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6024:21:136"
                  },
                  "nativeSrc": "6024:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6024:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6065:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "6065:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6076:2:136",
                            "nodeType": "YulLiteral",
                            "src": "6076:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6061:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6061:3:136"
                        },
                        "nativeSrc": "6061:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6061:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6081:2:136",
                        "nodeType": "YulLiteral",
                        "src": "6081:2:136",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6054:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6054:6:136"
                    },
                    "nativeSrc": "6054:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6054:30:136"
                  },
                  "nativeSrc": "6054:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6054:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6104:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "6104:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6115:2:136",
                            "nodeType": "YulLiteral",
                            "src": "6115:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6100:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6100:3:136"
                        },
                        "nativeSrc": "6100:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6100:18:136"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c",
                        "kind": "string",
                        "nativeSrc": "6120:34:136",
                        "nodeType": "YulLiteral",
                        "src": "6120:34:136",
                        "type": "",
                        "value": "WitnetProxy: initialization fail"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6093:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6093:6:136"
                    },
                    "nativeSrc": "6093:62:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6093:62:136"
                  },
                  "nativeSrc": "6093:62:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6093:62:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6175:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "6175:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6186:2:136",
                            "nodeType": "YulLiteral",
                            "src": "6186:2:136",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6171:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6171:3:136"
                        },
                        "nativeSrc": "6171:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6171:18:136"
                      },
                      {
                        "hexValue": "6564",
                        "kind": "string",
                        "nativeSrc": "6191:4:136",
                        "nodeType": "YulLiteral",
                        "src": "6191:4:136",
                        "type": "",
                        "value": "ed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6164:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6164:6:136"
                    },
                    "nativeSrc": "6164:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6164:32:136"
                  },
                  "nativeSrc": "6164:32:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6164:32:136"
                },
                {
                  "nativeSrc": "6205:27:136",
                  "nodeType": "YulAssignment",
                  "src": "6205:27:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6217:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "6217:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6228:3:136",
                        "nodeType": "YulLiteral",
                        "src": "6228:3:136",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "6213:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "6213:3:136"
                    },
                    "nativeSrc": "6213:19:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6213:19:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "6205:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "6205:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "5840:398:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "5991:9:136",
                "nodeType": "YulTypedName",
                "src": "5991:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "6005:4:136",
                "nodeType": "YulTypedName",
                "src": "6005:4:136",
                "type": ""
              }
            ],
            "src": "5840:398:136"
          },
          {
            "body": {
              "nativeSrc": "6334:595:136",
              "nodeType": "YulBlock",
              "src": "6334:595:136",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "6380:16:136",
                    "nodeType": "YulBlock",
                    "src": "6380:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "6389:1:136",
                              "nodeType": "YulLiteral",
                              "src": "6389:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "6392:1:136",
                              "nodeType": "YulLiteral",
                              "src": "6392:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "6382:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "6382:6:136"
                          },
                          "nativeSrc": "6382:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "6382:12:136"
                        },
                        "nativeSrc": "6382:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "6382:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "6355:7:136",
                            "nodeType": "YulIdentifier",
                            "src": "6355:7:136"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "6364:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "6364:9:136"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "6351:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6351:3:136"
                        },
                        "nativeSrc": "6351:23:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6351:23:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6376:2:136",
                        "nodeType": "YulLiteral",
                        "src": "6376:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "6347:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "6347:3:136"
                    },
                    "nativeSrc": "6347:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6347:32:136"
                  },
                  "nativeSrc": "6344:52:136",
                  "nodeType": "YulIf",
                  "src": "6344:52:136"
                },
                {
                  "nativeSrc": "6405:30:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "6405:30:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6425:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "6425:9:136"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "6419:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "6419:5:136"
                    },
                    "nativeSrc": "6419:16:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6419:16:136"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nativeSrc": "6409:6:136",
                      "nodeType": "YulTypedName",
                      "src": "6409:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "6478:16:136",
                    "nodeType": "YulBlock",
                    "src": "6478:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "6487:1:136",
                              "nodeType": "YulLiteral",
                              "src": "6487:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "6490:1:136",
                              "nodeType": "YulLiteral",
                              "src": "6490:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "6480:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "6480:6:136"
                          },
                          "nativeSrc": "6480:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "6480:12:136"
                        },
                        "nativeSrc": "6480:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "6480:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "6450:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "6450:6:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6458:18:136",
                        "nodeType": "YulLiteral",
                        "src": "6458:18:136",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "6447:2:136",
                      "nodeType": "YulIdentifier",
                      "src": "6447:2:136"
                    },
                    "nativeSrc": "6447:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6447:30:136"
                  },
                  "nativeSrc": "6444:50:136",
                  "nodeType": "YulIf",
                  "src": "6444:50:136"
                },
                {
                  "nativeSrc": "6503:32:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "6503:32:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6517:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "6517:9:136"
                      },
                      {
                        "name": "offset",
                        "nativeSrc": "6528:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "6528:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "6513:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "6513:3:136"
                    },
                    "nativeSrc": "6513:22:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6513:22:136"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nativeSrc": "6507:2:136",
                      "nodeType": "YulTypedName",
                      "src": "6507:2:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "6583:16:136",
                    "nodeType": "YulBlock",
                    "src": "6583:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "6592:1:136",
                              "nodeType": "YulLiteral",
                              "src": "6592:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "6595:1:136",
                              "nodeType": "YulLiteral",
                              "src": "6595:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "6585:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "6585:6:136"
                          },
                          "nativeSrc": "6585:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "6585:12:136"
                        },
                        "nativeSrc": "6585:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "6585:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nativeSrc": "6562:2:136",
                                "nodeType": "YulIdentifier",
                                "src": "6562:2:136"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "6566:4:136",
                                "nodeType": "YulLiteral",
                                "src": "6566:4:136",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "6558:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "6558:3:136"
                            },
                            "nativeSrc": "6558:13:136",
                            "nodeType": "YulFunctionCall",
                            "src": "6558:13:136"
                          },
                          {
                            "name": "dataEnd",
                            "nativeSrc": "6573:7:136",
                            "nodeType": "YulIdentifier",
                            "src": "6573:7:136"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nativeSrc": "6554:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6554:3:136"
                        },
                        "nativeSrc": "6554:27:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6554:27:136"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "6547:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6547:6:136"
                    },
                    "nativeSrc": "6547:35:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6547:35:136"
                  },
                  "nativeSrc": "6544:55:136",
                  "nodeType": "YulIf",
                  "src": "6544:55:136"
                },
                {
                  "nativeSrc": "6608:23:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "6608:23:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nativeSrc": "6628:2:136",
                        "nodeType": "YulIdentifier",
                        "src": "6628:2:136"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "6622:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "6622:5:136"
                    },
                    "nativeSrc": "6622:9:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6622:9:136"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "6612:6:136",
                      "nodeType": "YulTypedName",
                      "src": "6612:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "6640:65:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "6640:65:136",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nativeSrc": "6697:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "6697:6:136"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_bytes",
                          "nativeSrc": "6669:27:136",
                          "nodeType": "YulIdentifier",
                          "src": "6669:27:136"
                        },
                        "nativeSrc": "6669:35:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6669:35:136"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nativeSrc": "6653:15:136",
                      "nodeType": "YulIdentifier",
                      "src": "6653:15:136"
                    },
                    "nativeSrc": "6653:52:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6653:52:136"
                  },
                  "variables": [
                    {
                      "name": "array",
                      "nativeSrc": "6644:5:136",
                      "nodeType": "YulTypedName",
                      "src": "6644:5:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nativeSrc": "6721:5:136",
                        "nodeType": "YulIdentifier",
                        "src": "6721:5:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "6728:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "6728:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6714:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6714:6:136"
                    },
                    "nativeSrc": "6714:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6714:21:136"
                  },
                  "nativeSrc": "6714:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6714:21:136"
                },
                {
                  "body": {
                    "nativeSrc": "6785:16:136",
                    "nodeType": "YulBlock",
                    "src": "6785:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "6794:1:136",
                              "nodeType": "YulLiteral",
                              "src": "6794:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "6797:1:136",
                              "nodeType": "YulLiteral",
                              "src": "6797:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "6787:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "6787:6:136"
                          },
                          "nativeSrc": "6787:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "6787:12:136"
                        },
                        "nativeSrc": "6787:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "6787:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nativeSrc": "6758:2:136",
                                "nodeType": "YulIdentifier",
                                "src": "6758:2:136"
                              },
                              {
                                "name": "length",
                                "nativeSrc": "6762:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "6762:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "6754:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "6754:3:136"
                            },
                            "nativeSrc": "6754:15:136",
                            "nodeType": "YulFunctionCall",
                            "src": "6754:15:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6771:2:136",
                            "nodeType": "YulLiteral",
                            "src": "6771:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6750:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6750:3:136"
                        },
                        "nativeSrc": "6750:24:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6750:24:136"
                      },
                      {
                        "name": "dataEnd",
                        "nativeSrc": "6776:7:136",
                        "nodeType": "YulIdentifier",
                        "src": "6776:7:136"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "6747:2:136",
                      "nodeType": "YulIdentifier",
                      "src": "6747:2:136"
                    },
                    "nativeSrc": "6747:37:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6747:37:136"
                  },
                  "nativeSrc": "6744:57:136",
                  "nodeType": "YulIf",
                  "src": "6744:57:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "array",
                            "nativeSrc": "6820:5:136",
                            "nodeType": "YulIdentifier",
                            "src": "6820:5:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6827:2:136",
                            "nodeType": "YulLiteral",
                            "src": "6827:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6816:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6816:3:136"
                        },
                        "nativeSrc": "6816:14:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6816:14:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nativeSrc": "6836:2:136",
                            "nodeType": "YulIdentifier",
                            "src": "6836:2:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6840:2:136",
                            "nodeType": "YulLiteral",
                            "src": "6840:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6832:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6832:3:136"
                        },
                        "nativeSrc": "6832:11:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6832:11:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "6845:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "6845:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mcopy",
                      "nativeSrc": "6810:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "6810:5:136"
                    },
                    "nativeSrc": "6810:42:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6810:42:136"
                  },
                  "nativeSrc": "6810:42:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6810:42:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "array",
                                "nativeSrc": "6876:5:136",
                                "nodeType": "YulIdentifier",
                                "src": "6876:5:136"
                              },
                              {
                                "name": "length",
                                "nativeSrc": "6883:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "6883:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "6872:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "6872:3:136"
                            },
                            "nativeSrc": "6872:18:136",
                            "nodeType": "YulFunctionCall",
                            "src": "6872:18:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6892:2:136",
                            "nodeType": "YulLiteral",
                            "src": "6892:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6868:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6868:3:136"
                        },
                        "nativeSrc": "6868:27:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6868:27:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6897:1:136",
                        "nodeType": "YulLiteral",
                        "src": "6897:1:136",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6861:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6861:6:136"
                    },
                    "nativeSrc": "6861:38:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6861:38:136"
                  },
                  "nativeSrc": "6861:38:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6861:38:136"
                },
                {
                  "nativeSrc": "6908:15:136",
                  "nodeType": "YulAssignment",
                  "src": "6908:15:136",
                  "value": {
                    "name": "array",
                    "nativeSrc": "6918:5:136",
                    "nodeType": "YulIdentifier",
                    "src": "6918:5:136"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "6908:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6908:6:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
            "nativeSrc": "6243:686:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "6300:9:136",
                "nodeType": "YulTypedName",
                "src": "6300:9:136",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "6311:7:136",
                "nodeType": "YulTypedName",
                "src": "6311:7:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "6323:6:136",
                "nodeType": "YulTypedName",
                "src": "6323:6:136",
                "type": ""
              }
            ],
            "src": "6243:686:136"
          },
          {
            "body": {
              "nativeSrc": "7055:98:136",
              "nodeType": "YulBlock",
              "src": "7055:98:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "7072:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "7072:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "7083:2:136",
                        "nodeType": "YulLiteral",
                        "src": "7083:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "7065:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "7065:6:136"
                    },
                    "nativeSrc": "7065:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "7065:21:136"
                  },
                  "nativeSrc": "7065:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "7065:21:136"
                },
                {
                  "nativeSrc": "7095:52:136",
                  "nodeType": "YulAssignment",
                  "src": "7095:52:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nativeSrc": "7120:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "7120:6:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "7132:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "7132:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "7143:2:136",
                            "nodeType": "YulLiteral",
                            "src": "7143:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "7128:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "7128:3:136"
                        },
                        "nativeSrc": "7128:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "7128:18:136"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nativeSrc": "7103:16:136",
                      "nodeType": "YulIdentifier",
                      "src": "7103:16:136"
                    },
                    "nativeSrc": "7103:44:136",
                    "nodeType": "YulFunctionCall",
                    "src": "7103:44:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "7095:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "7095:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "6934:219:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "7024:9:136",
                "nodeType": "YulTypedName",
                "src": "7024:9:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "7035:6:136",
                "nodeType": "YulTypedName",
                "src": "7035:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "7046:4:136",
                "nodeType": "YulTypedName",
                "src": "7046:4:136",
                "type": ""
              }
            ],
            "src": "6934:219:136"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(and(add(length, 31), not(31)), 0x20)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(length))\n        mstore(array, length)\n        if gt(add(add(_1, length), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, 32), add(_1, 32), length)\n        mstore(add(add(array, length), 32), 0)\n        value1 := array\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"WitnetProxy: null implementation\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"WitnetProxy: nothing to upgrade\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"WitnetProxy: unable to check upg\")\n        mstore(add(headStart, 96), \"radability\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"WitnetProxy: not upgradable\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        mcopy(pos, add(value0, 0x20), length)\n        let _1 := add(pos, length)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"WitnetProxy: uncompliant impleme\")\n        mstore(add(headStart, 96), \"ntation\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"WitnetProxy: not authorized\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"WitnetProxy: proxiableUUIDs mism\")\n        mstore(add(headStart, 96), \"atch\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        mcopy(add(pos, 0x20), add(value, 0x20), length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"WitnetProxy: initialization fail\")\n        mstore(add(headStart, 96), \"ed\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := mload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(length))\n        mstore(array, length)\n        if gt(add(add(_1, length), 32), dataEnd) { revert(0, 0) }\n        mcopy(add(array, 32), add(_1, 32), length)\n        mstore(add(add(array, length), 32), 0)\n        value0 := array\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n}",
      "id": 136,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "259:5139:25:-:0;;;515:17;;;;;;;;;;259:5139;;;;;;",
  "deployedSourceMap": "259:5139:25:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;741:23;767:16;:14;:16::i;:::-;741:42;;1131:4;1125:11;1171:14;1168:1;1163:3;1150:36;1275:1;1272;1256:14;1251:3;1234:15;1227:5;1214:63;1303:16;1356:4;1353:1;1348:3;1333:28;1382:6;1406:119;;;;1668:4;1663:3;1656:17;1406:119;1500:4;1495:3;1488:17;1776:110;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;178:32:136;;;160:51;;148:2;133:18;1776:110:25;;;;;;;;2180:2793;;;;;;;;;;-1:-1:-1;2180:2793:25;;;;;:::i;:::-;;:::i;:::-;;;1864:14:136;;1857:22;1839:41;;1827:2;1812:18;2180:2793:25;1699:187:136;1776:110:25;5309:66;1850:28;-1:-1:-1;;;;;1850:28:25;;1776:110::o;2180:2793::-;2276:4;-1:-1:-1;;;;;2353:32:25;;2345:77;;;;-1:-1:-1;;;2345:77:25;;2093:2:136;2345:77:25;;;2075:21:136;;;2112:18;;;2105:30;2171:34;2151:18;;;2144:62;2223:18;;2345:77:25;;;;;;;;;2435:26;2464:16;:14;:16::i;:::-;2435:45;-1:-1:-1;;;;;;2495:32:25;;;2491:1298;;2647:18;-1:-1:-1;;;;;2625:40:25;:18;-1:-1:-1;;;;;2625:40:25;;2617:84;;;;-1:-1:-1;;;2617:84:25;;2454:2:136;2617:84:25;;;2436:21:136;2493:2;2473:18;;;2466:30;2532:33;2512:18;;;2505:61;2583:18;;2617:84:25;2252:355:136;2617:84:25;2817:18;-1:-1:-1;;;;;2805:44:25;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2805:46:25;;;;;;;;-1:-1:-1;;2805:46:25;;;;;;;;;;;;:::i;:::-;;;2801:262;;2995:52;;-1:-1:-1;;;2995:52:25;;3096:2:136;2995:52:25;;;3078:21:136;3135:2;3115:18;;;3108:30;3174:34;3154:18;;;3147:62;-1:-1:-1;;;3225:18:136;;;3218:40;3275:19;;2995:52:25;2894:406:136;2801:262:25;2908:13;2900:53;;;;-1:-1:-1;;;2900:53:25;;3507:2:136;2900:53:25;;;3489:21:136;3546:2;3526:18;;;3519:30;3585:29;3565:18;;;3558:57;3632:18;;2900:53:25;3305:351:136;2900:53:25;-1:-1:-1;3267:125:25;;3363:10;3267:125;;;160:51:136;3176:15:25;;;;-1:-1:-1;;;;;3217:31:25;;;133:18:136;;3267:125:25;;;-1:-1:-1;;3267:125:25;;;;;;;;;;;;;;-1:-1:-1;;;;;3267:125:25;-1:-1:-1;;;3267:125:25;;;3217:190;;;3267:125;3217:190;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3175:232;;;;3430:10;3422:62;;;;-1:-1:-1;;;3422:62:25;;;;;;;:::i;:::-;3518:7;3507:27;;;;;;;;;;;;:::i;:::-;3499:67;;;;-1:-1:-1;;;3499:67:25;;4577:2:136;3499:67:25;;;4559:21:136;4616:2;4596:18;;;4589:30;4655:29;4635:18;;;4628:57;4702:18;;3499:67:25;4375:351:136;3499:67:25;3670:18;-1:-1:-1;;;;;3658:45:25;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3619:18;-1:-1:-1;;;;;3607:45:25;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:98;3581:196;;;;-1:-1:-1;;;3581:196:25;;5122:2:136;3581:196:25;;;5104:21:136;5161:2;5141:18;;;5134:30;5200:34;5180:18;;;5173:62;-1:-1:-1;;;5251:18:136;;;5244:34;5295:19;;3581:196:25;4920:400:136;3581:196:25;2529:1260;;2491:1298;3874:20;3896:24;3924:18;-1:-1:-1;;;;;3924:31:25;4050:9;3970:104;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3970:104:25;;;;;;;;;;;;;;-1:-1:-1;;;;;3970:104:25;-1:-1:-1;;;3970:104:25;;;3924:161;;;3970:104;3924:161;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3873:212;;;;4101:15;4096:344;;4158:2;4137:11;:18;:23;4133:296;;;4181:44;;-1:-1:-1;;;4181:44:25;;6042:2:136;4181:44:25;;;6024:21:136;6081:2;6061:18;;;6054:30;6120:34;6100:18;;;6093:62;-1:-1:-1;;;6171:18:136;;;6164:32;6213:19;;4181:44:25;5840:398:136;4133:296:25;4330:4;4317:11;4313:22;4298:37;;4390:11;4379:33;;;;;;;;;;;;:::i;:::-;4372:41;;-1:-1:-1;;;4372:41:25;;;;;;;;:::i;4133:296::-;5309:66;4534:49;;-1:-1:-1;;;;;;4534:49:25;-1:-1:-1;;;;;4534:49:25;;;;;;;;4605:28;;;;-1:-1:-1;;4605:28:25;4762:18;-1:-1:-1;;;;;4750:44:25;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4750:46:25;;;;;;;;-1:-1:-1;;4750:46:25;;;;;;;;;;;;:::i;:::-;;;4746:220;;4904:50;;-1:-1:-1;;;4904:50:25;;;;;;;:::i;4746:220::-;4848:13;-1:-1:-1;4841:20:25;;-1:-1:-1;;;4841:20:25;2180:2793;;;;;:::o;222:127:136:-;283:10;278:3;274:20;271:1;264:31;314:4;311:1;304:15;338:4;335:1;328:15;354:275;425:2;419:9;490:2;471:13;;-1:-1:-1;;467:27:136;455:40;;525:18;510:34;;546:22;;;507:62;504:88;;;572:18;;:::i;:::-;608:2;601:22;354:275;;-1:-1:-1;354:275:136:o;634:186::-;682:4;715:18;707:6;704:30;701:56;;;737:18;;:::i;:::-;-1:-1:-1;803:2:136;782:15;-1:-1:-1;;778:29:136;809:4;774:40;;634:186::o;825:869::-;902:6;910;963:2;951:9;942:7;938:23;934:32;931:52;;;979:1;976;969:12;931:52;1005:23;;-1:-1:-1;;;;;1057:31:136;;1047:42;;1037:70;;1103:1;1100;1093:12;1037:70;1126:5;-1:-1:-1;1182:2:136;1167:18;;1154:32;1209:18;1198:30;;1195:50;;;1241:1;1238;1231:12;1195:50;1264:22;;1317:4;1309:13;;1305:27;-1:-1:-1;1295:55:136;;1346:1;1343;1336:12;1295:55;1386:2;1373:16;1411:52;1427:35;1455:6;1427:35;:::i;:::-;1411:52;:::i;:::-;1486:6;1479:5;1472:21;1534:7;1529:2;1520:6;1516:2;1512:15;1508:24;1505:37;1502:57;;;1555:1;1552;1545:12;1502:57;1610:6;1605:2;1601;1597:11;1592:2;1585:5;1581:14;1568:49;1662:1;1657:2;1648:6;1641:5;1637:18;1633:27;1626:38;1683:5;1673:15;;;;;825:869;;;;;:::o;2612:277::-;2679:6;2732:2;2720:9;2711:7;2707:23;2703:32;2700:52;;;2748:1;2745;2738:12;2700:52;2780:9;2774:16;2833:5;2826:13;2819:21;2812:5;2809:32;2799:60;;2855:1;2852;2845:12;2799:60;2878:5;2612:277;-1:-1:-1;;;2612:277:136:o;3661:301::-;3790:3;3828:6;3822:13;3874:6;3867:4;3859:6;3855:17;3850:3;3844:37;3936:1;3900:16;;3925:13;;;-1:-1:-1;3900:16:136;3661:301;-1:-1:-1;3661:301:136:o;3967:403::-;4169:2;4151:21;;;4208:2;4188:18;;;4181:30;4247:34;4242:2;4227:18;;4220:62;-1:-1:-1;;;4313:2:136;4298:18;;4291:37;4360:3;4345:19;;3967:403::o;4731:184::-;4801:6;4854:2;4842:9;4833:7;4829:23;4825:32;4822:52;;;4870:1;4867;4860:12;4822:52;-1:-1:-1;4893:16:136;;4731:184;-1:-1:-1;4731:184:136:o;5325:288::-;5366:3;5404:5;5398:12;5431:6;5426:3;5419:19;5487:6;5480:4;5473:5;5469:16;5462:4;5457:3;5453:14;5447:47;5539:1;5532:4;5523:6;5518:3;5514:16;5510:27;5503:38;5602:4;5595:2;5591:7;5586:2;5578:6;5574:15;5570:29;5565:3;5561:39;5557:50;5550:57;;;5325:288;;;;:::o;5618:217::-;5765:2;5754:9;5747:21;5728:4;5785:44;5825:2;5814:9;5810:18;5802:6;5785:44;:::i;6243:686::-;6323:6;6376:2;6364:9;6355:7;6351:23;6347:32;6344:52;;;6392:1;6389;6382:12;6344:52;6425:9;6419:16;6458:18;6450:6;6447:30;6444:50;;;6490:1;6487;6480:12;6444:50;6513:22;;6566:4;6558:13;;6554:27;-1:-1:-1;6544:55:136;;6595:1;6592;6585:12;6544:55;6628:2;6622:9;6653:52;6669:35;6697:6;6669:35;:::i;6653:52::-;6728:6;6721:5;6714:21;6776:7;6771:2;6762:6;6758:2;6754:15;6750:24;6747:37;6744:57;;;6797:1;6794;6787:12;6744:57;6845:6;6840:2;6836;6832:11;6827:2;6820:5;6816:14;6810:42;6897:1;6872:18;;;6892:2;6868:27;6861:38;;;;6876:5;6243:686;-1:-1:-1;;;;6243:686:136:o",
  "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.7.0 <0.9.0;\r\npragma experimental ABIEncoderV2;\r\n\r\nimport \"../patterns/Upgradeable.sol\";\r\n\r\n/// @title WitnetProxy: upgradable delegate-proxy contract. \r\n/// @author Guillermo Díaz <guillermo@witnet.io>\r\ncontract WitnetProxy {\r\n\r\n    /// Event emitted every time the implementation gets updated.\r\n    event Upgraded(address indexed implementation);  \r\n\r\n    /// Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470).\r\n    constructor () {}\r\n\r\n    receive() virtual external payable {}\r\n\r\n    /// Payable fallback accepts delegating calls to payable functions.  \r\n    fallback() external payable { /* solhint-disable no-complex-fallback */\r\n        address _implementation = implementation();\r\n        assembly { /* solhint-disable avoid-low-level-calls */\r\n            // Gas optimized delegate call to 'implementation' contract.\r\n            // Note: `msg.data`, `msg.sender` and `msg.value` will be passed over \r\n            //       to actual implementation of `msg.sig` within `implementation` contract.\r\n            let ptr := mload(0x40)\r\n            calldatacopy(ptr, 0, calldatasize())\r\n            let result := delegatecall(gas(), _implementation, ptr, calldatasize(), 0, 0)\r\n            let size := returndatasize()\r\n            returndatacopy(ptr, 0, size)\r\n            switch result\r\n                case 0  { \r\n                    // pass back revert message:\r\n                    revert(ptr, size) \r\n                }\r\n                default {\r\n                  // pass back same data as returned by 'implementation' contract:\r\n                  return(ptr, size) \r\n                }\r\n        }\r\n    }\r\n\r\n    /// Returns proxy's current implementation address.\r\n    function implementation() public view returns (address) {\r\n        return __proxySlot().implementation;\r\n    }\r\n\r\n    /// Upgrades the `implementation` address.\r\n    /// @param _newImplementation New implementation address.\r\n    /// @param _initData Raw data with which new implementation will be initialized.\r\n    /// @return Returns whether new implementation would be further upgradable, or not.\r\n    function upgradeTo(address _newImplementation, bytes memory _initData)\r\n        public returns (bool)\r\n    {\r\n        // New implementation cannot be null:\r\n        require(_newImplementation != address(0), \"WitnetProxy: null implementation\");\r\n\r\n        address _oldImplementation = implementation();\r\n        if (_oldImplementation != address(0)) {\r\n            // New implementation address must differ from current one:\r\n            require(_newImplementation != _oldImplementation, \"WitnetProxy: nothing to upgrade\");\r\n\r\n            // Assert whether current implementation is intrinsically upgradable:\r\n            try Upgradeable(_oldImplementation).isUpgradable() returns (bool _isUpgradable) {\r\n                require(_isUpgradable, \"WitnetProxy: not upgradable\");\r\n            } catch {\r\n                revert(\"WitnetProxy: unable to check upgradability\");\r\n            }\r\n\r\n            // Assert whether current implementation allows `msg.sender` to upgrade the proxy:\r\n            (bool _wasCalled, bytes memory _result) = _oldImplementation.delegatecall(\r\n                abi.encodeWithSignature(\r\n                    \"isUpgradableFrom(address)\",\r\n                    msg.sender\r\n                )\r\n            );\r\n            require(_wasCalled, \"WitnetProxy: uncompliant implementation\");\r\n            require(abi.decode(_result, (bool)), \"WitnetProxy: not authorized\");\r\n            require(\r\n                Upgradeable(_oldImplementation).proxiableUUID() == Upgradeable(_newImplementation).proxiableUUID(),\r\n                \"WitnetProxy: proxiableUUIDs mismatch\"\r\n            );\r\n        }\r\n\r\n        // Initialize new implementation within proxy-context storage:\r\n        (bool _wasInitialized, bytes memory _returnData) = _newImplementation.delegatecall(\r\n            abi.encodeWithSignature(\r\n                \"initialize(bytes)\",\r\n                _initData\r\n            )\r\n        );\r\n        if (!_wasInitialized) {\r\n            if (_returnData.length < 68) {\r\n                revert(\"WitnetProxy: initialization failed\");\r\n            } else {\r\n                assembly {\r\n                    _returnData := add(_returnData, 0x04)\r\n                }\r\n                revert(abi.decode(_returnData, (string)));\r\n            }\r\n        }\r\n\r\n        // If all checks and initialization pass, update implementation address:\r\n        __proxySlot().implementation = _newImplementation;\r\n    \r\n        emit Upgraded(_newImplementation);\r\n\r\n        // Asserts new implementation complies w/ minimal implementation of Upgradeable interface:\r\n        try Upgradeable(_newImplementation).isUpgradable() returns (bool _isUpgradable) {\r\n            return _isUpgradable;\r\n        }\r\n        catch {\r\n            revert (\"WitnetProxy: uncompliant implementation\");\r\n        }\r\n    }\r\n\r\n    /// @dev Complying with EIP-1967, retrieves storage struct containing proxy's current implementation address.\r\n    function __proxySlot() private pure returns (Proxiable.ProxiableSlot storage _slot) {\r\n        assembly {\r\n            // bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\r\n            _slot.slot := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\r\n        }\r\n    }\r\n\r\n}\r\n",
  "sourcePath": "C:\\Users\\guill\\github\\guidiaz\\witnet-solidity-bridge\\contracts\\core\\WitnetProxy.sol",
  "ast": {
    "absolutePath": "project:/contracts/core/WitnetProxy.sol",
    "exportedSymbols": {
      "ERC165": [
        616
      ],
      "IERC165": [
        628
      ],
      "Initializable": [
        267
      ],
      "Proxiable": [
        45810
      ],
      "Upgradeable": [
        45930
      ],
      "WitnetProxy": [
        8994
      ]
    },
    "id": 8995,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8769,
        "literals": [
          "solidity",
          ">=",
          "0.7",
          ".0",
          "<",
          "0.9",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "35:31:25"
      },
      {
        "id": 8770,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "68:33:25"
      },
      {
        "absolutePath": "project:/contracts/patterns/Upgradeable.sol",
        "file": "../patterns/Upgradeable.sol",
        "id": 8771,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8995,
        "sourceUnit": 45931,
        "src": "105:37:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "WitnetProxy",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 8772,
          "nodeType": "StructuredDocumentation",
          "src": "146:113:25",
          "text": "@title WitnetProxy: upgradable delegate-proxy contract. \n @author Guillermo Díaz <guillermo@witnet.io>"
        },
        "fullyImplemented": true,
        "id": 8994,
        "linearizedBaseContracts": [
          8994
        ],
        "name": "WitnetProxy",
        "nameLocation": "268:11:25",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 8773,
              "nodeType": "StructuredDocumentation",
              "src": "289:61:25",
              "text": "Event emitted every time the implementation gets updated."
            },
            "eventSelector": "bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b",
            "id": 8777,
            "name": "Upgraded",
            "nameLocation": "362:8:25",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8775,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "implementation",
                  "nameLocation": "387:14:25",
                  "nodeType": "VariableDeclaration",
                  "scope": 8777,
                  "src": "371:30:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8774,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "371:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "370:32:25"
            },
            "src": "356:47:25"
          },
          {
            "body": {
              "id": 8781,
              "nodeType": "Block",
              "src": "530:2:25",
              "statements": []
            },
            "documentation": {
              "id": 8778,
              "nodeType": "StructuredDocumentation",
              "src": "413:96:25",
              "text": "Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470)."
            },
            "id": 8782,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8779,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "527:2:25"
            },
            "returnParameters": {
              "id": 8780,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "530:0:25"
            },
            "scope": 8994,
            "src": "515:17:25",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8785,
              "nodeType": "Block",
              "src": "575:2:25",
              "statements": []
            },
            "id": 8786,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8783,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "547:2:25"
            },
            "returnParameters": {
              "id": 8784,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "575:0:25"
            },
            "scope": 8994,
            "src": "540:37:25",
            "stateMutability": "payable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8796,
              "nodeType": "Block",
              "src": "688:1023:25",
              "statements": [
                {
                  "assignments": [
                    8791
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8791,
                      "mutability": "mutable",
                      "name": "_implementation",
                      "nameLocation": "749:15:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 8796,
                      "src": "741:23:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8790,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "741:7:25",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8794,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8792,
                      "name": "implementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8808,
                      "src": "767:14:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 8793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "767:16:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "741:42:25"
                },
                {
                  "AST": {
                    "nativeSrc": "803:901:25",
                    "nodeType": "YulBlock",
                    "src": "803:901:25",
                    "statements": [
                      {
                        "nativeSrc": "1114:22:25",
                        "nodeType": "YulVariableDeclaration",
                        "src": "1114:22:25",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1131:4:25",
                              "nodeType": "YulLiteral",
                              "src": "1131:4:25",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "1125:5:25",
                            "nodeType": "YulIdentifier",
                            "src": "1125:5:25"
                          },
                          "nativeSrc": "1125:11:25",
                          "nodeType": "YulFunctionCall",
                          "src": "1125:11:25"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nativeSrc": "1118:3:25",
                            "nodeType": "YulTypedName",
                            "src": "1118:3:25",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nativeSrc": "1163:3:25",
                              "nodeType": "YulIdentifier",
                              "src": "1163:3:25"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1168:1:25",
                              "nodeType": "YulLiteral",
                              "src": "1168:1:25",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "calldatasize",
                                "nativeSrc": "1171:12:25",
                                "nodeType": "YulIdentifier",
                                "src": "1171:12:25"
                              },
                              "nativeSrc": "1171:14:25",
                              "nodeType": "YulFunctionCall",
                              "src": "1171:14:25"
                            }
                          ],
                          "functionName": {
                            "name": "calldatacopy",
                            "nativeSrc": "1150:12:25",
                            "nodeType": "YulIdentifier",
                            "src": "1150:12:25"
                          },
                          "nativeSrc": "1150:36:25",
                          "nodeType": "YulFunctionCall",
                          "src": "1150:36:25"
                        },
                        "nativeSrc": "1150:36:25",
                        "nodeType": "YulExpressionStatement",
                        "src": "1150:36:25"
                      },
                      {
                        "nativeSrc": "1200:77:25",
                        "nodeType": "YulVariableDeclaration",
                        "src": "1200:77:25",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "gas",
                                "nativeSrc": "1227:3:25",
                                "nodeType": "YulIdentifier",
                                "src": "1227:3:25"
                              },
                              "nativeSrc": "1227:5:25",
                              "nodeType": "YulFunctionCall",
                              "src": "1227:5:25"
                            },
                            {
                              "name": "_implementation",
                              "nativeSrc": "1234:15:25",
                              "nodeType": "YulIdentifier",
                              "src": "1234:15:25"
                            },
                            {
                              "name": "ptr",
                              "nativeSrc": "1251:3:25",
                              "nodeType": "YulIdentifier",
                              "src": "1251:3:25"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "calldatasize",
                                "nativeSrc": "1256:12:25",
                                "nodeType": "YulIdentifier",
                                "src": "1256:12:25"
                              },
                              "nativeSrc": "1256:14:25",
                              "nodeType": "YulFunctionCall",
                              "src": "1256:14:25"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1272:1:25",
                              "nodeType": "YulLiteral",
                              "src": "1272:1:25",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1275:1:25",
                              "nodeType": "YulLiteral",
                              "src": "1275:1:25",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "delegatecall",
                            "nativeSrc": "1214:12:25",
                            "nodeType": "YulIdentifier",
                            "src": "1214:12:25"
                          },
                          "nativeSrc": "1214:63:25",
                          "nodeType": "YulFunctionCall",
                          "src": "1214:63:25"
                        },
                        "variables": [
                          {
                            "name": "result",
                            "nativeSrc": "1204:6:25",
                            "nodeType": "YulTypedName",
                            "src": "1204:6:25",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nativeSrc": "1291:28:25",
                        "nodeType": "YulVariableDeclaration",
                        "src": "1291:28:25",
                        "value": {
                          "arguments": [],
                          "functionName": {
                            "name": "returndatasize",
                            "nativeSrc": "1303:14:25",
                            "nodeType": "YulIdentifier",
                            "src": "1303:14:25"
                          },
                          "nativeSrc": "1303:16:25",
                          "nodeType": "YulFunctionCall",
                          "src": "1303:16:25"
                        },
                        "variables": [
                          {
                            "name": "size",
                            "nativeSrc": "1295:4:25",
                            "nodeType": "YulTypedName",
                            "src": "1295:4:25",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nativeSrc": "1348:3:25",
                              "nodeType": "YulIdentifier",
                              "src": "1348:3:25"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1353:1:25",
                              "nodeType": "YulLiteral",
                              "src": "1353:1:25",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "name": "size",
                              "nativeSrc": "1356:4:25",
                              "nodeType": "YulIdentifier",
                              "src": "1356:4:25"
                            }
                          ],
                          "functionName": {
                            "name": "returndatacopy",
                            "nativeSrc": "1333:14:25",
                            "nodeType": "YulIdentifier",
                            "src": "1333:14:25"
                          },
                          "nativeSrc": "1333:28:25",
                          "nodeType": "YulFunctionCall",
                          "src": "1333:28:25"
                        },
                        "nativeSrc": "1333:28:25",
                        "nodeType": "YulExpressionStatement",
                        "src": "1333:28:25"
                      },
                      {
                        "cases": [
                          {
                            "body": {
                              "nativeSrc": "1414:111:25",
                              "nodeType": "YulBlock",
                              "src": "1414:111:25",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "1495:3:25",
                                        "nodeType": "YulIdentifier",
                                        "src": "1495:3:25"
                                      },
                                      {
                                        "name": "size",
                                        "nativeSrc": "1500:4:25",
                                        "nodeType": "YulIdentifier",
                                        "src": "1500:4:25"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "revert",
                                      "nativeSrc": "1488:6:25",
                                      "nodeType": "YulIdentifier",
                                      "src": "1488:6:25"
                                    },
                                    "nativeSrc": "1488:17:25",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1488:17:25"
                                  },
                                  "nativeSrc": "1488:17:25",
                                  "nodeType": "YulExpressionStatement",
                                  "src": "1488:17:25"
                                }
                              ]
                            },
                            "nativeSrc": "1406:119:25",
                            "nodeType": "YulCase",
                            "src": "1406:119:25",
                            "value": {
                              "kind": "number",
                              "nativeSrc": "1411:1:25",
                              "nodeType": "YulLiteral",
                              "src": "1411:1:25",
                              "type": "",
                              "value": "0"
                            }
                          },
                          {
                            "body": {
                              "nativeSrc": "1551:142:25",
                              "nodeType": "YulBlock",
                              "src": "1551:142:25",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "1663:3:25",
                                        "nodeType": "YulIdentifier",
                                        "src": "1663:3:25"
                                      },
                                      {
                                        "name": "size",
                                        "nativeSrc": "1668:4:25",
                                        "nodeType": "YulIdentifier",
                                        "src": "1668:4:25"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "return",
                                      "nativeSrc": "1656:6:25",
                                      "nodeType": "YulIdentifier",
                                      "src": "1656:6:25"
                                    },
                                    "nativeSrc": "1656:17:25",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1656:17:25"
                                  },
                                  "nativeSrc": "1656:17:25",
                                  "nodeType": "YulExpressionStatement",
                                  "src": "1656:17:25"
                                }
                              ]
                            },
                            "nativeSrc": "1543:150:25",
                            "nodeType": "YulCase",
                            "src": "1543:150:25",
                            "value": "default"
                          }
                        ],
                        "expression": {
                          "name": "result",
                          "nativeSrc": "1382:6:25",
                          "nodeType": "YulIdentifier",
                          "src": "1382:6:25"
                        },
                        "nativeSrc": "1375:318:25",
                        "nodeType": "YulSwitch",
                        "src": "1375:318:25"
                      }
                    ]
                  },
                  "evmVersion": "prague",
                  "externalReferences": [
                    {
                      "declaration": 8791,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1234:15:25",
                      "valueSize": 1
                    }
                  ],
                  "id": 8795,
                  "nodeType": "InlineAssembly",
                  "src": "794:910:25"
                }
              ]
            },
            "documentation": {
              "id": 8787,
              "nodeType": "StructuredDocumentation",
              "src": "585:69:25",
              "text": "Payable fallback accepts delegating calls to payable functions.  "
            },
            "id": 8797,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8788,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "668:2:25"
            },
            "returnParameters": {
              "id": 8789,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "688:0:25"
            },
            "scope": 8994,
            "src": "660:1051:25",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8807,
              "nodeType": "Block",
              "src": "1832:54:25",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8803,
                        "name": "__proxySlot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8993,
                        "src": "1850:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ProxiableSlot_$45781_storage_ptr_$",
                          "typeString": "function () pure returns (struct Proxiable.ProxiableSlot storage pointer)"
                        }
                      },
                      "id": 8804,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1850:13:25",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProxiableSlot_$45781_storage_ptr",
                        "typeString": "struct Proxiable.ProxiableSlot storage pointer"
                      }
                    },
                    "id": 8805,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "1864:14:25",
                    "memberName": "implementation",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 45776,
                    "src": "1850:28:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8802,
                  "id": 8806,
                  "nodeType": "Return",
                  "src": "1843:35:25"
                }
              ]
            },
            "documentation": {
              "id": 8798,
              "nodeType": "StructuredDocumentation",
              "src": "1719:51:25",
              "text": "Returns proxy's current implementation address."
            },
            "functionSelector": "5c60da1b",
            "id": 8808,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "implementation",
            "nameLocation": "1785:14:25",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8799,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1799:2:25"
            },
            "returnParameters": {
              "id": 8802,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8801,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8808,
                  "src": "1823:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8800,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1823:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1822:9:25"
            },
            "scope": 8994,
            "src": "1776:110:25",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8983,
              "nodeType": "Block",
              "src": "2287:2686:25",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8819,
                          "name": "_newImplementation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8811,
                          "src": "2353:18:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 8822,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2383:1:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 8821,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2375:7:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 8820,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2375:7:25",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2375:10:25",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2353:32:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e",
                        "id": 8825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2387:34:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a",
                          "typeString": "literal_string \"WitnetProxy: null implementation\""
                        },
                        "value": "WitnetProxy: null implementation"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a",
                          "typeString": "literal_string \"WitnetProxy: null implementation\""
                        }
                      ],
                      "id": 8818,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2345:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2345:77:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8827,
                  "nodeType": "ExpressionStatement",
                  "src": "2345:77:25"
                },
                {
                  "assignments": [
                    8829
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8829,
                      "mutability": "mutable",
                      "name": "_oldImplementation",
                      "nameLocation": "2443:18:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 8983,
                      "src": "2435:26:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8828,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2435:7:25",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8832,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8830,
                      "name": "implementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8808,
                      "src": "2464:14:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 8831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2464:16:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2435:45:25"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8838,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8833,
                      "name": "_oldImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8829,
                      "src": "2495:18:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2525:1:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 8835,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2517:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8834,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2517:7:25",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8837,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2517:10:25",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2495:32:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8914,
                  "nodeType": "IfStatement",
                  "src": "2491:1298:25",
                  "trueBody": {
                    "id": 8913,
                    "nodeType": "Block",
                    "src": "2529:1260:25",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 8842,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 8840,
                                "name": "_newImplementation",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8811,
                                "src": "2625:18:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 8841,
                                "name": "_oldImplementation",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8829,
                                "src": "2647:18:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2625:40:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5769746e657450726f78793a206e6f7468696e6720746f2075706772616465",
                              "id": 8843,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2667:33:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084",
                                "typeString": "literal_string \"WitnetProxy: nothing to upgrade\""
                              },
                              "value": "WitnetProxy: nothing to upgrade"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084",
                                "typeString": "literal_string \"WitnetProxy: nothing to upgrade\""
                              }
                            ],
                            "id": 8839,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "2617:7:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8844,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2617:84:25",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8845,
                        "nodeType": "ExpressionStatement",
                        "src": "2617:84:25"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 8859,
                              "nodeType": "Block",
                              "src": "2881:88:25",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 8855,
                                        "name": "_isUpgradable",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8852,
                                        "src": "2908:13:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      {
                                        "hexValue": "5769746e657450726f78793a206e6f742075706772616461626c65",
                                        "id": 8856,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2923:29:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f",
                                          "typeString": "literal_string \"WitnetProxy: not upgradable\""
                                        },
                                        "value": "WitnetProxy: not upgradable"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f",
                                          "typeString": "literal_string \"WitnetProxy: not upgradable\""
                                        }
                                      ],
                                      "id": 8854,
                                      "name": "require",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        4294967278,
                                        4294967278,
                                        4294967278
                                      ],
                                      "referencedDeclaration": 4294967278,
                                      "src": "2900:7:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (bool,string memory) pure"
                                      }
                                    },
                                    "id": 8857,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2900:53:25",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 8858,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2900:53:25"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 8860,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 8853,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 8852,
                                  "mutability": "mutable",
                                  "name": "_isUpgradable",
                                  "nameLocation": "2866:13:25",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8860,
                                  "src": "2861:18:25",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 8851,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2861:4:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "2860:20:25"
                            },
                            "src": "2852:117:25"
                          },
                          {
                            "block": {
                              "id": 8865,
                              "nodeType": "Block",
                              "src": "2976:87:25",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "hexValue": "5769746e657450726f78793a20756e61626c6520746f20636865636b207570677261646162696c697479",
                                        "id": 8862,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3002:44:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc",
                                          "typeString": "literal_string \"WitnetProxy: unable to check upgradability\""
                                        },
                                        "value": "WitnetProxy: unable to check upgradability"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc",
                                          "typeString": "literal_string \"WitnetProxy: unable to check upgradability\""
                                        }
                                      ],
                                      "id": 8861,
                                      "name": "revert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        4294967277,
                                        4294967277
                                      ],
                                      "referencedDeclaration": 4294967277,
                                      "src": "2995:6:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (string memory) pure"
                                      }
                                    },
                                    "id": 8863,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2995:52:25",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 8864,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2995:52:25"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 8866,
                            "nodeType": "TryCatchClause",
                            "src": "2970:93:25"
                          }
                        ],
                        "externalCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8847,
                                  "name": "_oldImplementation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8829,
                                  "src": "2817:18:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 8846,
                                "name": "Upgradeable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 45930,
                                "src": "2805:11:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Upgradeable_$45930_$",
                                  "typeString": "type(contract Upgradeable)"
                                }
                              },
                              "id": 8848,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2805:31:25",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Upgradeable_$45930",
                                "typeString": "contract Upgradeable"
                              }
                            },
                            "id": 8849,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2837:12:25",
                            "memberName": "isUpgradable",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 45904,
                            "src": "2805:44:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                              "typeString": "function () view external returns (bool)"
                            }
                          },
                          "id": 8850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2805:46:25",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8867,
                        "nodeType": "TryStatement",
                        "src": "2801:262:25"
                      },
                      {
                        "assignments": [
                          8869,
                          8871
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8869,
                            "mutability": "mutable",
                            "name": "_wasCalled",
                            "nameLocation": "3181:10:25",
                            "nodeType": "VariableDeclaration",
                            "scope": 8913,
                            "src": "3176:15:25",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 8868,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3176:4:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 8871,
                            "mutability": "mutable",
                            "name": "_result",
                            "nameLocation": "3206:7:25",
                            "nodeType": "VariableDeclaration",
                            "scope": 8913,
                            "src": "3193:20:25",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 8870,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3193:5:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8881,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "697355706772616461626c6546726f6d286164647265737329",
                                  "id": 8876,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3313:27:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_6b58960af5008b519145bb1cb07a67ee0927d8e642573c92f5babc4d0c2721d7",
                                    "typeString": "literal_string \"isUpgradableFrom(address)\""
                                  },
                                  "value": "isUpgradableFrom(address)"
                                },
                                {
                                  "expression": {
                                    "id": 8877,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967281,
                                    "src": "3363:3:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 8878,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3367:6:25",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "3363:10:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_6b58960af5008b519145bb1cb07a67ee0927d8e642573c92f5babc4d0c2721d7",
                                    "typeString": "literal_string \"isUpgradableFrom(address)\""
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 8874,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "3267:3:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 8875,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "3271:19:25",
                                "memberName": "encodeWithSignature",
                                "nodeType": "MemberAccess",
                                "src": "3267:23:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (string memory) pure returns (bytes memory)"
                                }
                              },
                              "id": 8879,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3267:125:25",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 8872,
                              "name": "_oldImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8829,
                              "src": "3217:18:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 8873,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3236:12:25",
                            "memberName": "delegatecall",
                            "nodeType": "MemberAccess",
                            "src": "3217:31:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) returns (bool,bytes memory)"
                            }
                          },
                          "id": 8880,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3217:190:25",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3175:232:25"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8883,
                              "name": "_wasCalled",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8869,
                              "src": "3430:10:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d656e746174696f6e",
                              "id": 8884,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3442:41:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4",
                                "typeString": "literal_string \"WitnetProxy: uncompliant implementation\""
                              },
                              "value": "WitnetProxy: uncompliant implementation"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4",
                                "typeString": "literal_string \"WitnetProxy: uncompliant implementation\""
                              }
                            ],
                            "id": 8882,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "3422:7:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3422:62:25",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8886,
                        "nodeType": "ExpressionStatement",
                        "src": "3422:62:25"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8890,
                                  "name": "_result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8871,
                                  "src": "3518:7:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                {
                                  "components": [
                                    {
                                      "id": 8892,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "3528:4:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_bool_$",
                                        "typeString": "type(bool)"
                                      },
                                      "typeName": {
                                        "id": 8891,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3528:4:25",
                                        "typeDescriptions": {}
                                      }
                                    }
                                  ],
                                  "id": 8893,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "3527:6:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bool_$",
                                    "typeString": "type(bool)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  },
                                  {
                                    "typeIdentifier": "t_type$_t_bool_$",
                                    "typeString": "type(bool)"
                                  }
                                ],
                                "expression": {
                                  "id": 8888,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "3507:3:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 8889,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "3511:6:25",
                                "memberName": "decode",
                                "nodeType": "MemberAccess",
                                "src": "3507:10:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8894,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3507:27:25",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5769746e657450726f78793a206e6f7420617574686f72697a6564",
                              "id": 8895,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3536:29:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2",
                                "typeString": "literal_string \"WitnetProxy: not authorized\""
                              },
                              "value": "WitnetProxy: not authorized"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2",
                                "typeString": "literal_string \"WitnetProxy: not authorized\""
                              }
                            ],
                            "id": 8887,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "3499:7:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3499:67:25",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8897,
                        "nodeType": "ExpressionStatement",
                        "src": "3499:67:25"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 8909,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 8900,
                                        "name": "_oldImplementation",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8829,
                                        "src": "3619:18:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 8899,
                                      "name": "Upgradeable",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 45930,
                                      "src": "3607:11:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Upgradeable_$45930_$",
                                        "typeString": "type(contract Upgradeable)"
                                      }
                                    },
                                    "id": 8901,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3607:31:25",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Upgradeable_$45930",
                                      "typeString": "contract Upgradeable"
                                    }
                                  },
                                  "id": 8902,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3639:13:25",
                                  "memberName": "proxiableUUID",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 45774,
                                  "src": "3607:45:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                                    "typeString": "function () view external returns (bytes32)"
                                  }
                                },
                                "id": 8903,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3607:47:25",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 8905,
                                        "name": "_newImplementation",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8811,
                                        "src": "3670:18:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 8904,
                                      "name": "Upgradeable",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 45930,
                                      "src": "3658:11:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Upgradeable_$45930_$",
                                        "typeString": "type(contract Upgradeable)"
                                      }
                                    },
                                    "id": 8906,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3658:31:25",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Upgradeable_$45930",
                                      "typeString": "contract Upgradeable"
                                    }
                                  },
                                  "id": 8907,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3690:13:25",
                                  "memberName": "proxiableUUID",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 45774,
                                  "src": "3658:45:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                                    "typeString": "function () view external returns (bytes32)"
                                  }
                                },
                                "id": 8908,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3658:47:25",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "3607:98:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5769746e657450726f78793a2070726f786961626c655555494473206d69736d61746368",
                              "id": 8910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3724:38:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8",
                                "typeString": "literal_string \"WitnetProxy: proxiableUUIDs mismatch\""
                              },
                              "value": "WitnetProxy: proxiableUUIDs mismatch"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8",
                                "typeString": "literal_string \"WitnetProxy: proxiableUUIDs mismatch\""
                              }
                            ],
                            "id": 8898,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "3581:7:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3581:196:25",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8912,
                        "nodeType": "ExpressionStatement",
                        "src": "3581:196:25"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8916,
                    8918
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8916,
                      "mutability": "mutable",
                      "name": "_wasInitialized",
                      "nameLocation": "3879:15:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 8983,
                      "src": "3874:20:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8915,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3874:4:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8918,
                      "mutability": "mutable",
                      "name": "_returnData",
                      "nameLocation": "3909:11:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 8983,
                      "src": "3896:24:25",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 8917,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3896:5:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8927,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "696e697469616c697a6528627974657329",
                            "id": 8923,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4012:19:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_439fab91f8ccf5be59586b9cf7bb7786c67a661a95ce1cfc146c1ed62922ae26",
                              "typeString": "literal_string \"initialize(bytes)\""
                            },
                            "value": "initialize(bytes)"
                          },
                          {
                            "id": 8924,
                            "name": "_initData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8813,
                            "src": "4050:9:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_439fab91f8ccf5be59586b9cf7bb7786c67a661a95ce1cfc146c1ed62922ae26",
                              "typeString": "literal_string \"initialize(bytes)\""
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "id": 8921,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "3970:3:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 8922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "3974:19:25",
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "3970:23:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 8925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3970:104:25",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 8919,
                        "name": "_newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8811,
                        "src": "3924:18:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 8920,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3943:12:25",
                      "memberName": "delegatecall",
                      "nodeType": "MemberAccess",
                      "src": "3924:31:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) returns (bool,bytes memory)"
                      }
                    },
                    "id": 8926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3924:161:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3873:212:25"
                },
                {
                  "condition": {
                    "id": 8929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "4100:16:25",
                    "subExpression": {
                      "id": 8928,
                      "name": "_wasInitialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8916,
                      "src": "4101:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8953,
                  "nodeType": "IfStatement",
                  "src": "4096:344:25",
                  "trueBody": {
                    "id": 8952,
                    "nodeType": "Block",
                    "src": "4118:322:25",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8933,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 8930,
                              "name": "_returnData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8918,
                              "src": "4137:11:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 8931,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4149:6:25",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "4137:18:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "3638",
                            "id": 8932,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4158:2:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_68_by_1",
                              "typeString": "int_const 68"
                            },
                            "value": "68"
                          },
                          "src": "4137:23:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8950,
                          "nodeType": "Block",
                          "src": "4247:182:25",
                          "statements": [
                            {
                              "AST": {
                                "nativeSrc": "4275:79:25",
                                "nodeType": "YulBlock",
                                "src": "4275:79:25",
                                "statements": [
                                  {
                                    "nativeSrc": "4298:37:25",
                                    "nodeType": "YulAssignment",
                                    "src": "4298:37:25",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "_returnData",
                                          "nativeSrc": "4317:11:25",
                                          "nodeType": "YulIdentifier",
                                          "src": "4317:11:25"
                                        },
                                        {
                                          "kind": "number",
                                          "nativeSrc": "4330:4:25",
                                          "nodeType": "YulLiteral",
                                          "src": "4330:4:25",
                                          "type": "",
                                          "value": "0x04"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nativeSrc": "4313:3:25",
                                        "nodeType": "YulIdentifier",
                                        "src": "4313:3:25"
                                      },
                                      "nativeSrc": "4313:22:25",
                                      "nodeType": "YulFunctionCall",
                                      "src": "4313:22:25"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "_returnData",
                                        "nativeSrc": "4298:11:25",
                                        "nodeType": "YulIdentifier",
                                        "src": "4298:11:25"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "prague",
                              "externalReferences": [
                                {
                                  "declaration": 8918,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "4298:11:25",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 8918,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "4317:11:25",
                                  "valueSize": 1
                                }
                              ],
                              "id": 8939,
                              "nodeType": "InlineAssembly",
                              "src": "4266:88:25"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 8943,
                                        "name": "_returnData",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8918,
                                        "src": "4390:11:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "components": [
                                          {
                                            "id": 8945,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "4404:6:25",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                              "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                              "id": 8944,
                                              "name": "string",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "4404:6:25",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "id": 8946,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "4403:8:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      ],
                                      "expression": {
                                        "id": 8941,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967295,
                                        "src": "4379:3:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 8942,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "4383:6:25",
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "src": "4379:10:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 8947,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4379:33:25",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 8940,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    4294967277,
                                    4294967277
                                  ],
                                  "referencedDeclaration": 4294967277,
                                  "src": "4372:6:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 8948,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4372:41:25",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8949,
                              "nodeType": "ExpressionStatement",
                              "src": "4372:41:25"
                            }
                          ]
                        },
                        "id": 8951,
                        "nodeType": "IfStatement",
                        "src": "4133:296:25",
                        "trueBody": {
                          "id": 8938,
                          "nodeType": "Block",
                          "src": "4162:79:25",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c6564",
                                    "id": 8935,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4188:36:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604",
                                      "typeString": "literal_string \"WitnetProxy: initialization failed\""
                                    },
                                    "value": "WitnetProxy: initialization failed"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604",
                                      "typeString": "literal_string \"WitnetProxy: initialization failed\""
                                    }
                                  ],
                                  "id": 8934,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    4294967277,
                                    4294967277
                                  ],
                                  "referencedDeclaration": 4294967277,
                                  "src": "4181:6:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 8936,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4181:44:25",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8937,
                              "nodeType": "ExpressionStatement",
                              "src": "4181:44:25"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 8958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8954,
                          "name": "__proxySlot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8993,
                          "src": "4534:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ProxiableSlot_$45781_storage_ptr_$",
                            "typeString": "function () pure returns (struct Proxiable.ProxiableSlot storage pointer)"
                          }
                        },
                        "id": 8955,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4534:13:25",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProxiableSlot_$45781_storage_ptr",
                          "typeString": "struct Proxiable.ProxiableSlot storage pointer"
                        }
                      },
                      "id": 8956,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "4548:14:25",
                      "memberName": "implementation",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45776,
                      "src": "4534:28:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8957,
                      "name": "_newImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8811,
                      "src": "4565:18:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4534:49:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8959,
                  "nodeType": "ExpressionStatement",
                  "src": "4534:49:25"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8961,
                        "name": "_newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8811,
                        "src": "4614:18:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8960,
                      "name": "Upgraded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8777,
                      "src": "4605:8:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4605:28:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8963,
                  "nodeType": "EmitStatement",
                  "src": "4600:33:25"
                },
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 8974,
                        "nodeType": "Block",
                        "src": "4826:47:25",
                        "statements": [
                          {
                            "expression": {
                              "id": 8972,
                              "name": "_isUpgradable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8970,
                              "src": "4848:13:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "functionReturnParameters": 8817,
                            "id": 8973,
                            "nodeType": "Return",
                            "src": "4841:20:25"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 8975,
                      "nodeType": "TryCatchClause",
                      "parameters": {
                        "id": 8971,
                        "nodeType": "ParameterList",
                        "parameters": [
                          {
                            "constant": false,
                            "id": 8970,
                            "mutability": "mutable",
                            "name": "_isUpgradable",
                            "nameLocation": "4811:13:25",
                            "nodeType": "VariableDeclaration",
                            "scope": 8975,
                            "src": "4806:18:25",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 8969,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4806:4:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "src": "4805:20:25"
                      },
                      "src": "4797:76:25"
                    },
                    {
                      "block": {
                        "id": 8980,
                        "nodeType": "Block",
                        "src": "4889:77:25",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "hexValue": "5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d656e746174696f6e",
                                  "id": 8977,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4912:41:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4",
                                    "typeString": "literal_string \"WitnetProxy: uncompliant implementation\""
                                  },
                                  "value": "WitnetProxy: uncompliant implementation"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4",
                                    "typeString": "literal_string \"WitnetProxy: uncompliant implementation\""
                                  }
                                ],
                                "id": 8976,
                                "name": "revert",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  4294967277,
                                  4294967277
                                ],
                                "referencedDeclaration": 4294967277,
                                "src": "4904:6:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (string memory) pure"
                                }
                              },
                              "id": 8978,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4904:50:25",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 8979,
                            "nodeType": "ExpressionStatement",
                            "src": "4904:50:25"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 8981,
                      "nodeType": "TryCatchClause",
                      "src": "4883:83:25"
                    }
                  ],
                  "externalCall": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "id": 8965,
                            "name": "_newImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8811,
                            "src": "4762:18:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8964,
                          "name": "Upgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45930,
                          "src": "4750:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Upgradeable_$45930_$",
                            "typeString": "type(contract Upgradeable)"
                          }
                        },
                        "id": 8966,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4750:31:25",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Upgradeable_$45930",
                          "typeString": "contract Upgradeable"
                        }
                      },
                      "id": 8967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4782:12:25",
                      "memberName": "isUpgradable",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45904,
                      "src": "4750:44:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                        "typeString": "function () view external returns (bool)"
                      }
                    },
                    "id": 8968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4750:46:25",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8982,
                  "nodeType": "TryStatement",
                  "src": "4746:220:25"
                }
              ]
            },
            "documentation": {
              "id": 8809,
              "nodeType": "StructuredDocumentation",
              "src": "1894:280:25",
              "text": "Upgrades the `implementation` address.\n @param _newImplementation New implementation address.\n @param _initData Raw data with which new implementation will be initialized.\n @return Returns whether new implementation would be further upgradable, or not."
            },
            "functionSelector": "6fbc15e9",
            "id": 8984,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "upgradeTo",
            "nameLocation": "2189:9:25",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8811,
                  "mutability": "mutable",
                  "name": "_newImplementation",
                  "nameLocation": "2207:18:25",
                  "nodeType": "VariableDeclaration",
                  "scope": 8984,
                  "src": "2199:26:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8810,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2199:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8813,
                  "mutability": "mutable",
                  "name": "_initData",
                  "nameLocation": "2240:9:25",
                  "nodeType": "VariableDeclaration",
                  "scope": 8984,
                  "src": "2227:22:25",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8812,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2227:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2198:52:25"
            },
            "returnParameters": {
              "id": 8817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8816,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8984,
                  "src": "2276:4:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8815,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2276:4:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2275:6:25"
            },
            "scope": 8994,
            "src": "2180:2793:25",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8992,
              "nodeType": "Block",
              "src": "5180:213:25",
              "statements": [
                {
                  "AST": {
                    "nativeSrc": "5200:186:25",
                    "nodeType": "YulBlock",
                    "src": "5200:186:25",
                    "statements": [
                      {
                        "nativeSrc": "5295:80:25",
                        "nodeType": "YulAssignment",
                        "src": "5295:80:25",
                        "value": {
                          "kind": "number",
                          "nativeSrc": "5309:66:25",
                          "nodeType": "YulLiteral",
                          "src": "5309:66:25",
                          "type": "",
                          "value": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"
                        },
                        "variableNames": [
                          {
                            "name": "_slot.slot",
                            "nativeSrc": "5295:10:25",
                            "nodeType": "YulIdentifier",
                            "src": "5295:10:25"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "prague",
                  "externalReferences": [
                    {
                      "declaration": 8989,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "5295:10:25",
                      "suffix": "slot",
                      "valueSize": 1
                    }
                  ],
                  "id": 8991,
                  "nodeType": "InlineAssembly",
                  "src": "5191:195:25"
                }
              ]
            },
            "documentation": {
              "id": 8985,
              "nodeType": "StructuredDocumentation",
              "src": "4981:109:25",
              "text": "@dev Complying with EIP-1967, retrieves storage struct containing proxy's current implementation address."
            },
            "id": 8993,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "__proxySlot",
            "nameLocation": "5105:11:25",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8986,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5116:2:25"
            },
            "returnParameters": {
              "id": 8990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8989,
                  "mutability": "mutable",
                  "name": "_slot",
                  "nameLocation": "5173:5:25",
                  "nodeType": "VariableDeclaration",
                  "scope": 8993,
                  "src": "5141:37:25",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ProxiableSlot_$45781_storage_ptr",
                    "typeString": "struct Proxiable.ProxiableSlot"
                  },
                  "typeName": {
                    "id": 8988,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8987,
                      "name": "Proxiable.ProxiableSlot",
                      "nameLocations": [
                        "5141:9:25",
                        "5151:13:25"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45781,
                      "src": "5141:23:25"
                    },
                    "referencedDeclaration": 45781,
                    "src": "5141:23:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProxiableSlot_$45781_storage_ptr",
                      "typeString": "struct Proxiable.ProxiableSlot"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5140:39:25"
            },
            "scope": 8994,
            "src": "5096:297:25",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "scope": 8995,
        "src": "259:5139:25",
        "usedErrors": [],
        "usedEvents": [
          8777
        ]
      }
    ],
    "src": "35:5365:25"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.30+commit.73712a01.Emscripten.clang"
  },
  "networks": {
    "5777": {
      "events": {},
      "links": {},
      "address": "0xC32CeF95b3AeF472088B6d3c2a90DC2a117654FB",
      "transactionHash": "0x2c68e14a10a4ce21ab89c01188d70a6b81ea88ca24dfcc6daaf666bd63145c82"
    }
  },
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-10-15T14:34:45.466Z",
  "devdoc": {
    "author": "Guillermo Díaz <guillermo@witnet.io>",
    "kind": "dev",
    "methods": {
      "upgradeTo(address,bytes)": {
        "params": {
          "_initData": "Raw data with which new implementation will be initialized.",
          "_newImplementation": "New implementation address."
        },
        "returns": {
          "_0": "Returns whether new implementation would be further upgradable, or not."
        }
      }
    },
    "title": "WitnetProxy: upgradable delegate-proxy contract. ",
    "version": 1
  },
  "userdoc": {
    "events": {
      "Upgraded(address)": {
        "notice": "Event emitted every time the implementation gets updated."
      }
    },
    "kind": "user",
    "methods": {
      "constructor": {
        "notice": "Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470)."
      },
      "implementation()": {
        "notice": "Returns proxy's current implementation address."
      },
      "upgradeTo(address,bytes)": {
        "notice": "Upgrades the `implementation` address."
      }
    },
    "version": 1
  }
}